From a736436b81ce34a91bc052a74ec3ae7618db71dc Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Mon, 5 Jan 2026 03:00:10 +0000 Subject: [PATCH] Sync build v0.9.131 Automated sync from private repository. Commit: f59f381d6d772507c3e3aa2df075e5aad7117a24 --- README.md | 27 ++++++++++++++++-- frontend/dist/VERSION | 2 +- ....js => CollisionExplorerModal-Cdrfz88i.js} | 2 +- ...-CvsxjCCE.js => Configuration-C3MvuoNz.js} | 2 +- ...l-Dqq3f6Pz.js => ConfirmModal-L-7rhSxP.js} | 2 +- ...tacts-mxXbTbA9.js => Contacts-CLo_3QPn.js} | 4 +-- ...X3j.js => ContactsMapMapLibre-mf58_i9D.js} | 2 +- ...oard-hO6Dz0_M.js => Dashboard-Dop9_aGo.js} | 2 +- .../{Grid-D-JXNHIH.js => Grid-C8VCh5UQ.js} | 2 +- ...adge-DD7AM9Wo.js => HashBadge-CfU2AT65.js} | 2 +- .../{Login-CBzC74a5.js => Login-B9IasWXY.js} | 2 +- .../{Logs-Cxxqjpy4.js => Logs-h6jfB2bG.js} | 2 +- ...a_-Lt.js => PacketDetailModal-B3xt7MuH.js} | 4 +-- ...ackets-BJCdpIv_.js => Packets-J4aqz3X0.js} | 2 +- ...out-eQKINMu6.js => PageLayout-B1Rz13MR.js} | 2 +- ...n41LCZU.js => PathMapMapLibre-VsLy1ylO.js} | 2 +- ...Z2fPuZN.js => SignalIndicator-BG13oVT6.js} | 2 +- ...ics-BbI-zZF_.js => Statistics-C1j5_QAP.js} | 2 +- ...{System-BUFgGDKc.js => System-P5aTX3YO.js} | 2 +- ...minal-eMLjwP-I.js => Terminal-BxXXEyNT.js} | 2 +- ...Hohx3.js => TimeRangeSelector-2mZINNQ_.js} | 2 +- frontend/dist/assets/WCM_Waves.enc | Bin 17210 -> 17210 bytes ...ivity-BEkQtz77.js => activity-DTqQg6_M.js} | 2 +- .../dist/assets/chevron-right-BpDWEipG.js | 1 - .../dist/assets/chevron-right-Pm8T9DZ1.js | 1 + frontend/dist/assets/circle-CyKbhSwb.js | 1 - frontend/dist/assets/circle-OFxS36sf.js | 1 + ...-BjkfQ8qu.js => external-link-BtJLfi91.js} | 2 +- frontend/dist/assets/folds.enc | Bin 265191 -> 265191 bytes .../{house-CH6EBns-.js => house-C8yJ0MKa.js} | 2 +- .../{index-u-aEBJEv.js => index-CnT6m9UL.js} | 4 +-- .../{info-DB0wMPyN.js => info-DSETn7DH.js} | 2 +- ...-S02pN6Pc.js => loader-circle-CQxh52S4.js} | 2 +- frontend/dist/assets/magma.enc | Bin 333239 -> 333239 bytes .../{map-Cv9tMAUH.js => map-Ln3tKWJm.js} | 2 +- ...ap-pin-Dxo4grF0.js => map-pin-ChtEo6bl.js} | 2 +- ...gl-Bo6KJfqq.js => maplibre-gl-VNF-YDUx.js} | 2 +- ...-cw-CwCmA6yx.js => refresh-cw-CLS7Qxt_.js} | 2 +- frontend/dist/assets/ribbons.enc | Bin 288111 -> 288111 bytes frontend/dist/assets/sand.enc | Bin 319556 -> 319556 bytes frontend/dist/assets/stars.enc | Bin 344546 -> 344546 bytes ...up-Bh7q2eR0.js => trending-up-lRPwgdrm.js} | 2 +- ...mjaXzP1s.js => triangle-alert-BVWkhQDA.js} | 2 +- .../{users-mNRSAj9B.js => users-3XLTrE24.js} | 2 +- frontend/dist/assets/water.enc | Bin 324823 -> 324823 bytes frontend/dist/assets/wcm-logo.enc | Bin 17210 -> 17210 bytes .../{zap-hdBg1E3g.js => zap-CaMlD59M.js} | 2 +- frontend/dist/index.html | 2 +- frontend/package.json | 2 +- 49 files changed, 66 insertions(+), 43 deletions(-) rename frontend/dist/assets/{CollisionExplorerModal-DpehaIf1.js => CollisionExplorerModal-Cdrfz88i.js} (97%) rename frontend/dist/assets/{Configuration-CvsxjCCE.js => Configuration-C3MvuoNz.js} (99%) rename frontend/dist/assets/{ConfirmModal-Dqq3f6Pz.js => ConfirmModal-L-7rhSxP.js} (95%) rename frontend/dist/assets/{Contacts-mxXbTbA9.js => Contacts-CLo_3QPn.js} (93%) rename frontend/dist/assets/{ContactsMapMapLibre-Dn2coX3j.js => ContactsMapMapLibre-mf58_i9D.js} (99%) rename frontend/dist/assets/{Dashboard-hO6Dz0_M.js => Dashboard-Dop9_aGo.js} (97%) rename frontend/dist/assets/{Grid-D-JXNHIH.js => Grid-C8VCh5UQ.js} (94%) rename frontend/dist/assets/{HashBadge-DD7AM9Wo.js => HashBadge-CfU2AT65.js} (94%) rename frontend/dist/assets/{Login-CBzC74a5.js => Login-B9IasWXY.js} (99%) rename frontend/dist/assets/{Logs-Cxxqjpy4.js => Logs-h6jfB2bG.js} (94%) rename frontend/dist/assets/{PacketDetailModal-7ELa_-Lt.js => PacketDetailModal-B3xt7MuH.js} (97%) rename frontend/dist/assets/{Packets-BJCdpIv_.js => Packets-J4aqz3X0.js} (95%) rename frontend/dist/assets/{PageLayout-eQKINMu6.js => PageLayout-B1Rz13MR.js} (96%) rename frontend/dist/assets/{PathMapMapLibre-Bn41LCZU.js => PathMapMapLibre-VsLy1ylO.js} (97%) rename frontend/dist/assets/{SignalIndicator-fZ2fPuZN.js => SignalIndicator-BG13oVT6.js} (97%) rename frontend/dist/assets/{Statistics-BbI-zZF_.js => Statistics-C1j5_QAP.js} (98%) rename frontend/dist/assets/{System-BUFgGDKc.js => System-P5aTX3YO.js} (97%) rename frontend/dist/assets/{Terminal-eMLjwP-I.js => Terminal-BxXXEyNT.js} (99%) rename frontend/dist/assets/{TimeRangeSelector-BJAHohx3.js => TimeRangeSelector-2mZINNQ_.js} (87%) rename frontend/dist/assets/{activity-BEkQtz77.js => activity-DTqQg6_M.js} (72%) delete mode 100644 frontend/dist/assets/chevron-right-BpDWEipG.js create mode 100644 frontend/dist/assets/chevron-right-Pm8T9DZ1.js delete mode 100644 frontend/dist/assets/circle-CyKbhSwb.js create mode 100644 frontend/dist/assets/circle-OFxS36sf.js rename frontend/dist/assets/{external-link-BjkfQ8qu.js => external-link-BtJLfi91.js} (74%) rename frontend/dist/assets/{house-CH6EBns-.js => house-C8yJ0MKa.js} (76%) rename frontend/dist/assets/{index-u-aEBJEv.js => index-CnT6m9UL.js} (98%) rename frontend/dist/assets/{info-DB0wMPyN.js => info-DSETn7DH.js} (68%) rename frontend/dist/assets/{loader-circle-S02pN6Pc.js => loader-circle-CQxh52S4.js} (54%) rename frontend/dist/assets/{map-Cv9tMAUH.js => map-Ln3tKWJm.js} (84%) rename frontend/dist/assets/{map-pin-Dxo4grF0.js => map-pin-ChtEo6bl.js} (74%) rename frontend/dist/assets/{maplibre-gl-Bo6KJfqq.js => maplibre-gl-VNF-YDUx.js} (99%) rename frontend/dist/assets/{refresh-cw-CwCmA6yx.js => refresh-cw-CLS7Qxt_.js} (79%) rename frontend/dist/assets/{trending-up-Bh7q2eR0.js => trending-up-lRPwgdrm.js} (87%) rename frontend/dist/assets/{triangle-alert-mjaXzP1s.js => triangle-alert-BVWkhQDA.js} (87%) rename frontend/dist/assets/{users-mNRSAj9B.js => users-3XLTrE24.js} (78%) rename frontend/dist/assets/{zap-hdBg1E3g.js => zap-CaMlD59M.js} (85%) diff --git a/README.md b/README.md index a010c49c..18819dbd 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,9 @@ The installer will: /opt/pymc_console/ ← Installed console files ``` -Once complete, access your dashboard at `http://:8000` +Once complete, access your dashboard at `https://:8000` + +> **Note:** The installer automatically generates a self-signed SSL certificate and enables HTTPS. Your browser will show a security warning — click **Advanced** → **Proceed** to accept the self-signed certificate. This is a one-time action per browser. ## Management Menu @@ -272,12 +274,33 @@ cat /etc/pymc_repeater/config.yaml ### Dashboard not loading 1. Verify service is running: `sudo systemctl status pymc-repeater` -2. Check if port 8000 is accessible: `curl http://localhost:8000/api/stats` +2. Check if port 8000 is accessible: `curl -k https://localhost:8000/api/stats` +3. If using HTTP instead of HTTPS, the connection will be refused (HTTPS is required) ### "Radio presets file not found" warning This warning during installation is non-fatal. The installer will continue and you can configure radio settings manually. The presets are fetched from an API; if the API is unavailable, common presets are offered as fallback options. +### Browser shows "Your connection is not private" + +This is expected behavior for the self-signed SSL certificate. Click **Advanced** → **Proceed to [IP] (unsafe)** to access the dashboard. This is safe for local network use. + +### Using custom SSL certificates + +To use your own certificates (e.g., from Let's Encrypt), update the paths in `/etc/pymc_repeater/config.yaml`: + +```yaml +web: + ssl_certificate: /path/to/your/cert.pem + ssl_private_key: /path/to/your/key.pem +``` + +Then restart the service: `sudo systemctl restart pymc-repeater` + +The auto-generated certificates are stored at: +- Certificate: `/etc/pymc_repeater/ssl/cert.pem` +- Private key: `/etc/pymc_repeater/ssl/key.pem` + ## Uninstalling ```bash diff --git a/frontend/dist/VERSION b/frontend/dist/VERSION index bad5df3d..b7303caa 100644 --- a/frontend/dist/VERSION +++ b/frontend/dist/VERSION @@ -1 +1 @@ -0.9.130 +0.9.131 diff --git a/frontend/dist/assets/CollisionExplorerModal-DpehaIf1.js b/frontend/dist/assets/CollisionExplorerModal-Cdrfz88i.js similarity index 97% rename from frontend/dist/assets/CollisionExplorerModal-DpehaIf1.js rename to frontend/dist/assets/CollisionExplorerModal-Cdrfz88i.js index 77df8788..ddc404fc 100644 --- a/frontend/dist/assets/CollisionExplorerModal-DpehaIf1.js +++ b/frontend/dist/assets/CollisionExplorerModal-Cdrfz88i.js @@ -1 +1 @@ -import{c as e,g as t,z as o,h as s,j as n,X as a}from"./index-u-aEBJEv.js";import{b as l,g as r,c as i}from"./recharts-bmHCCfxU.js";import{L as c}from"./leaflet-ClE6qLuu.js";import{T as d,a as m,C as u}from"./triangle-alert-mjaXzP1s.js";import{M as h}from"./map-pin-Dxo4grF0.js";const x=e("arrow-left-right",[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]]),p=e("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]),f=e("monitor-smartphone",[["path",{d:"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8",key:"10dyio"}],["path",{d:"M10 19v-3.96 3.15",key:"1irgej"}],["path",{d:"M7 19h5",key:"qswx4l"}],["rect",{width:"6",height:"10",x:"16",y:"12",rx:"2",key:"1egngj"}]]),y=e("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),b="#4338CA",v="#F59E0B",g="#39D98A";function w({hash:e,highlighted:t}){const[o,s]=l.useState(!1),a=l.useCallback(t=>{t.preventDefault(),t.stopPropagation(),function(e){if("undefined"!=typeof window&&(window.isSecureContext||"https:"===window.location.protocol||"localhost"===window.location.hostname)&&navigator.clipboard&&"function"==typeof navigator.clipboard.writeText)return navigator.clipboard.writeText(e).catch(()=>{}),!0;try{const t=window.scrollX,o=window.scrollY,s=document.createElement("textarea");s.value=e,s.style.cssText="position:fixed;left:-9999px;top:-9999px;opacity:0;pointer-events:none",s.setAttribute("readonly",""),document.body.appendChild(s),s.focus({preventScroll:!0}),s.select(),s.setSelectionRange(0,e.length);const n=document.execCommand("copy");return document.body.removeChild(s),window.scrollTo(t,o),n}catch{return!1}}(e),s(!0),setTimeout(()=>s(!1),2e3)},[e]),r=e.length>12?`${e.slice(0,12)}…`:e;return n.jsxs("button",{type:"button",onClick:a,className:i("inline-flex items-center gap-1 px-1.5 py-0.5 text-[10px] font-mono rounded transition-all","border border-border-subtle hover:border-border-strong cursor-pointer select-none",t?"bg-accent-secondary/20 border-accent-secondary/50":"bg-bg-subtle/80 hover:bg-bg-elevated"),title:`Click to copy: ${e}`,children:[n.jsx("span",{className:i("transition-colors",o?"text-accent-success":"text-text-secondary"),children:r}),o?n.jsx(m,{className:"w-2.5 h-2.5 text-accent-success"}):n.jsx(u,{className:"w-2.5 h-2.5 opacity-40"})]})}function j({node:e,className:t}){const o=e.contactType.toLowerCase(),s="room server"===o||"room_server"===o||"room"===o||"server"===o,a="companion"===o||"client"===o||"cli"===o;return s&&e.isRepeater?n.jsxs("div",{className:i("relative",t),children:[n.jsx(p,{className:"w-full h-full",style:{color:v}}),n.jsx(y,{className:"w-1/2 h-1/2 absolute -bottom-0.5 -right-0.5",style:{color:b}})]}):s?n.jsx(p,{className:t,style:{color:v}}):a?n.jsx(f,{className:i(t,"text-text-muted")}):e.isRepeater?e.isNeighbor?n.jsx(x,{className:t,style:{color:g}}):n.jsx(y,{className:t,style:{color:b}}):n.jsx(f,{className:i(t,"text-text-muted")})}function N({node:e,isHovered:t,onMouseEnter:o,onMouseLeave:s,onTouchStart:a}){return n.jsxs("div",{className:i("flex items-center gap-3 px-3 py-2.5 transition-colors rounded-lg",t?"bg-accent-secondary/10":"hover:bg-white/[0.03]"),onMouseEnter:o,onMouseLeave:s,onTouchStart:a,children:[n.jsx("div",{className:"flex-shrink-0 w-5 h-5",children:n.jsx(j,{node:e,className:"w-5 h-5"})}),n.jsxs("div",{className:"flex-1 min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[n.jsx("span",{className:"text-sm font-medium text-text-primary truncate",children:e.name}),e.isNeighbor&&n.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded font-medium",style:{backgroundColor:"rgba(57, 217, 138, 0.2)",color:"#39D98A"},children:"NBR"}),e.isRepeater&&n.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-white/10 text-text-muted font-medium",children:"RPT"})]}),n.jsx("div",{className:"mt-1",children:n.jsx(w,{hash:e.hash,highlighted:t})})]})]})}function k({nodes:e,hoveredHash:t,onNodeHover:o,onNodeLeave:s}){const a=l.useRef(null),r=l.useRef(null),i=l.useRef(new Map),d=l.useMemo(()=>e.filter(e=>e.latitude&&e.longitude&&0!==e.latitude&&0!==e.longitude),[e]);return l.useEffect(()=>{if(!r.current||a.current)return;const e=c.map(r.current,{zoomControl:!0,attributionControl:!0});return c.tileLayer("https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png",{attribution:'© OSM © CARTO'}).addTo(e),a.current=e,()=>{e.remove(),a.current=null}},[]),l.useEffect(()=>{const e=a.current;if(!e)return;if(i.current.forEach(e=>e.remove()),i.current.clear(),0===d.length)return;const t=c.latLngBounds([]);for(const n of d){if(!n.latitude||!n.longitude)continue;const a=c.latLng(n.latitude,n.longitude);t.extend(a);const l=n.isNeighbor?g:b,r=c.circleMarker(a,{radius:8,fillColor:l,fillOpacity:.8,color:"#fff",weight:2,opacity:.9});r.bindTooltip(n.name,{permanent:!1,direction:"top",offset:[0,-8],className:"collision-tooltip"}),r.on("mouseover",()=>o(n.hash)),r.on("mouseout",()=>s()),r.addTo(e),i.current.set(n.hash,r)}t.isValid()&&e.fitBounds(t,{padding:[40,40],maxZoom:12})},[d,o,s]),l.useEffect(()=>{i.current.forEach((e,o)=>{const s=d.find(e=>e.hash===o);if(!s)return;const n=o===t,a=s.isNeighbor?g:b;e.setStyle({radius:n?12:8,fillColor:n?"#FBBF24":a,weight:n?3:2}),n?(e.openTooltip(),e.bringToFront()):e.closeTooltip()})},[t,d]),0===d.length?n.jsx("div",{className:"h-full flex items-center justify-center bg-bg-subtle/30 rounded-lg",children:n.jsxs("div",{className:"text-center text-text-muted p-4",children:[n.jsx(h,{className:"w-8 h-8 mx-auto mb-2 opacity-40"}),n.jsx("p",{className:"text-sm",children:"No location data available"}),n.jsx("p",{className:"text-xs opacity-70",children:"Nodes need GPS coordinates to appear on the map"})]})}):n.jsx("div",{ref:r,className:"h-full w-full rounded-lg overflow-hidden"})}const C=l.memo(function({isOpen:e,prefix:c,candidateHashes:m,onClose:u}){const h=t(),x=o(),p=s(),[f,y]=l.useState(null),b=l.useMemo(()=>new Set(p.map(e=>e.hash)),[p]),v=null==h?void 0:h.neighbors,g=l.useMemo(()=>v?m.map(e=>{var t,o;const s=v[e];return{hash:e,name:(null==s?void 0:s.node_name)||(null==s?void 0:s.name)||`Unknown (${e.slice(0,8)}…)`,contactType:(null==s?void 0:s.contact_type)||"",isRepeater:(null==s?void 0:s.is_repeater)||"repeater"===(null==(t=null==s?void 0:s.contact_type)?void 0:t.toLowerCase())||"rep"===(null==(o=null==s?void 0:s.contact_type)?void 0:o.toLowerCase())||!1,isNeighbor:b.has(e),isHub:x.has(e),latitude:null==s?void 0:s.latitude,longitude:null==s?void 0:s.longitude,lastSeen:null==s?void 0:s.last_seen}}).sort((e,t)=>e.isNeighbor!==t.isNeighbor?e.isNeighbor?-1:1:e.name.localeCompare(t.name)):[],[m,v,b,x]),w=l.useCallback(e=>y(e),[]),j=l.useCallback(()=>y(null),[]);return l.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&u()};window.addEventListener("keydown",t);const o=window.scrollY,s={overflow:document.body.style.overflow,position:document.body.style.position,width:document.body.style.width,top:document.body.style.top};return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${o}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=s.overflow,document.body.style.position=s.position,document.body.style.width=s.width,document.body.style.top=s.top,window.scrollTo(0,o)}},[e,u]),e?r.createPortal(n.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm z-[10010] flex items-end sm:items-center justify-center",onClick:u,role:"dialog","aria-modal":"true","aria-labelledby":"collision-modal-title",children:n.jsxs("div",{className:i("glass-card-elevated w-full flex flex-col","max-h-[85vh] rounded-t-2xl rounded-b-none","sm:max-w-2xl sm:mx-4 sm:rounded-xl sm:max-h-[80vh]","pb-safe"),onClick:e=>e.stopPropagation(),children:[n.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border-subtle flex-shrink-0",children:[n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("div",{className:"p-2 rounded-lg bg-signal-fair/10",children:n.jsx(d,{className:"w-5 h-5 text-signal-fair"})}),n.jsxs("div",{children:[n.jsxs("h3",{id:"collision-modal-title",className:"text-base font-semibold text-text-primary",children:["Prefix Collision: ",n.jsx("span",{className:"font-mono text-accent-primary",children:c})]}),n.jsxs("p",{className:"text-xs text-text-muted",children:[g.length," nodes share this prefix"]})]})]}),n.jsx("button",{onClick:u,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:n.jsx(a,{className:"w-5 h-5"})})]}),n.jsxs("div",{className:"flex-1 min-h-0 flex flex-col sm:flex-row overflow-hidden",children:[n.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto sm:max-w-[280px] sm:border-r sm:border-border-subtle",children:n.jsx("div",{className:"p-2",children:g.map(e=>n.jsx(N,{node:e,isHovered:f===e.hash,onMouseEnter:()=>w(e.hash),onMouseLeave:j,onTouchStart:()=>w(e.hash)},e.hash))})}),n.jsx("div",{className:"h-48 sm:h-auto sm:flex-1 p-2 flex-shrink-0",children:n.jsx(k,{nodes:g,hoveredHash:f,onNodeHover:w,onNodeLeave:j})})]})]})}),document.body):null});export{x as A,C,p as M,y as S,f as a}; +import{c as e,g as t,z as o,h as s,j as n,X as a}from"./index-CnT6m9UL.js";import{b as l,g as r,c as i}from"./recharts-bmHCCfxU.js";import{L as c}from"./leaflet-ClE6qLuu.js";import{T as d,a as m,C as u}from"./triangle-alert-BVWkhQDA.js";import{M as h}from"./map-pin-ChtEo6bl.js";const x=e("arrow-left-right",[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]]),p=e("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]),f=e("monitor-smartphone",[["path",{d:"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8",key:"10dyio"}],["path",{d:"M10 19v-3.96 3.15",key:"1irgej"}],["path",{d:"M7 19h5",key:"qswx4l"}],["rect",{width:"6",height:"10",x:"16",y:"12",rx:"2",key:"1egngj"}]]),y=e("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),b="#4338CA",v="#F59E0B",g="#39D98A";function w({hash:e,highlighted:t}){const[o,s]=l.useState(!1),a=l.useCallback(t=>{t.preventDefault(),t.stopPropagation(),function(e){if("undefined"!=typeof window&&(window.isSecureContext||"https:"===window.location.protocol||"localhost"===window.location.hostname)&&navigator.clipboard&&"function"==typeof navigator.clipboard.writeText)return navigator.clipboard.writeText(e).catch(()=>{}),!0;try{const t=window.scrollX,o=window.scrollY,s=document.createElement("textarea");s.value=e,s.style.cssText="position:fixed;left:-9999px;top:-9999px;opacity:0;pointer-events:none",s.setAttribute("readonly",""),document.body.appendChild(s),s.focus({preventScroll:!0}),s.select(),s.setSelectionRange(0,e.length);const n=document.execCommand("copy");return document.body.removeChild(s),window.scrollTo(t,o),n}catch{return!1}}(e),s(!0),setTimeout(()=>s(!1),2e3)},[e]),r=e.length>12?`${e.slice(0,12)}…`:e;return n.jsxs("button",{type:"button",onClick:a,className:i("inline-flex items-center gap-1 px-1.5 py-0.5 text-[10px] font-mono rounded transition-all","border border-border-subtle hover:border-border-strong cursor-pointer select-none",t?"bg-accent-secondary/20 border-accent-secondary/50":"bg-bg-subtle/80 hover:bg-bg-elevated"),title:`Click to copy: ${e}`,children:[n.jsx("span",{className:i("transition-colors",o?"text-accent-success":"text-text-secondary"),children:r}),o?n.jsx(m,{className:"w-2.5 h-2.5 text-accent-success"}):n.jsx(u,{className:"w-2.5 h-2.5 opacity-40"})]})}function j({node:e,className:t}){const o=e.contactType.toLowerCase(),s="room server"===o||"room_server"===o||"room"===o||"server"===o,a="companion"===o||"client"===o||"cli"===o;return s&&e.isRepeater?n.jsxs("div",{className:i("relative",t),children:[n.jsx(p,{className:"w-full h-full",style:{color:v}}),n.jsx(y,{className:"w-1/2 h-1/2 absolute -bottom-0.5 -right-0.5",style:{color:b}})]}):s?n.jsx(p,{className:t,style:{color:v}}):a?n.jsx(f,{className:i(t,"text-text-muted")}):e.isRepeater?e.isNeighbor?n.jsx(x,{className:t,style:{color:g}}):n.jsx(y,{className:t,style:{color:b}}):n.jsx(f,{className:i(t,"text-text-muted")})}function N({node:e,isHovered:t,onMouseEnter:o,onMouseLeave:s,onTouchStart:a}){return n.jsxs("div",{className:i("flex items-center gap-3 px-3 py-2.5 transition-colors rounded-lg",t?"bg-accent-secondary/10":"hover:bg-white/[0.03]"),onMouseEnter:o,onMouseLeave:s,onTouchStart:a,children:[n.jsx("div",{className:"flex-shrink-0 w-5 h-5",children:n.jsx(j,{node:e,className:"w-5 h-5"})}),n.jsxs("div",{className:"flex-1 min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[n.jsx("span",{className:"text-sm font-medium text-text-primary truncate",children:e.name}),e.isNeighbor&&n.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded font-medium",style:{backgroundColor:"rgba(57, 217, 138, 0.2)",color:"#39D98A"},children:"NBR"}),e.isRepeater&&n.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-white/10 text-text-muted font-medium",children:"RPT"})]}),n.jsx("div",{className:"mt-1",children:n.jsx(w,{hash:e.hash,highlighted:t})})]})]})}function k({nodes:e,hoveredHash:t,onNodeHover:o,onNodeLeave:s}){const a=l.useRef(null),r=l.useRef(null),i=l.useRef(new Map),d=l.useMemo(()=>e.filter(e=>e.latitude&&e.longitude&&0!==e.latitude&&0!==e.longitude),[e]);return l.useEffect(()=>{if(!r.current||a.current)return;const e=c.map(r.current,{zoomControl:!0,attributionControl:!0});return c.tileLayer("https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png",{attribution:'© OSM © CARTO'}).addTo(e),a.current=e,()=>{e.remove(),a.current=null}},[]),l.useEffect(()=>{const e=a.current;if(!e)return;if(i.current.forEach(e=>e.remove()),i.current.clear(),0===d.length)return;const t=c.latLngBounds([]);for(const n of d){if(!n.latitude||!n.longitude)continue;const a=c.latLng(n.latitude,n.longitude);t.extend(a);const l=n.isNeighbor?g:b,r=c.circleMarker(a,{radius:8,fillColor:l,fillOpacity:.8,color:"#fff",weight:2,opacity:.9});r.bindTooltip(n.name,{permanent:!1,direction:"top",offset:[0,-8],className:"collision-tooltip"}),r.on("mouseover",()=>o(n.hash)),r.on("mouseout",()=>s()),r.addTo(e),i.current.set(n.hash,r)}t.isValid()&&e.fitBounds(t,{padding:[40,40],maxZoom:12})},[d,o,s]),l.useEffect(()=>{i.current.forEach((e,o)=>{const s=d.find(e=>e.hash===o);if(!s)return;const n=o===t,a=s.isNeighbor?g:b;e.setStyle({radius:n?12:8,fillColor:n?"#FBBF24":a,weight:n?3:2}),n?(e.openTooltip(),e.bringToFront()):e.closeTooltip()})},[t,d]),0===d.length?n.jsx("div",{className:"h-full flex items-center justify-center bg-bg-subtle/30 rounded-lg",children:n.jsxs("div",{className:"text-center text-text-muted p-4",children:[n.jsx(h,{className:"w-8 h-8 mx-auto mb-2 opacity-40"}),n.jsx("p",{className:"text-sm",children:"No location data available"}),n.jsx("p",{className:"text-xs opacity-70",children:"Nodes need GPS coordinates to appear on the map"})]})}):n.jsx("div",{ref:r,className:"h-full w-full rounded-lg overflow-hidden"})}const C=l.memo(function({isOpen:e,prefix:c,candidateHashes:m,onClose:u}){const h=t(),x=o(),p=s(),[f,y]=l.useState(null),b=l.useMemo(()=>new Set(p.map(e=>e.hash)),[p]),v=null==h?void 0:h.neighbors,g=l.useMemo(()=>v?m.map(e=>{var t,o;const s=v[e];return{hash:e,name:(null==s?void 0:s.node_name)||(null==s?void 0:s.name)||`Unknown (${e.slice(0,8)}…)`,contactType:(null==s?void 0:s.contact_type)||"",isRepeater:(null==s?void 0:s.is_repeater)||"repeater"===(null==(t=null==s?void 0:s.contact_type)?void 0:t.toLowerCase())||"rep"===(null==(o=null==s?void 0:s.contact_type)?void 0:o.toLowerCase())||!1,isNeighbor:b.has(e),isHub:x.has(e),latitude:null==s?void 0:s.latitude,longitude:null==s?void 0:s.longitude,lastSeen:null==s?void 0:s.last_seen}}).sort((e,t)=>e.isNeighbor!==t.isNeighbor?e.isNeighbor?-1:1:e.name.localeCompare(t.name)):[],[m,v,b,x]),w=l.useCallback(e=>y(e),[]),j=l.useCallback(()=>y(null),[]);return l.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&u()};window.addEventListener("keydown",t);const o=window.scrollY,s={overflow:document.body.style.overflow,position:document.body.style.position,width:document.body.style.width,top:document.body.style.top};return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${o}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=s.overflow,document.body.style.position=s.position,document.body.style.width=s.width,document.body.style.top=s.top,window.scrollTo(0,o)}},[e,u]),e?r.createPortal(n.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm z-[10010] flex items-end sm:items-center justify-center",onClick:u,role:"dialog","aria-modal":"true","aria-labelledby":"collision-modal-title",children:n.jsxs("div",{className:i("glass-card-elevated w-full flex flex-col","max-h-[85vh] rounded-t-2xl rounded-b-none","sm:max-w-2xl sm:mx-4 sm:rounded-xl sm:max-h-[80vh]","pb-safe"),onClick:e=>e.stopPropagation(),children:[n.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border-subtle flex-shrink-0",children:[n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("div",{className:"p-2 rounded-lg bg-signal-fair/10",children:n.jsx(d,{className:"w-5 h-5 text-signal-fair"})}),n.jsxs("div",{children:[n.jsxs("h3",{id:"collision-modal-title",className:"text-base font-semibold text-text-primary",children:["Prefix Collision: ",n.jsx("span",{className:"font-mono text-accent-primary",children:c})]}),n.jsxs("p",{className:"text-xs text-text-muted",children:[g.length," nodes share this prefix"]})]})]}),n.jsx("button",{onClick:u,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:n.jsx(a,{className:"w-5 h-5"})})]}),n.jsxs("div",{className:"flex-1 min-h-0 flex flex-col sm:flex-row overflow-hidden",children:[n.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto sm:max-w-[280px] sm:border-r sm:border-border-subtle",children:n.jsx("div",{className:"p-2",children:g.map(e=>n.jsx(N,{node:e,isHovered:f===e.hash,onMouseEnter:()=>w(e.hash),onMouseLeave:j,onTouchStart:()=>w(e.hash)},e.hash))})}),n.jsx("div",{className:"h-48 sm:h-auto sm:flex-1 p-2 flex-shrink-0",children:n.jsx(k,{nodes:g,hoveredHash:f,onNodeHover:w,onNodeLeave:j})})]})]})}),document.body):null});export{x as A,C,p as M,y as S,f as a}; diff --git a/frontend/dist/assets/Configuration-CvsxjCCE.js b/frontend/dist/assets/Configuration-C3MvuoNz.js similarity index 99% rename from frontend/dist/assets/Configuration-CvsxjCCE.js rename to frontend/dist/assets/Configuration-C3MvuoNz.js index bf7e2568..45eb0b93 100644 --- a/frontend/dist/assets/Configuration-CvsxjCCE.js +++ b/frontend/dist/assets/Configuration-C3MvuoNz.js @@ -1 +1 @@ -import{c as e,ae as t,af as s,ag as a,j as r,J as n,ah as l,ai as c,aj as i,ak as d,X as o,al as u,E as m,am as x,R as p,ac as h,an as b,ao as y,ap as g,aq as f,ar as j,as as v,at as N,au as w,av as k}from"./index-u-aEBJEv.js";import{b as C,c as _}from"./recharts-bmHCCfxU.js";import{H as S}from"./HashBadge-DD7AM9Wo.js";import{T,C as F}from"./ConfirmModal-Dqq3f6Pz.js";import{P as E,a as L,C as M,b as P}from"./PageLayout-eQKINMu6.js";import{R,C as z}from"./Grid-D-JXNHIH.js";import{L as A}from"./loader-circle-S02pN6Pc.js";import{a as I,T as D,C as H}from"./triangle-alert-mjaXzP1s.js";import{I as O}from"./info-DB0wMPyN.js";import{E as q}from"./external-link-BjkfQ8qu.js";import{R as K}from"./refresh-cw-CwCmA6yx.js";import{C as V}from"./chevron-right-BpDWEipG.js";import"./maplibre-gl-CFO9X1Ek.js";const $=e("antenna",[["path",{d:"M2 12 7 2",key:"117k30"}],["path",{d:"m7 12 5-10",key:"1tvx22"}],["path",{d:"m12 12 5-10",key:"ev1o1a"}],["path",{d:"m17 12 5-10",key:"1e4ti3"}],["path",{d:"M4.5 7h15",key:"vlsxkz"}],["path",{d:"M12 16v6",key:"c8a4gj"}]]),Y=e("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),B=e("folder-key",[["circle",{cx:"16",cy:"20",r:"2",key:"1vifvg"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2",key:"3hgo9p"}],["path",{d:"m22 14-4.5 4.5",key:"1ef6z8"}],["path",{d:"m21 15 1 1",key:"1ejcpy"}]]),U=e("folder-lock",[["rect",{width:"8",height:"5",x:"14",y:"17",rx:"1",key:"19aais"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2.5",key:"1w6v7t"}],["path",{d:"M20 17v-2a2 2 0 1 0-4 0v2",key:"pwaxnr"}]]),X=e("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),G=e("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),W=e("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]),J=e("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]),Q=e("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),Z=e("shield-x",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m14.5 9.5-5 5",key:"17q4r4"}],["path",{d:"m9.5 9.5 5 5",key:"18nt4w"}]]),ee=C.memo(function({showLogoOnly:e=!1,showThumbnailsOnly:n=!1}){const{theme:l,setThemePreset:c,setBrightness:i}=t(),{backgroundImage:d,brightness:o}=l,[u,m]=C.useState(!1),[x,p]=C.useState(!1),h=C.useRef(null),b=C.useRef(null),y=s.find(e=>e.backgroundImage===d)??s[0],g=y.id,f=C.useCallback((e,t)=>{if(!b.current)return o;const s=(b.current.y-e)/(t?200:80)*100;return Math.round(Math.max(0,Math.min(100,b.current.brightness+s)))},[o]),j=C.useCallback(e=>{c(e),m(!0)},[c]),v=C.useCallback(e=>{i(e)},[i]),N=C.useCallback(e=>{const t=s.find(t=>t.id===e);t&&a(t.backgroundImage)},[]);if(e){const e=y.displaySize,t=`clamp(${.8*e}rem, ${.6*e}rem + 1.5vw, ${1.4*e}rem)`;return r.jsx("span",{className:"font-medium transition-all duration-300 leading-none",style:{fontFamily:y.displayFont,color:y.displayColor,fontSize:t,fontOpticalSizing:"auto",letterSpacing:"-0.03em"},children:y.displayName})}return r.jsx("div",{className:"flex gap-2 items-start flex-shrink-0",children:s.map(e=>{const t=g===e.id,s=t&&(u||x);return r.jsxs("div",{ref:t?h:void 0,title:e.displayName,className:_("flex flex-col items-center gap-1 p-0.5 rounded-sm transition-all duration-300 ease-out",t?"ring-2 ring-accent-primary scale-105 cursor-ns-resize":"cursor-pointer"),onMouseEnter:()=>{t?m(!0):N(e.id)},onMouseLeave:()=>!x&&m(!1),onClick:()=>!t&&j(e.id),onTouchStart:e=>{if(!t)return;e.preventDefault();const s=e.touches[0];b.current={y:s.clientY,brightness:o},p(!0),m(!0);const a=e=>{e.preventDefault();const t=e.touches[0];v(f(t.clientY,!0))},r=()=>{document.removeEventListener("touchmove",a),document.removeEventListener("touchend",r),b.current=null,p(!1),setTimeout(()=>m(!1),1500)};document.addEventListener("touchmove",a,{passive:!1}),document.addEventListener("touchend",r)},onMouseDown:e=>{if(!t)return;e.preventDefault(),b.current={y:e.clientY,brightness:o},p(!0),m(!0);const s=e=>{v(f(e.clientY,!1))},a=()=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",a),b.current=null,p(!1)};document.addEventListener("mousemove",s),document.addEventListener("mouseup",a)},children:[r.jsxs("div",{className:"glass-thumbnail w-10 h-10",children:[r.jsx("div",{className:"absolute bg-cover bg-center transition-opacity duration-200",style:{inset:0,backgroundImage:`url(${e.backgroundImage})`,opacity:s?.4:1}}),t&&r.jsxs("div",{className:_("absolute inset-0 transition-opacity duration-200",s?"opacity-100":"opacity-0"),children:[r.jsx("div",{className:"absolute inset-x-0 bottom-0 bg-black/70 transition-all duration-100 ease-out",style:{height:100-o+"%"}}),r.jsx("div",{className:"absolute inset-x-1 h-0.5 bg-white rounded-full shadow-lg transition-all duration-100 ease-out",style:{top:100-o+"%"}}),r.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:r.jsxs("span",{className:"text-[10px] font-mono font-bold text-white drop-shadow-lg",children:[o,"%"]})})]})]}),r.jsx("div",{className:"flex flex-col gap-0.5",children:e.paletteColors.map((e,t)=>r.jsx("div",{className:"flex gap-0.5 justify-center",children:e.map((e,t)=>r.jsx("div",{className:"w-1.5 h-1.5 rounded-xs",style:{backgroundColor:e}},t))},t))})]},e.id)})})}),te=[{value:7.8,label:"7.8 kHz"},{value:10.4,label:"10.4 kHz"},{value:15.6,label:"15.6 kHz"},{value:20.8,label:"20.8 kHz"},{value:31.25,label:"31.25 kHz"},{value:41.7,label:"41.7 kHz"},{value:62.5,label:"62.5 kHz"},{value:125,label:"125 kHz"},{value:250,label:"250 kHz"},{value:500,label:"500 kHz"}],se=[5,6,7,8,9,10,11,12],ae=[{value:5,label:"4/5"},{value:6,label:"4/6"},{value:7,label:"4/7"},{value:8,label:"4/8"}];function re(){var e,t,s,a,re,ne;const{stats:le,setMode:ce,clearModeMutation:ie,setDutyCycleConfig:de,clearDutyCycleMutation:oe,fetchStats:ue}=n(),me=null==(e=null==le?void 0:le.config)?void 0:e.radio,xe=null==(t=null==le?void 0:le.config)?void 0:t.repeater,pe=null==(s=null==le?void 0:le.config)?void 0:s.duty_cycle,he=(null==le?void 0:le.node_name)||(null==(a=null==le?void 0:le.config)?void 0:a.node_name)||"Unknown Node",be=(null==xe?void 0:xe.mode)??"forward",ye=(null==pe?void 0:pe.enforcement_enabled)??!1,ge=null==(re=null==le?void 0:le.config)?void 0:re.delays,[fe,je]=C.useState(!1),[ve,Ne]=C.useState(""),[we,ke]=C.useState(62.5),[Ce,_e]=C.useState(7),[Se,Te]=C.useState(5),[Fe,Ee]=C.useState(""),[Le,Me]=C.useState("idle"),[Pe,Re]=C.useState(null),ze=C.useRef(null),Ae=C.useRef(null),Ie=C.useRef(null),[De,He]=C.useState("idle"),[Oe,qe]=C.useState("idle"),[Ke,Ve]=C.useState(null),[$e,Ye]=C.useState(null),Be=C.useRef(!0),Ue=C.useRef(null),Xe=C.useRef(null),Ge=C.useRef(null),We=C.useRef(null),Je=C.useRef(!1),Qe=C.useRef(!1);C.useEffect(()=>(Be.current=!0,()=>{Be.current=!1,Ue.current&&clearTimeout(Ue.current),Xe.current&&clearTimeout(Xe.current),Ge.current&&clearTimeout(Ge.current),We.current&&clearTimeout(We.current),Lt.current&&clearTimeout(Lt.current),Mt.current&&clearTimeout(Mt.current),Ae.current&&clearTimeout(Ae.current),dt.current&&clearTimeout(dt.current),Ct.current&&clearTimeout(Ct.current)}),[]);const[Ze,et]=C.useState(!1),[tt,st]=C.useState(""),[at,rt]=C.useState(""),[nt,lt]=C.useState(""),[ct,it]=C.useState("idle"),dt=C.useRef(null),[ot,ut]=C.useState(!1),[mt,xt]=C.useState(""),[pt,ht]=C.useState(""),[bt,yt]=C.useState(""),[gt,ft]=C.useState(""),[jt,vt]=C.useState("idle"),[Nt,wt]=C.useState(null),kt=C.useRef(null),Ct=C.useRef(null),_t=null==(ne=null==le?void 0:le.config)?void 0:ne.web,[St,Tt]=C.useState("idle"),[Ft,Et]=C.useState(null),Lt=C.useRef(null),Mt=C.useRef(null),Pt=C.useRef(!1),[Rt,zt]=C.useState([]),[At,It]=C.useState(!1),[Dt,Ht]=C.useState(null),[Ot,qt]=C.useState(!1),[Kt,Vt]=C.useState(""),[$t,Yt]=C.useState(null),[Bt,Ut]=C.useState(!1),[Xt,Gt]=C.useState(null),[Wt,Jt]=C.useState(!1),[Qt,Zt]=C.useState(!1),[es,ts]=C.useState(!1),[ss,as]=C.useState([]),[rs,ns]=C.useState(!1),[ls,cs]=C.useState(null),[is,ds]=C.useState("deny"),[os,us]=C.useState(!1),[ms,xs]=C.useState(null),[ps,hs]=C.useState(new Set),[bs,ys]=C.useState(!1),[gs,fs]=C.useState(!1),[js,vs]=C.useState(!1),[Ns,ws]=C.useState(null),[ks,Cs]=C.useState(null),[_s,Ss]=C.useState(""),[Ts,Fs]=C.useState("deny"),[Es,Ls]=C.useState(!1),[Ms,Ps]=C.useState(!0),[Rs,zs]=C.useState(!1),[As,Is]=C.useState(!0),[Ds,Hs]=C.useState("idle"),[Os,qs]=C.useState(!1),[Ks,Vs]=C.useState(!1);C.useEffect(()=>{me&&fe&&(Ne((me.frequency/1e6).toFixed(3)),ke(me.bandwidth/1e3),_e(me.spreading_factor),Te(me.coding_rate),Ee(String(me.tx_power)))},[me,fe]);const $s=C.useMemo(()=>{if(!me||!fe)return!1;const e=me.frequency/1e6,t=me.bandwidth/1e3,s=parseFloat(ve)||0;return Math.abs(s-e)>1e-4||we!==t||Ce!==me.spreading_factor||Se!==me.coding_rate||parseInt(Fe)!==me.tx_power},[me,fe,ve,we,Ce,Se,Fe]),Ys=C.useCallback(()=>{je(!1),Re(null),me&&(Ne((me.frequency/1e6).toFixed(3)),ke(me.bandwidth/1e3),_e(me.spreading_factor),Te(me.coding_rate),Ee(String(me.tx_power)))},[me]);C.useEffect(()=>{if(!fe)return;const e=e=>{ze.current&&!ze.current.contains(e.target)&&Ys()};return document.addEventListener("mouseup",e),()=>{document.removeEventListener("mouseup",e)}},[fe,Ys]);const Bs=C.useCallback(()=>{const e=null==ge?void 0:ge.tx_delay_factor;return e&&"object"==typeof e&&"parsedValue"in e?e.parsedValue??1:"number"==typeof e?e:1},[ge]),Us=C.useCallback(()=>{const e=null==ge?void 0:ge.direct_tx_delay_factor;return"number"==typeof e?e:.5},[ge]),Xs=C.useCallback(()=>{const e=null==pe?void 0:pe.max_airtime_percent;return"number"==typeof e?e:e&&"object"==typeof e&&"parsedValue"in e?e.parsedValue??6:6},[pe]),Gs=C.useCallback(()=>{st(Bs().toFixed(2)),rt(Us().toFixed(2)),lt(Xs().toFixed(1)),et(!0)},[Bs,Us,Xs]),Ws=C.useCallback(()=>{et(!1)},[]);C.useEffect(()=>{if(!Ze)return;const e=e=>{Ie.current&&!Ie.current.contains(e.target)&&Ws()};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[Ze,Ws]);const Js=C.useCallback(()=>{var e,t,s;xt(he),ht((null==(e=null==xe?void 0:xe.latitude)?void 0:e.toString())||"0"),yt((null==(t=null==xe?void 0:xe.longitude)?void 0:t.toString())||"0"),ft((null==(s=null==xe?void 0:xe.send_advert_interval_hours)?void 0:s.toString())||"0"),wt(null),ut(!0)},[he,xe]),Qs=C.useCallback(()=>{ut(!1),wt(null)},[]);C.useEffect(()=>{if(!ot)return;const e=e=>{kt.current&&!kt.current.contains(e.target)&&Qs()};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[ot,Qs]);const Zs=async()=>{var e;if("loading"===St)return;const t=(null==_t?void 0:_t.cors_enabled)??!1,s=!t,a=t;Lt.current&&clearTimeout(Lt.current),Mt.current&&clearTimeout(Mt.current),Pt.current=!1,Et(s),Tt("loading"),Lt.current=setTimeout(()=>{Pt.current||Be.current&&(Et(a),Tt("error"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3))},1e4);try{const t=await b({web:{cors_enabled:s}});if(Pt.current=!0,Lt.current&&clearTimeout(Lt.current),!Be.current)return;t.success||(null==(e=t.data)?void 0:e.persisted)?(await ue(),Tt("success"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3)):(Et(a),Tt("error"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3))}catch{if(Pt.current=!0,Lt.current&&clearTimeout(Lt.current),!Be.current)return;Et(a),Tt("error"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3)}};C.useEffect(()=>{(async()=>{Is(!0);try{const e=await y();e.success&&e.data?zs(e.data.exists):zs(!1);const t=null==_t?void 0:_t.web_path;Ps(!t||""===t)}catch{zs(!1)}finally{Is(!1)}})()},[null==_t?void 0:_t.web_path]);const ea=async e=>{var t;if("loading"!==Ds){Hs("loading");try{const s=await b({web:{web_path:e?null:"/opt/pymc_console/web/html"}});if(!Be.current)return;s.success||(null==(t=s.data)?void 0:t.persisted)?(Ps(e),Hs("success"),qs(!0),setTimeout(()=>{Be.current&&Hs("idle")},2e3)):(Hs("error"),setTimeout(()=>{Be.current&&Hs("idle")},2e3))}catch{if(!Be.current)return;Hs("error"),setTimeout(()=>{Be.current&&Hs("idle")},2e3)}}},ta=C.useCallback(async()=>{It(!0),Ht(null);try{const e=await l();zt(e.tokens||[])}catch(e){Ht(e instanceof Error?e.message:"Failed to fetch tokens")}finally{It(!1)}},[]);C.useEffect(()=>{ta()},[ta]);const sa=async()=>{if(Kt.trim()){Jt(!0),Ht(null);try{const e=await f(Kt.trim());Yt(e.token||null),qt(!1),Ut(!0),Vt(""),await ta()}catch(e){Ht(e instanceof Error?e.message:"Failed to create token")}finally{Jt(!1)}}else Ht("Token name is required")},aa=e=>e?new Date(1e3*e).toLocaleString():"Never",ra=C.useCallback(e=>{const t=new Map,s=[];return e.forEach(e=>{const s={id:e.id,name:e.name,floodPolicy:e.flood_policy,transport_key:e.transport_key,last_used:e.last_used,parent_id:e.parent_id,children:[]};t.set(e.id,s)}),t.forEach(e=>{e.parent_id&&t.has(e.parent_id)?t.get(e.parent_id).children.push(e):s.push(e)}),s},[]),na=C.useCallback(async()=>{ns(!0),cs(null);try{const e=await c();e.success&&e.data?as(ra(e.data)):cs(e.error||"Failed to load transport keys")}catch(e){cs(e instanceof Error?e.message:"Unknown error occurred")}finally{ns(!1)}},[ra]);C.useEffect(()=>{na()},[na]);const la=C.useCallback((e,t)=>{for(const s of e){if(s.id===t)return s;if(s.children){const e=la(s.children,t);if(e)return e}}return null},[]),ca=C.useCallback(()=>{if(!ms)return;const e=la(ss,ms);return null==e?void 0:e.name},[ms,ss,la]),ia=C.useCallback(e=>{hs(t=>{const s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),da=async e=>{us(!0),cs(null);try{const t=await v("allow"===e);t.success?ds(e):cs(t.error||"Failed to update global flood policy")}catch(t){cs(t instanceof Error?t.message:"Failed to update global flood policy")}finally{us(!1)}},oa=async()=>{if(_s.trim()){Ls(!0),cs(null);try{const e=await N({name:_s.trim(),flood_policy:Ts,parent_id:ms??void 0});e.success?(await na(),ys(!1),Ss(""),Fs("deny")):cs(e.error||"Failed to add transport key")}catch(e){cs(e instanceof Error?e.message:"Failed to add transport key")}finally{Ls(!1)}}else cs("Key name is required")},ua=C.useCallback(()=>{if(!ms)return;const e=la(ss,ms);e&&(ws({...e}),fs(!0))},[ms,ss,la]);C.useEffect(()=>{const e=e=>{"Escape"===e.key&&(bs&&(ys(!1),Ss(""),Fs("deny")),gs&&(fs(!1),ws(null)),js&&(vs(!1),Cs(null)),Ot&&(qt(!1),Vt("")),Bt&&(Ut(!1),Yt(null)))};if(bs||gs||js||Ot||Bt)return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[bs,gs,js,Ot,Bt]);const ma=C.useCallback(()=>{if(!ms)return;const e=la(ss,ms);e&&(Cs(e),vs(!0))},[ms,ss,la]),xa=({node:e,level:t})=>{const s=ps.has(e.id),a=ms===e.id,n=e.children&&e.children.length>0,l="allow"===is;return r.jsxs("div",{children:[r.jsxs("div",{className:_("flex items-center gap-2 h-[36px] px-3 rounded-full cursor-pointer transition-colors",a?"bg-accent-primary/15":"hover:bg-white/[0.02]",l&&"opacity-50 cursor-not-allowed"),style:{marginLeft:16*t+"px"},onClick:()=>!l&&xs(e.id),children:[n?r.jsx("button",{onClick:t=>{t.stopPropagation(),ia(e.id)},className:"p-1 hover:bg-white/[0.05] rounded-full transition-colors",children:r.jsx(V,{className:_("w-3.5 h-3.5 text-text-muted transition-transform",s&&"rotate-90")})}):r.jsx("span",{className:"w-5"}),r.jsx(B,{className:"w-4 h-4 text-accent-primary flex-shrink-0"}),r.jsx("span",{className:"type-data text-text-primary flex-1 truncate",children:e.name}),r.jsx("span",{className:_("type-data-xs px-2 py-0.5 rounded-full","allow"===e.floodPolicy?"bg-accent-success/15 text-accent-success":"bg-accent-danger/15 text-accent-danger"),children:"allow"===e.floodPolicy?"Allow":"Deny"})]}),n&&s&&r.jsx("div",{children:e.children.map(e=>r.jsx(xa,{node:e,level:t+1},e.id))})]})};return r.jsxs(E,{children:[r.jsx(L,{title:"Configuration",icon:r.jsx(i,{})}),r.jsxs(R,{template:"standard",children:[r.jsx(z,{span:12,md:6,children:r.jsx(M,{children:r.jsxs("div",{ref:kt,children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("h2",{className:"type-subheading text-text-primary flex items-center gap-2",children:[r.jsx(d,{className:"icon-md text-accent-primary"}),"Repeater Settings"]}),r.jsx("div",{className:"flex items-center gap-1",children:xe&&(ot?r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:Qs,disabled:"loading"===jt,className:_("p-2 rounded-lg transition-colors","loading"===jt?"text-text-muted cursor-not-allowed":"text-text-muted hover:text-accent-danger hover:bg-accent-danger/10"),title:"Cancel",children:r.jsx(o,{className:"w-4 h-4"})}),r.jsx("button",{onClick:async()=>{if("loading"!==jt){Ct.current&&clearTimeout(Ct.current),vt("loading"),wt(null);try{const e={};mt&&mt!==he&&(e.node_name=mt);const t=parseFloat(pt);isNaN(t)||t===(null==xe?void 0:xe.latitude)||(e.latitude=t);const s=parseFloat(bt);isNaN(s)||s===(null==xe?void 0:xe.longitude)||(e.longitude=s);const a=parseInt(gt);if(isNaN(a)||a===(null==xe?void 0:xe.send_advert_interval_hours)||(e.flood_advert_interval_hours=a),0===Object.keys(e).length)return wt({success:!0,message:"No changes to save"}),void vt("idle");const r=await h(e);if(!Be.current)return;if(r.success&&r.data){const e=r.data.applied.join(", ");wt({success:!0,message:`Updated: ${e}`}),await ue(),vt("success"),Ct.current=setTimeout(()=>{Be.current&&(vt("idle"),ut(!1),wt(null))},1500)}else wt({success:!1,message:r.error||"Failed to save"}),vt("error"),Ct.current=setTimeout(()=>{Be.current&&vt("idle")},2e3)}catch(e){if(!Be.current)return;wt({success:!1,message:String(e)}),vt("error"),Ct.current=setTimeout(()=>{Be.current&&vt("idle")},2e3)}}},disabled:"loading"===jt,className:_("p-2 rounded-lg transition-colors","loading"===jt?"text-accent-primary cursor-wait":"success"===jt?"text-accent-success":"error"===jt?"text-accent-danger":"text-accent-success hover:bg-accent-success/10"),title:"Save changes",children:"loading"===jt?r.jsx(A,{className:"w-4 h-4 animate-spin"}):"success"===jt?r.jsx(I,{className:"w-4 h-4"}):"error"===jt?r.jsx(o,{className:"w-4 h-4"}):r.jsx(I,{className:"w-4 h-4"})})]}):r.jsx("button",{onClick:Js,className:"p-2 rounded-lg transition-colors text-text-muted hover:text-text-primary hover:bg-bg-subtle",title:"Edit repeater settings",children:r.jsx(W,{className:"w-4 h-4"})}))})]}),Nt&&r.jsx("div",{className:_("text-xs mb-3 px-2 py-1.5 rounded-md",Nt.success?"text-accent-success bg-accent-success/10":"text-accent-danger bg-accent-danger/10"),children:Nt.message}),xe?r.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[r.jsxs("div",{className:"col-span-2",children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Node Name"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"text",value:mt,onChange:e=>xt(e.target.value),maxLength:50,className:"w-full bg-transparent text-text-primary focus:outline-none type-data",placeholder:"Enter node name"}):r.jsx("span",{className:"type-data text-text-primary",children:he})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:ot?"Latitude (°)":"Latitude"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"number",value:pt,onChange:e=>ht(e.target.value),step:"0.000001",min:"-90",max:"90",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:0!==xe.latitude?xe.latitude.toFixed(6):"Not set"})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:ot?"Longitude (°)":"Longitude"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"number",value:bt,onChange:e=>yt(e.target.value),step:"0.000001",min:"-180",max:"180",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:0!==xe.longitude?xe.longitude.toFixed(6):"Not set"})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:ot?"Advert Interval (hours)":"Advert Interval"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"number",value:gt,onChange:e=>ft(e.target.value),min:"0",max:"48",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:xe.send_advert_interval_hours>0?`${xe.send_advert_interval_hours}h`:"Disabled"})}),ot&&r.jsx("p",{className:"type-data-xs text-text-muted mt-1 ml-4",children:"0 = disabled, 3-48 hours"})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Score-based TX"}),r.jsx("div",{className:"h-[38px] rounded-full px-4 flex items-center bg-white/[0.02]",children:r.jsx("span",{className:"type-data text-text-primary",children:xe.use_score_for_tx?"Enabled":"Disabled"})})]})]}):r.jsx("p",{className:"text-text-muted",children:"Loading repeater settings..."})]})})}),r.jsx(z,{span:12,md:6,children:r.jsx(M,{children:r.jsxs("div",{ref:ze,children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("h2",{className:"type-subheading text-text-primary flex items-center gap-2",children:[r.jsx($,{className:"icon-md text-accent-primary"}),"Radio Configuration"]}),r.jsx("div",{className:"flex items-center gap-1",children:me&&(fe?r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:Ys,disabled:"loading"===Le,className:_("p-2 rounded-lg transition-colors","loading"===Le?"text-text-muted cursor-not-allowed":"text-text-muted hover:text-accent-danger hover:bg-accent-danger/10"),title:"Cancel",children:r.jsx(o,{className:"w-4 h-4"})}),r.jsx("button",{onClick:async()=>{if("loading"!==Le){Ae.current&&clearTimeout(Ae.current),Me("loading"),Re(null);try{const e={},t=parseFloat(ve),s=me?me.frequency/1e6:0;Math.abs(t-s)>1e-4&&(e.frequency_mhz=t);const a=me?me.bandwidth/1e3:0;we!==a&&(e.bandwidth_khz=we),Ce!==(null==me?void 0:me.spreading_factor)&&(e.spreading_factor=Ce),Se!==(null==me?void 0:me.coding_rate)&&(e.coding_rate=Se);const r=parseInt(Fe);if(r!==(null==me?void 0:me.tx_power)&&(e.tx_power=r),0===Object.keys(e).length)return Re({success:!0,message:"No changes to save"}),void Me("idle");const n=await h(e);if(!Be.current)return;if(n.success&&n.data){const e=n.data.applied.join(", "),t=n.data.live_update?" (applied live)":" (restart required)";Re({success:!0,message:`Updated: ${e}${t}`}),await ue(),Me("success"),Ae.current=setTimeout(()=>{Be.current&&(Me("idle"),je(!1),Re(null))},1500)}else Re({success:!1,message:n.error||"Failed to save"}),Me("error"),Ae.current=setTimeout(()=>{Be.current&&Me("idle")},2e3)}catch(e){if(!Be.current)return;Re({success:!1,message:String(e)}),Me("error"),Ae.current=setTimeout(()=>{Be.current&&Me("idle")},2e3)}}},disabled:"loading"===Le||!$s,className:_("p-2 rounded-lg transition-colors","loading"===Le?"text-accent-primary cursor-wait":"success"===Le?"text-accent-success":"error"===Le?"text-accent-danger":$s?"text-accent-success hover:bg-accent-success/10":"text-text-muted cursor-not-allowed"),title:$s?"Save changes":"No changes to save",children:"loading"===Le?r.jsx(A,{className:"w-4 h-4 animate-spin"}):"success"===Le?r.jsx(I,{className:"w-4 h-4"}):"error"===Le?r.jsx(o,{className:"w-4 h-4"}):r.jsx(I,{className:"w-4 h-4"})})]}):r.jsx("button",{onClick:()=>{me&&(Ne((me.frequency/1e6).toFixed(3)),ke(me.bandwidth/1e3),_e(me.spreading_factor),Te(me.coding_rate),Ee(String(me.tx_power))),Re(null),je(!0)},className:"p-2 rounded-lg transition-colors text-text-muted hover:text-text-primary hover:bg-bg-subtle",title:"Edit radio settings",children:r.jsx(W,{className:"w-4 h-4"})}))})]}),Pe&&r.jsx("div",{className:_("text-xs mb-3 px-2 py-1.5 rounded-md",Pe.success?"text-accent-success bg-accent-success/10":"text-accent-danger bg-accent-danger/10"),children:Pe.message}),me?r.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:fe?"Frequency (MHz)":"Frequency"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsx("input",{type:"number",value:ve,onChange:e=>Ne(e.target.value),step:"0.001",min:"400",max:"930",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:u(me.frequency)})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:fe?"TX Power (dBm)":"TX Power"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsx("input",{type:"number",value:Fe,onChange:e=>Ee(e.target.value),min:"-9",max:"22",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsxs("span",{className:"type-data text-text-primary",children:[me.tx_power," dBm"]})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Bandwidth"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors relative",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsxs(r.Fragment,{children:[r.jsx("select",{value:we,onChange:e=>ke(parseFloat(e.target.value)),className:"w-full bg-transparent text-text-primary focus:outline-none appearance-none cursor-pointer type-data pr-6",children:te.map(e=>r.jsx("option",{value:e.value,children:e.label},e.value))}),r.jsx(m,{className:"absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 text-text-muted pointer-events-none"})]}):r.jsx("span",{className:"type-data text-text-primary",children:x(me.bandwidth)})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Spreading Factor"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors relative",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsxs(r.Fragment,{children:[r.jsx("select",{value:Ce,onChange:e=>_e(parseInt(e.target.value)),className:"w-full bg-transparent text-text-primary focus:outline-none appearance-none cursor-pointer type-data pr-6",children:se.map(e=>r.jsxs("option",{value:e,children:["SF",e]},e))}),r.jsx(m,{className:"absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 text-text-muted pointer-events-none"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:["SF",me.spreading_factor]})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Coding Rate"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors relative",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsxs(r.Fragment,{children:[r.jsx("select",{value:Se,onChange:e=>Te(parseInt(e.target.value)),className:"w-full bg-transparent text-text-primary focus:outline-none appearance-none cursor-pointer type-data pr-6",children:ae.map(e=>r.jsx("option",{value:e.value,children:e.label},e.value))}),r.jsx(m,{className:"absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 text-text-muted pointer-events-none"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:["4/",me.coding_rate]})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Preamble"}),r.jsx("div",{className:"h-[38px] rounded-full px-4 flex items-center bg-white/[0.02]",children:r.jsxs("span",{className:"type-data text-text-primary",children:[me.preamble_length," symbols"]})})]})]}):r.jsx("p",{className:"text-text-muted",children:"Loading radio configuration..."})]})})})]}),r.jsxs(R,{template:"standard",children:[r.jsx(z,{span:12,md:6,children:r.jsx(M,{children:r.jsxs("div",{ref:Ie,children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("h2",{className:"type-subheading text-text-primary flex items-center gap-3",children:[r.jsx(p,{className:"icon-md text-text-secondary"}),"Operating Mode"]}),r.jsx("div",{className:"flex items-center gap-1",children:Ze?r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:async()=>{if("loading"!==ct){dt.current&&clearTimeout(dt.current),it("loading");try{const e=await h({tx_delay_factor:parseFloat(tt),direct_tx_delay_factor:parseFloat(at)});if(await de({max_airtime_percent:parseFloat(nt),enforcement_enabled:ye}),!Be.current)return;e.success&&e.data?(await ue(),it("success"),dt.current=setTimeout(()=>{Be.current&&(it("idle"),et(!1))},1500)):(it("error"),dt.current=setTimeout(()=>{Be.current&&it("idle")},2e3))}catch{if(!Be.current)return;it("error"),dt.current=setTimeout(()=>{Be.current&&it("idle")},2e3)}}},disabled:"loading"===ct,className:_("p-2 rounded-lg transition-colors","loading"===ct?"text-accent-primary cursor-wait":"success"===ct?"text-accent-success":"error"===ct?"text-accent-danger":"text-accent-success hover:bg-accent-success/10"),title:"Save",children:"loading"===ct?r.jsx(A,{className:"w-4 h-4 animate-spin"}):"success"===ct?r.jsx(I,{className:"w-4 h-4"}):"error"===ct?r.jsx(o,{className:"w-4 h-4"}):r.jsx(I,{className:"w-4 h-4"})}),r.jsx("button",{onClick:Ws,className:"p-2 rounded-lg text-text-muted hover:text-accent-danger hover:bg-accent-danger/10",title:"Cancel",children:r.jsx(o,{className:"w-4 h-4"})})]}):r.jsx("button",{onClick:Gs,className:"p-2 rounded-lg transition-colors text-text-muted hover:text-text-primary hover:bg-bg-subtle",title:"Edit settings",children:r.jsx(W,{className:"w-4 h-4"})})})]}),r.jsx("p",{className:"type-label text-text-muted mb-3",children:"Control how the repeater handles packets"}),r.jsxs("div",{className:"flex flex-col sm:flex-row gap-4",children:[r.jsxs("div",{className:"flex-1 space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("label",{className:"type-label text-text-muted",children:"Repeat"}),r.jsx("div",{className:"flex items-center gap-2",children:(()=>{const e=null!==Ke?Ke:"forward"===be;return r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:async()=>{if("loading"===De)return;const t=!e,s="forward"===be;Ue.current&&clearTimeout(Ue.current),Xe.current&&clearTimeout(Xe.current),Je.current=!1,Ve(t),He("loading"),Ue.current=setTimeout(()=>{Je.current||Be.current&&(Ve(s),He("error"),Xe.current=setTimeout(()=>{Be.current&&(He("idle"),Ve(null))},2e3))},1e4);try{if(await ce(t?"forward":"monitor"),Je.current=!0,Ue.current&&clearTimeout(Ue.current),!Be.current)return;He("success"),Xe.current=setTimeout(()=>{Be.current&&(He("idle"),Ve(null),ie())},2e3)}catch{if(Je.current=!0,Ue.current&&clearTimeout(Ue.current),!Be.current)return;Ve(s),He("error"),Xe.current=setTimeout(()=>{Be.current&&(He("idle"),Ve(null))},2e3)}},disabled:"loading"===De,className:_("relative inline-flex h-6 w-11 items-center rounded-full transition-colors border-2",e?"bg-accent-success border-accent-success":"bg-bg-elevated border-border-subtle","loading"===De&&"opacity-70"),"aria-label":"Toggle forward mode",children:r.jsx("span",{className:_("inline-block h-4 w-4 transform rounded-full bg-white transition-transform shadow-lg",e?"translate-x-5":"translate-x-0.5")})}),r.jsx("span",{className:_("type-data text-sm w-7",e?"text-accent-success":"text-text-muted"),children:e?"On":"Off"}),"loading"===De&&r.jsx(A,{className:"w-4 h-4 text-text-muted animate-spin"}),"success"===De&&r.jsx(I,{className:"w-4 h-4 text-accent-success"}),"error"===De&&r.jsx(o,{className:"w-4 h-4 text-accent-danger"})]})})()})]}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("label",{className:"type-label text-text-muted",children:"Duty Cycle"}),r.jsx("div",{className:"flex items-center gap-2",children:(()=>{const e=null!==$e?$e:ye;return r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:async()=>{if("loading"===Oe)return;const t=!e,s=ye;Ge.current&&clearTimeout(Ge.current),We.current&&clearTimeout(We.current),Qe.current=!1,Ye(t),qe("loading"),Ge.current=setTimeout(()=>{Qe.current||Be.current&&(Ye(s),qe("error"),We.current=setTimeout(()=>{Be.current&&(qe("idle"),Ye(null))},2e3))},1e4);try{if(await de({max_airtime_percent:Xs(),enforcement_enabled:t}),Qe.current=!0,Ge.current&&clearTimeout(Ge.current),!Be.current)return;qe("success"),We.current=setTimeout(()=>{Be.current&&(qe("idle"),Ye(null),oe())},2e3)}catch{if(Qe.current=!0,Ge.current&&clearTimeout(Ge.current),!Be.current)return;Ye(s),qe("error"),We.current=setTimeout(()=>{Be.current&&(qe("idle"),Ye(null))},2e3)}},disabled:"loading"===Oe,className:_("relative inline-flex h-6 w-11 items-center rounded-full transition-colors border-2",e?"bg-accent-success border-accent-success":"bg-bg-elevated border-border-subtle","loading"===Oe&&"opacity-70"),"aria-label":"Toggle duty cycle",children:r.jsx("span",{className:_("inline-block h-4 w-4 transform rounded-full bg-white transition-transform shadow-lg",e?"translate-x-5":"translate-x-0.5")})}),r.jsx("span",{className:_("type-data text-sm w-7",e?"text-accent-success":"text-text-muted"),children:e?"On":"Off"}),"loading"===Oe&&r.jsx(A,{className:"w-4 h-4 text-text-muted animate-spin"}),"success"===Oe&&r.jsx(I,{className:"w-4 h-4 text-accent-success"}),"error"===Oe&&r.jsx(o,{className:"w-4 h-4 text-accent-danger"})]})})()})]}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("label",{className:"type-label text-text-muted",children:"Max Airtime"}),r.jsx("div",{className:_("h-[32px] rounded-full px-3 flex items-center justify-end transition-colors min-w-[80px]",Ze?"bg-white/5":"bg-white/[0.02]"),children:Ze?r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx("input",{type:"number",value:nt,onChange:e=>lt(e.target.value),step:"0.5",min:"0.1",max:"100",className:"w-12 bg-transparent text-text-primary text-right focus:outline-none type-data"}),r.jsx("span",{className:"text-text-muted type-data",children:"%"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:[Xs().toFixed(1),"%"]})})]})]}),r.jsx("div",{className:"hidden sm:block w-px bg-border-subtle"}),r.jsxs("div",{className:"flex-1 pt-4 sm:pt-0 border-t sm:border-t-0 border-border-subtle",children:[r.jsx("label",{className:"type-label text-text-muted block mb-3",children:"TX Delays"}),r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"type-label text-text-muted",children:"Flood"}),r.jsx("div",{className:_("h-[32px] rounded-full px-3 flex items-center justify-end transition-colors min-w-[80px]",Ze?"bg-white/5":"bg-white/[0.02]"),children:Ze?r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx("input",{type:"number",value:tt,onChange:e=>st(e.target.value),step:"0.1",min:"0",max:"5",className:"w-12 bg-transparent text-text-primary text-right focus:outline-none type-data"}),r.jsx("span",{className:"text-text-muted type-data",children:"x"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:[Bs().toFixed(2),"x"]})})]}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"type-label text-text-muted",children:"Direct"}),r.jsx("div",{className:_("h-[32px] rounded-full px-3 flex items-center justify-end transition-colors min-w-[80px]",Ze?"bg-white/5":"bg-white/[0.02]"),children:Ze?r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx("input",{type:"number",value:at,onChange:e=>rt(e.target.value),step:"0.1",min:"0",max:"5",className:"w-12 bg-transparent text-text-primary text-right focus:outline-none type-data"}),r.jsx("span",{className:"text-text-muted type-data",children:"s"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:[Us().toFixed(2),"s"]})})]})]})]})]})]})})}),r.jsx(z,{span:12,md:6,children:r.jsxs(M,{children:[r.jsx(P,{icon:r.jsx(i,{}),title:"App Settings",largeTitle:!0}),r.jsx("p",{className:"type-body-sm text-text-muted mb-4",children:"Appearance and web server options."}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsxs("div",{children:[r.jsx("span",{className:"type-body text-text-primary font-medium block",children:"Enable CORS"}),r.jsx("span",{className:"type-body-sm text-text-muted",children:"Allow cross-origin API access"})]}),r.jsx("div",{className:"flex items-center gap-2",children:(()=>{const e=null!==Ft?Ft:(null==_t?void 0:_t.cors_enabled)??!1;return r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:Zs,disabled:"loading"===St,className:_("relative inline-flex h-6 w-11 items-center rounded-full transition-colors border-2",e?"bg-accent-primary border-accent-primary":"bg-bg-elevated border-border-subtle","loading"===St&&"opacity-70"),title:e?"Disable CORS":"Enable CORS",children:r.jsx("span",{className:_("inline-block h-4 w-4 transform rounded-full bg-white transition-transform shadow-lg",e?"translate-x-5":"translate-x-0.5")})}),"loading"===St&&r.jsx(A,{className:"w-4 h-4 text-text-muted animate-spin"}),"success"===St&&r.jsx(I,{className:"w-4 h-4 text-accent-success"}),"error"===St&&r.jsx(o,{className:"w-4 h-4 text-accent-danger"})]})})()})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-body text-text-primary font-medium block mb-2",children:"Theme"}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"flex-1 flex items-center justify-center",children:r.jsx(ee,{showLogoOnly:!0})}),r.jsx("div",{className:"flex-shrink-0",children:r.jsx(ee,{showThumbnailsOnly:!0})})]})]})]})]})})]}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",children:[r.jsxs("div",{children:[r.jsxs("h2",{className:"type-heading text-text-primary flex items-center gap-2",children:[r.jsx(U,{className:"icon-md text-accent-primary"}),"Regions / Transport Keys"]}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Manage regional key hierarchy for flood control"})]}),r.jsxs("div",{className:"flex gap-2 flex-wrap",children:[r.jsxs("button",{onClick:()=>ys(!0),disabled:"allow"===is,className:_("flex items-center gap-1.5 h-[32px] px-3 rounded-full transition-colors type-body-sm font-medium","allow"===is?"bg-white/[0.02] text-text-muted cursor-not-allowed":"bg-accent-success/10 hover:bg-accent-success/20 text-accent-success"),children:[r.jsx(J,{className:"w-3.5 h-3.5"}),"Add"]}),r.jsx("button",{onClick:ua,disabled:!ms||"allow"===is,className:_("h-[32px] px-3 rounded-full transition-colors type-body-sm font-medium",ms&&"allow"!==is?"bg-accent-primary/10 hover:bg-accent-primary/20 text-accent-primary":"bg-white/[0.02] text-text-muted cursor-not-allowed"),children:"Edit"}),r.jsx("button",{onClick:ma,disabled:!ms||"allow"===is,className:_("h-[32px] px-3 rounded-full transition-colors type-body-sm font-medium",ms&&"allow"!==is?"bg-accent-danger/10 hover:bg-accent-danger/20 text-accent-danger":"bg-white/[0.02] text-text-muted cursor-not-allowed"),children:"Delete"})]})]}),r.jsx("div",{className:"bg-white/[0.02] rounded-2xl p-4 mb-4",children:r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:_("w-10 h-10 rounded-full flex items-center justify-center","allow"===is?"bg-accent-success/20":"bg-accent-danger/20"),children:"allow"===is?r.jsx(Q,{className:"w-5 h-5 text-accent-success"}):r.jsx(Z,{className:"w-5 h-5 text-accent-danger"})}),r.jsxs("div",{children:[r.jsx("h4",{className:"type-body text-text-primary font-medium",children:"Global Flood Policy"}),r.jsx("p",{className:"type-body-sm text-text-muted",children:"Master control for repeater flooding"})]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsxs("div",{className:"flex bg-white/[0.02] rounded-full p-1",children:[r.jsx("button",{onClick:()=>da("deny"),disabled:os,className:_("px-4 py-1.5 rounded-full transition-colors type-body-sm font-medium","deny"===is?"bg-accent-danger/20 text-accent-danger":"text-text-muted hover:text-text-secondary",os&&"opacity-50"),children:"Deny"}),r.jsx("button",{onClick:()=>da("allow"),disabled:os,className:_("px-4 py-1.5 rounded-full transition-colors type-body-sm font-medium","allow"===is?"bg-accent-success/20 text-accent-success":"text-text-muted hover:text-text-secondary",os&&"opacity-50"),children:"Allow"})]}),os&&r.jsx(A,{className:"w-4 h-4 animate-spin text-text-muted"})]})]})}),ls&&r.jsx("div",{className:"type-body-sm mb-3 px-3 py-2 rounded-full text-accent-danger bg-accent-danger/10",children:ls}),r.jsx("div",{className:"bg-white/[0.02] rounded-2xl p-4 min-h-[120px]",children:rs?r.jsxs("div",{className:"flex items-center justify-center py-6",children:[r.jsx(A,{className:"w-5 h-5 animate-spin text-accent-primary mr-2"}),r.jsx("span",{className:"type-body-sm text-text-muted",children:"Loading transport keys..."})]}):0===ss.length?r.jsxs("div",{className:"text-center py-6",children:[r.jsx("div",{className:"w-12 h-12 rounded-full bg-white/[0.02] mx-auto mb-3 flex items-center justify-center",children:r.jsx(U,{className:"w-6 h-6 text-text-muted/50"})}),r.jsx("p",{className:"type-body text-text-muted",children:"No transport keys found"}),r.jsx("p",{className:"type-body-sm text-text-muted/70 mt-1",children:"Add your first transport key to get started"})]}):r.jsx("div",{className:"space-y-1",children:ss.map(e=>r.jsx(xa,{node:e,level:0},e.id))})})]})}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",children:[r.jsxs("div",{children:[r.jsxs("h2",{className:"type-heading text-text-primary flex items-center gap-2",children:[r.jsx(X,{className:"icon-md text-accent-primary"}),"API Tokens"]}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Manage API tokens for machine-to-machine authentication"})]}),r.jsxs("button",{onClick:()=>qt(!0),className:"flex items-center justify-center gap-2 h-[32px] px-4 bg-accent-primary/10 hover:bg-accent-primary/20 text-accent-primary rounded-full transition-colors type-body-sm font-medium",children:[r.jsx(J,{className:"w-4 h-4"}),"Create Token"]})]}),r.jsx("div",{className:"bg-accent-tertiary/5 rounded-2xl p-4 mb-4",children:r.jsxs("div",{className:"flex gap-3",children:[r.jsx("div",{className:"w-8 h-8 rounded-full bg-accent-tertiary/20 flex items-center justify-center flex-shrink-0",children:r.jsx(O,{className:"w-4 h-4 text-accent-tertiary"})}),r.jsxs("div",{className:"type-body-sm text-text-muted",children:[r.jsxs("p",{children:[r.jsx("span",{className:"text-text-secondary",children:"API tokens"})," are used for machine-to-machine authentication. Include the token in the ",r.jsx("code",{className:"type-code bg-accent-tertiary/20 px-1.5 py-0.5 rounded-full text-accent-tertiary",children:"X-API-Key"})," header when making API requests."]}),r.jsx("p",{className:"mt-1 text-text-muted/70",children:"Tokens are only shown once at creation. Store them securely."})]})]})}),Dt&&r.jsx("div",{className:"type-body-sm mb-3 px-3 py-2 rounded-full text-accent-danger bg-accent-danger/10",children:Dt}),At&&0===Rt.length?r.jsxs("div",{className:"flex items-center justify-center py-6",children:[r.jsx(A,{className:"w-5 h-5 animate-spin text-accent-primary mr-2"}),r.jsx("span",{className:"type-body-sm text-text-muted",children:"Loading tokens..."})]}):Rt.length>0?r.jsx("div",{className:"space-y-2",children:Rt.map(e=>r.jsx("div",{className:"bg-white/[0.02] hover:bg-white/[0.04] rounded-2xl p-4 transition-colors",children:r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[r.jsx("div",{className:"w-10 h-10 rounded-full bg-accent-primary/10 flex items-center justify-center flex-shrink-0",children:r.jsx(X,{className:"w-5 h-5 text-accent-primary"})}),r.jsxs("div",{className:"min-w-0 flex-1",children:[r.jsx("h3",{className:"type-body text-text-primary font-medium truncate",children:e.name}),r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:gap-4 mt-0.5",children:[r.jsxs("span",{className:"type-data-sm text-text-muted truncate",children:["Created: ",aa(e.created_at)]}),r.jsxs("span",{className:"type-data-sm text-text-muted truncate",children:["Last used: ",aa(e.last_used)]})]})]})]}),r.jsxs("button",{onClick:()=>Gt({id:e.id,name:e.name}),disabled:Qt,className:"h-[32px] px-4 bg-accent-danger/10 hover:bg-accent-danger/20 text-accent-danger rounded-full transition-colors disabled:opacity-50 type-body-sm font-medium flex items-center justify-center gap-1.5",children:[r.jsx(T,{className:"w-3.5 h-3.5"}),"Revoke"]})]})},e.id))}):r.jsxs("div",{className:"bg-white/[0.02] rounded-2xl p-6 text-center",children:[r.jsx("div",{className:"w-14 h-14 rounded-full bg-white/[0.02] mx-auto mb-4 flex items-center justify-center",children:r.jsx(X,{className:"w-7 h-7 text-text-muted/50"})}),r.jsx("h3",{className:"type-body text-text-primary font-medium mb-1",children:"No API Tokens"}),r.jsx("p",{className:"type-body-sm text-text-muted mb-4",children:"Create a token to enable API access"}),r.jsx("button",{onClick:()=>qt(!0),className:"h-[32px] px-4 bg-accent-primary/10 hover:bg-accent-primary/20 text-accent-primary rounded-full transition-colors type-body-sm font-medium",children:"Create Your First Token"})]})]})}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsx("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",children:r.jsxs("div",{children:[r.jsxs("h2",{className:"type-heading text-text-primary flex items-center gap-2",children:[r.jsx(G,{className:"icon-md text-accent-primary"}),"Web Frontend"]}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Choose which web interface to use"})]})}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"space-y-3",children:[r.jsxs("label",{className:_("flex items-start gap-3 p-4 bg-white/[0.02] rounded-2xl border-2 cursor-pointer transition-all",Ms?"border-accent-primary bg-accent-primary/5":"border-transparent hover:border-accent-primary/30","loading"===Ds&&"opacity-50 pointer-events-none"),children:[r.jsx("input",{type:"radio",name:"frontend",checked:Ms,onChange:()=>ea(!0),disabled:"loading"===Ds,className:"mt-1 h-4 w-4 text-accent-primary focus:ring-accent-primary focus:ring-offset-bg-elevated"}),r.jsxs("div",{className:"flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"type-body text-text-primary font-medium",children:"Default Frontend"}),r.jsx("a",{href:"https://github.com/rightup/pyMC_Repeater",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),className:"type-data-xs bg-accent-tertiary/15 text-accent-tertiary px-2.5 py-0.5 rounded-full font-medium hover:bg-accent-tertiary/25 transition-colors",children:"@RightUp"})]}),r.jsx("div",{className:"type-body-sm text-text-muted mt-1",children:"Built-in pyMC Repeater web interface"}),r.jsx("div",{className:"type-data-xs text-text-muted/60 mt-1 font-mono",children:"/opt/pymc_repeater/repeater/web/html"})]})]}),r.jsxs("label",{className:_("flex items-start gap-3 p-4 bg-white/[0.02] rounded-2xl border-2 cursor-pointer transition-all",Ms?"border-transparent hover:border-accent-primary/30":"border-accent-primary bg-accent-primary/5","loading"===Ds&&"opacity-50 pointer-events-none"),children:[r.jsx("input",{type:"radio",name:"frontend",checked:!Ms,onChange:()=>ea(!1),disabled:"loading"===Ds,className:"mt-1 h-4 w-4 text-accent-primary focus:ring-accent-primary focus:ring-offset-bg-elevated"}),r.jsxs("div",{className:"flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"type-body text-text-primary font-medium",children:"PyMC Console"}),r.jsx("span",{className:"type-data-xs bg-accent-secondary/15 text-accent-secondary px-2.5 py-0.5 rounded-full font-medium",children:"@Treehouse ⚡"})]}),r.jsx("div",{className:"type-body-sm text-text-muted mt-1",children:"Alternative web interface for pyMC Repeater"}),r.jsx("div",{className:"type-data-xs text-text-muted/60 mt-1 font-mono",children:"/opt/pymc_console/web/html"})]})]})]}),!As&&r.jsx("div",{className:_("bg-white/[0.02] rounded-2xl p-4",Rs?"border border-accent-success/20":"border border-accent-tertiary/20"),children:r.jsxs("div",{className:"flex items-start gap-3",children:[r.jsx("div",{className:_("w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0",Rs?"bg-accent-success/20":"bg-accent-tertiary/20"),children:Rs?r.jsx(Y,{className:"w-4 h-4 text-accent-success"}):r.jsx(O,{className:"w-4 h-4 text-accent-tertiary"})}),r.jsxs("div",{className:"flex-1",children:[r.jsx("h4",{className:"type-body text-text-primary font-medium",children:Rs?"PyMC Console has been detected":"PyMC Console Not Installed"}),Rs?r.jsxs("p",{className:"type-body-sm text-text-muted mt-1",children:["PyMC Console is installed at ",r.jsx("code",{className:"type-code bg-accent-success/10 px-1.5 py-0.5 rounded-full text-accent-success",children:"/opt/pymc_console/web/html"})]}):r.jsxs(r.Fragment,{children:[r.jsxs("p",{className:"type-body-sm text-text-muted mt-1 mb-3",children:["PyMC Console must be installed at ",r.jsx("code",{className:"type-code bg-accent-tertiary/10 px-1.5 py-0.5 rounded-full text-accent-tertiary",children:"/opt/pymc_console/web/html"})," before selecting this option."]}),r.jsxs("a",{href:"https://github.com/dmduran12/pymc_console-dist",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 h-[32px] px-4 bg-accent-tertiary/10 hover:bg-accent-tertiary/20 text-accent-tertiary rounded-full type-body-sm font-medium transition-colors",children:[r.jsx(q,{className:"w-4 h-4"}),"PyMC Console Install Instructions"]})]})]})]})}),Os&&r.jsx("div",{className:"bg-white/[0.02] rounded-2xl p-4 border border-accent-secondary/30",children:r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[r.jsxs("div",{className:"flex items-start gap-3 flex-1",children:[r.jsx("div",{className:"w-8 h-8 rounded-full bg-accent-secondary/20 flex items-center justify-center flex-shrink-0",children:r.jsx(D,{className:"w-4 h-4 text-accent-secondary"})}),r.jsxs("div",{className:"flex-1",children:[r.jsx("h4",{className:"type-body text-text-primary font-medium",children:"Service restart required"}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Web frontend changes will take effect after restarting the pymc-repeater service."})]})]}),r.jsx("button",{onClick:async()=>{if(!Ks){Vs(!0);try{await g(),qs(!1),setTimeout(()=>{window.location.reload()},2e3)}catch{qs(!1),setTimeout(()=>{window.location.reload()},3e3)}}},disabled:Ks,className:"h-[32px] px-4 bg-accent-secondary/10 hover:bg-accent-secondary/20 text-accent-secondary rounded-full transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 whitespace-nowrap type-body-sm font-medium",children:Ks?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Restarting..."]}):r.jsxs(r.Fragment,{children:[r.jsx(K,{className:"w-4 h-4"}),"Restart Now"]})})]})})]})]})}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsx(P,{icon:r.jsx(p,{}),title:"Node Information",largeTitle:!0}),le?r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Node Name"}),r.jsx("p",{className:"type-body text-text-primary mt-1",children:he})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Version"}),r.jsxs("p",{className:"type-data text-text-primary mt-1",children:["v",le.version]})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Core Version"}),r.jsxs("p",{className:"type-data text-text-primary mt-1",children:["v",le.core_version]})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Local Hash"}),r.jsx("div",{className:"mt-1",children:le.local_hash?r.jsx(S,{hash:le.local_hash,size:"sm"}):r.jsx("span",{className:"type-data-sm text-text-muted",children:"N/A"})})]})]}),le.public_key&&r.jsxs("div",{className:"mt-4 pt-4 border-t border-border-subtle",children:[r.jsx("span",{className:"type-label text-text-muted",children:"Public Key"}),r.jsx("div",{className:"mt-1",children:r.jsx(S,{hash:le.public_key,prefixLength:12,suffixLength:8})})]})]}):r.jsx("p",{className:"text-text-muted",children:"Loading node information..."})]})}),Ot&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&qt(!1),role:"dialog","aria-modal":"true","aria-labelledby":"create-token-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"create-token-modal-title",className:"type-subheading text-text-primary mb-4",children:"Create API Token"}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Token Name"}),r.jsx("input",{type:"text",value:Kt,onChange:e=>Vt(e.target.value),placeholder:"e.g., Production Server, CI/CD Pipeline",className:"w-full px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary placeholder-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 transition-colors",onKeyDown:e=>"Enter"===e.key&&sa(),autoFocus:!0}),r.jsx("p",{className:"text-xs text-text-muted mt-1",children:"Give your token a descriptive name to identify its purpose"})]}),r.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[r.jsx("button",{onClick:()=>{qt(!1),Vt(""),Ht(null)},disabled:Wt,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:sa,disabled:Wt||!Kt.trim(),className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Wt?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Creating..."]}):"Create Token"})]})]})]})}),Bt&&$t&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&Ut(!1),role:"dialog","aria-modal":"true","aria-labelledby":"show-token-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-lg w-full shadow-2xl",children:[r.jsx("h3",{id:"show-token-modal-title",className:"type-subheading text-text-primary mb-4",children:"Token Created Successfully"}),r.jsxs("div",{className:"space-y-4",children:[r.jsx("div",{className:"bg-accent-secondary/10 border border-accent-secondary/30 rounded-lg p-3",children:r.jsxs("div",{className:"flex gap-2",children:[r.jsx(D,{className:"w-4 h-4 text-accent-secondary flex-shrink-0 mt-0.5"}),r.jsxs("div",{className:"text-sm text-text-secondary",children:[r.jsx("strong",{children:"Save this token now!"})," For security reasons, it will not be shown again."]})]})}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Your API Token"}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("input",{value:$t,readOnly:!0,className:"flex-1 px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary font-mono text-sm"}),r.jsxs("button",{onClick:()=>{$t&&(navigator.clipboard.writeText($t),ts(!0),setTimeout(()=>ts(!1),2e3))},className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors flex items-center gap-2",title:"Copy to clipboard",children:[es?r.jsx(I,{className:"w-4 h-4 text-accent-success"}):r.jsx(H,{className:"w-4 h-4"}),es?"Copied!":"Copy"]})]})]}),r.jsxs("div",{className:"bg-accent-tertiary/10 border border-accent-tertiary/30 rounded-lg p-3",children:[r.jsx("p",{className:"text-sm text-text-secondary mb-2",children:r.jsx("strong",{children:"Usage Example:"})}),r.jsxs("code",{className:"block bg-accent-tertiary/20 px-3 py-2 rounded text-xs text-accent-tertiary font-mono overflow-x-auto",children:['curl -H "X-API-Key: ',$t.slice(0,12),'..." ',window.location.origin,"/api/stats"]})]}),r.jsx("div",{className:"flex justify-end mt-6",children:r.jsx("button",{onClick:()=>{Ut(!1),Yt(null)},className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors",children:"Done"})})]})]})}),r.jsx(F,{isOpen:!!Xt,title:"Revoke API Token",message:`Are you sure you want to revoke the token '${null==Xt?void 0:Xt.name}'? This action cannot be undone.`,confirmLabel:Qt?"Revoking...":"Revoke",cancelLabel:"Cancel",variant:"danger",onConfirm:async()=>{if(Xt){Zt(!0),Ht(null);try{await j(Xt.id),await ta(),Gt(null)}catch(e){Ht(e instanceof Error?e.message:"Failed to revoke token")}finally{Zt(!1)}}},onCancel:()=>Gt(null)}),bs&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&ys(!1),role:"dialog","aria-modal":"true","aria-labelledby":"add-key-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"add-key-modal-title",className:"type-subheading text-text-primary mb-4",children:"Add Transport Key"}),r.jsxs("div",{className:"space-y-4",children:[ms&&r.jsxs("div",{className:"bg-accent-tertiary/10 border border-accent-tertiary/30 rounded-lg p-3 text-sm text-text-secondary",children:["Adding as child of: ",r.jsx("strong",{className:"text-text-primary",children:ca()})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Key Name"}),r.jsx("input",{type:"text",value:_s,onChange:e=>Ss(e.target.value),placeholder:"e.g., Region Name, Group Key",className:"w-full px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary placeholder-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 transition-colors",onKeyDown:e=>"Enter"===e.key&&oa(),autoFocus:!0})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Flood Policy"}),r.jsxs("div",{className:"flex bg-bg-subtle rounded-lg border border-border-subtle p-1",children:[r.jsx("button",{onClick:()=>Fs("deny"),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","deny"===Ts?"bg-accent-danger/20 text-accent-danger border border-accent-danger/50":"text-text-muted hover:text-text-secondary"),children:"DENY"}),r.jsx("button",{onClick:()=>Fs("allow"),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","allow"===Ts?"bg-accent-success/20 text-accent-success border border-accent-success/50":"text-text-muted hover:text-text-secondary"),children:"ALLOW"})]})]}),r.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[r.jsx("button",{onClick:()=>{ys(!1),Ss(""),Fs("deny")},disabled:Es,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:oa,disabled:Es||!_s.trim(),className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Es?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Adding..."]}):"Add Key"})]})]})]})}),gs&&Ns&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&fs(!1),role:"dialog","aria-modal":"true","aria-labelledby":"edit-key-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"edit-key-modal-title",className:"type-subheading text-text-primary mb-4",children:"Edit Transport Key"}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Key Name"}),r.jsx("input",{type:"text",value:Ns.name,onChange:e=>ws({...Ns,name:e.target.value}),className:"w-full px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-primary/50 transition-colors",autoFocus:!0})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Flood Policy"}),r.jsxs("div",{className:"flex bg-bg-subtle rounded-lg border border-border-subtle p-1",children:[r.jsx("button",{onClick:()=>ws({...Ns,floodPolicy:"deny"}),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","deny"===Ns.floodPolicy?"bg-accent-danger/20 text-accent-danger border border-accent-danger/50":"text-text-muted hover:text-text-secondary"),children:"DENY"}),r.jsx("button",{onClick:()=>ws({...Ns,floodPolicy:"allow"}),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","allow"===Ns.floodPolicy?"bg-accent-success/20 text-accent-success border border-accent-success/50":"text-text-muted hover:text-text-secondary"),children:"ALLOW"})]})]}),Ns.transport_key&&r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Transport Key"}),r.jsx("code",{className:"block bg-bg-subtle px-3 py-2 rounded-lg text-xs text-text-muted font-mono overflow-x-auto",children:Ns.transport_key})]}),r.jsxs("div",{className:"flex justify-between gap-3 mt-6",children:[r.jsx("button",{onClick:()=>{fs(!1),Cs(Ns),vs(!0),ws(null)},disabled:Es,className:"px-4 py-2 bg-accent-danger/20 hover:bg-accent-danger/30 text-accent-danger rounded-lg border border-accent-danger/50 transition-colors disabled:opacity-50",children:"Delete"}),r.jsxs("div",{className:"flex gap-3",children:[r.jsx("button",{onClick:()=>{fs(!1),ws(null)},disabled:Es,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:async()=>{if(Ns){Ls(!0),cs(null);try{const e=await w(Ns.id,{name:Ns.name,flood_policy:Ns.floodPolicy});e.success?(await na(),fs(!1),ws(null)):cs(e.error||"Failed to update transport key")}catch(e){cs(e instanceof Error?e.message:"Failed to update transport key")}finally{Ls(!1)}}},disabled:Es||!Ns.name.trim(),className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Es?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Saving..."]}):"Save"})]})]})]})]})}),js&&ks&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&vs(!1),role:"dialog","aria-modal":"true","aria-labelledby":"delete-key-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"delete-key-modal-title",className:"type-subheading text-text-primary mb-4",children:"Delete Transport Key"}),r.jsxs("p",{className:"text-text-secondary mb-4",children:["Are you sure you want to delete ",r.jsxs("strong",{className:"text-text-primary",children:["'",ks.name,"'"]}),"?"]}),ks.children&&ks.children.length>0&&r.jsx("div",{className:"bg-accent-secondary/10 border border-accent-secondary/30 rounded-lg p-3 mb-4",children:r.jsxs("div",{className:"flex gap-2",children:[r.jsx(D,{className:"w-4 h-4 text-accent-secondary flex-shrink-0 mt-0.5"}),r.jsxs("div",{className:"text-sm text-text-secondary",children:["This key has ",ks.children.length," child key(s). Deleting will also remove all children."]})]})}),r.jsxs("div",{className:"flex justify-end gap-3",children:[r.jsx("button",{onClick:()=>{vs(!1),Cs(null)},disabled:Es,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:async()=>{if(ks){Ls(!0),cs(null);try{const e=await k(ks.id);e.success?(await na(),vs(!1),Cs(null),xs(null)):cs(e.error||"Failed to delete transport key")}catch(e){cs(e instanceof Error?e.message:"Failed to delete transport key")}finally{Ls(!1)}}},disabled:Es,className:"px-4 py-2 bg-accent-danger/20 hover:bg-accent-danger/30 text-accent-danger rounded-lg border border-accent-danger/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Es?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Deleting..."]}):"Delete"})]})]})})]})}export{re as default}; +import{c as e,ae as t,af as s,ag as a,j as r,J as n,ah as l,ai as c,aj as i,ak as d,X as o,al as u,E as m,am as x,R as p,ac as h,an as b,ao as y,ap as g,aq as f,ar as j,as as v,at as N,au as w,av as k}from"./index-CnT6m9UL.js";import{b as C,c as _}from"./recharts-bmHCCfxU.js";import{H as S}from"./HashBadge-CfU2AT65.js";import{T,C as F}from"./ConfirmModal-L-7rhSxP.js";import{P as E,a as L,C as M,b as P}from"./PageLayout-B1Rz13MR.js";import{R,C as z}from"./Grid-C8VCh5UQ.js";import{L as A}from"./loader-circle-CQxh52S4.js";import{a as I,T as D,C as H}from"./triangle-alert-BVWkhQDA.js";import{I as O}from"./info-DSETn7DH.js";import{E as q}from"./external-link-BtJLfi91.js";import{R as K}from"./refresh-cw-CLS7Qxt_.js";import{C as V}from"./chevron-right-Pm8T9DZ1.js";import"./maplibre-gl-CFO9X1Ek.js";const $=e("antenna",[["path",{d:"M2 12 7 2",key:"117k30"}],["path",{d:"m7 12 5-10",key:"1tvx22"}],["path",{d:"m12 12 5-10",key:"ev1o1a"}],["path",{d:"m17 12 5-10",key:"1e4ti3"}],["path",{d:"M4.5 7h15",key:"vlsxkz"}],["path",{d:"M12 16v6",key:"c8a4gj"}]]),Y=e("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),B=e("folder-key",[["circle",{cx:"16",cy:"20",r:"2",key:"1vifvg"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2",key:"3hgo9p"}],["path",{d:"m22 14-4.5 4.5",key:"1ef6z8"}],["path",{d:"m21 15 1 1",key:"1ejcpy"}]]),U=e("folder-lock",[["rect",{width:"8",height:"5",x:"14",y:"17",rx:"1",key:"19aais"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2.5",key:"1w6v7t"}],["path",{d:"M20 17v-2a2 2 0 1 0-4 0v2",key:"pwaxnr"}]]),X=e("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),G=e("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),W=e("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]),J=e("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]),Q=e("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),Z=e("shield-x",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m14.5 9.5-5 5",key:"17q4r4"}],["path",{d:"m9.5 9.5 5 5",key:"18nt4w"}]]),ee=C.memo(function({showLogoOnly:e=!1,showThumbnailsOnly:n=!1}){const{theme:l,setThemePreset:c,setBrightness:i}=t(),{backgroundImage:d,brightness:o}=l,[u,m]=C.useState(!1),[x,p]=C.useState(!1),h=C.useRef(null),b=C.useRef(null),y=s.find(e=>e.backgroundImage===d)??s[0],g=y.id,f=C.useCallback((e,t)=>{if(!b.current)return o;const s=(b.current.y-e)/(t?200:80)*100;return Math.round(Math.max(0,Math.min(100,b.current.brightness+s)))},[o]),j=C.useCallback(e=>{c(e),m(!0)},[c]),v=C.useCallback(e=>{i(e)},[i]),N=C.useCallback(e=>{const t=s.find(t=>t.id===e);t&&a(t.backgroundImage)},[]);if(e){const e=y.displaySize,t=`clamp(${.8*e}rem, ${.6*e}rem + 1.5vw, ${1.4*e}rem)`;return r.jsx("span",{className:"font-medium transition-all duration-300 leading-none",style:{fontFamily:y.displayFont,color:y.displayColor,fontSize:t,fontOpticalSizing:"auto",letterSpacing:"-0.03em"},children:y.displayName})}return r.jsx("div",{className:"flex gap-2 items-start flex-shrink-0",children:s.map(e=>{const t=g===e.id,s=t&&(u||x);return r.jsxs("div",{ref:t?h:void 0,title:e.displayName,className:_("flex flex-col items-center gap-1 p-0.5 rounded-sm transition-all duration-300 ease-out",t?"ring-2 ring-accent-primary scale-105 cursor-ns-resize":"cursor-pointer"),onMouseEnter:()=>{t?m(!0):N(e.id)},onMouseLeave:()=>!x&&m(!1),onClick:()=>!t&&j(e.id),onTouchStart:e=>{if(!t)return;e.preventDefault();const s=e.touches[0];b.current={y:s.clientY,brightness:o},p(!0),m(!0);const a=e=>{e.preventDefault();const t=e.touches[0];v(f(t.clientY,!0))},r=()=>{document.removeEventListener("touchmove",a),document.removeEventListener("touchend",r),b.current=null,p(!1),setTimeout(()=>m(!1),1500)};document.addEventListener("touchmove",a,{passive:!1}),document.addEventListener("touchend",r)},onMouseDown:e=>{if(!t)return;e.preventDefault(),b.current={y:e.clientY,brightness:o},p(!0),m(!0);const s=e=>{v(f(e.clientY,!1))},a=()=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",a),b.current=null,p(!1)};document.addEventListener("mousemove",s),document.addEventListener("mouseup",a)},children:[r.jsxs("div",{className:"glass-thumbnail w-10 h-10",children:[r.jsx("div",{className:"absolute bg-cover bg-center transition-opacity duration-200",style:{inset:0,backgroundImage:`url(${e.backgroundImage})`,opacity:s?.4:1}}),t&&r.jsxs("div",{className:_("absolute inset-0 transition-opacity duration-200",s?"opacity-100":"opacity-0"),children:[r.jsx("div",{className:"absolute inset-x-0 bottom-0 bg-black/70 transition-all duration-100 ease-out",style:{height:100-o+"%"}}),r.jsx("div",{className:"absolute inset-x-1 h-0.5 bg-white rounded-full shadow-lg transition-all duration-100 ease-out",style:{top:100-o+"%"}}),r.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:r.jsxs("span",{className:"text-[10px] font-mono font-bold text-white drop-shadow-lg",children:[o,"%"]})})]})]}),r.jsx("div",{className:"flex flex-col gap-0.5",children:e.paletteColors.map((e,t)=>r.jsx("div",{className:"flex gap-0.5 justify-center",children:e.map((e,t)=>r.jsx("div",{className:"w-1.5 h-1.5 rounded-xs",style:{backgroundColor:e}},t))},t))})]},e.id)})})}),te=[{value:7.8,label:"7.8 kHz"},{value:10.4,label:"10.4 kHz"},{value:15.6,label:"15.6 kHz"},{value:20.8,label:"20.8 kHz"},{value:31.25,label:"31.25 kHz"},{value:41.7,label:"41.7 kHz"},{value:62.5,label:"62.5 kHz"},{value:125,label:"125 kHz"},{value:250,label:"250 kHz"},{value:500,label:"500 kHz"}],se=[5,6,7,8,9,10,11,12],ae=[{value:5,label:"4/5"},{value:6,label:"4/6"},{value:7,label:"4/7"},{value:8,label:"4/8"}];function re(){var e,t,s,a,re,ne;const{stats:le,setMode:ce,clearModeMutation:ie,setDutyCycleConfig:de,clearDutyCycleMutation:oe,fetchStats:ue}=n(),me=null==(e=null==le?void 0:le.config)?void 0:e.radio,xe=null==(t=null==le?void 0:le.config)?void 0:t.repeater,pe=null==(s=null==le?void 0:le.config)?void 0:s.duty_cycle,he=(null==le?void 0:le.node_name)||(null==(a=null==le?void 0:le.config)?void 0:a.node_name)||"Unknown Node",be=(null==xe?void 0:xe.mode)??"forward",ye=(null==pe?void 0:pe.enforcement_enabled)??!1,ge=null==(re=null==le?void 0:le.config)?void 0:re.delays,[fe,je]=C.useState(!1),[ve,Ne]=C.useState(""),[we,ke]=C.useState(62.5),[Ce,_e]=C.useState(7),[Se,Te]=C.useState(5),[Fe,Ee]=C.useState(""),[Le,Me]=C.useState("idle"),[Pe,Re]=C.useState(null),ze=C.useRef(null),Ae=C.useRef(null),Ie=C.useRef(null),[De,He]=C.useState("idle"),[Oe,qe]=C.useState("idle"),[Ke,Ve]=C.useState(null),[$e,Ye]=C.useState(null),Be=C.useRef(!0),Ue=C.useRef(null),Xe=C.useRef(null),Ge=C.useRef(null),We=C.useRef(null),Je=C.useRef(!1),Qe=C.useRef(!1);C.useEffect(()=>(Be.current=!0,()=>{Be.current=!1,Ue.current&&clearTimeout(Ue.current),Xe.current&&clearTimeout(Xe.current),Ge.current&&clearTimeout(Ge.current),We.current&&clearTimeout(We.current),Lt.current&&clearTimeout(Lt.current),Mt.current&&clearTimeout(Mt.current),Ae.current&&clearTimeout(Ae.current),dt.current&&clearTimeout(dt.current),Ct.current&&clearTimeout(Ct.current)}),[]);const[Ze,et]=C.useState(!1),[tt,st]=C.useState(""),[at,rt]=C.useState(""),[nt,lt]=C.useState(""),[ct,it]=C.useState("idle"),dt=C.useRef(null),[ot,ut]=C.useState(!1),[mt,xt]=C.useState(""),[pt,ht]=C.useState(""),[bt,yt]=C.useState(""),[gt,ft]=C.useState(""),[jt,vt]=C.useState("idle"),[Nt,wt]=C.useState(null),kt=C.useRef(null),Ct=C.useRef(null),_t=null==(ne=null==le?void 0:le.config)?void 0:ne.web,[St,Tt]=C.useState("idle"),[Ft,Et]=C.useState(null),Lt=C.useRef(null),Mt=C.useRef(null),Pt=C.useRef(!1),[Rt,zt]=C.useState([]),[At,It]=C.useState(!1),[Dt,Ht]=C.useState(null),[Ot,qt]=C.useState(!1),[Kt,Vt]=C.useState(""),[$t,Yt]=C.useState(null),[Bt,Ut]=C.useState(!1),[Xt,Gt]=C.useState(null),[Wt,Jt]=C.useState(!1),[Qt,Zt]=C.useState(!1),[es,ts]=C.useState(!1),[ss,as]=C.useState([]),[rs,ns]=C.useState(!1),[ls,cs]=C.useState(null),[is,ds]=C.useState("deny"),[os,us]=C.useState(!1),[ms,xs]=C.useState(null),[ps,hs]=C.useState(new Set),[bs,ys]=C.useState(!1),[gs,fs]=C.useState(!1),[js,vs]=C.useState(!1),[Ns,ws]=C.useState(null),[ks,Cs]=C.useState(null),[_s,Ss]=C.useState(""),[Ts,Fs]=C.useState("deny"),[Es,Ls]=C.useState(!1),[Ms,Ps]=C.useState(!0),[Rs,zs]=C.useState(!1),[As,Is]=C.useState(!0),[Ds,Hs]=C.useState("idle"),[Os,qs]=C.useState(!1),[Ks,Vs]=C.useState(!1);C.useEffect(()=>{me&&fe&&(Ne((me.frequency/1e6).toFixed(3)),ke(me.bandwidth/1e3),_e(me.spreading_factor),Te(me.coding_rate),Ee(String(me.tx_power)))},[me,fe]);const $s=C.useMemo(()=>{if(!me||!fe)return!1;const e=me.frequency/1e6,t=me.bandwidth/1e3,s=parseFloat(ve)||0;return Math.abs(s-e)>1e-4||we!==t||Ce!==me.spreading_factor||Se!==me.coding_rate||parseInt(Fe)!==me.tx_power},[me,fe,ve,we,Ce,Se,Fe]),Ys=C.useCallback(()=>{je(!1),Re(null),me&&(Ne((me.frequency/1e6).toFixed(3)),ke(me.bandwidth/1e3),_e(me.spreading_factor),Te(me.coding_rate),Ee(String(me.tx_power)))},[me]);C.useEffect(()=>{if(!fe)return;const e=e=>{ze.current&&!ze.current.contains(e.target)&&Ys()};return document.addEventListener("mouseup",e),()=>{document.removeEventListener("mouseup",e)}},[fe,Ys]);const Bs=C.useCallback(()=>{const e=null==ge?void 0:ge.tx_delay_factor;return e&&"object"==typeof e&&"parsedValue"in e?e.parsedValue??1:"number"==typeof e?e:1},[ge]),Us=C.useCallback(()=>{const e=null==ge?void 0:ge.direct_tx_delay_factor;return"number"==typeof e?e:.5},[ge]),Xs=C.useCallback(()=>{const e=null==pe?void 0:pe.max_airtime_percent;return"number"==typeof e?e:e&&"object"==typeof e&&"parsedValue"in e?e.parsedValue??6:6},[pe]),Gs=C.useCallback(()=>{st(Bs().toFixed(2)),rt(Us().toFixed(2)),lt(Xs().toFixed(1)),et(!0)},[Bs,Us,Xs]),Ws=C.useCallback(()=>{et(!1)},[]);C.useEffect(()=>{if(!Ze)return;const e=e=>{Ie.current&&!Ie.current.contains(e.target)&&Ws()};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[Ze,Ws]);const Js=C.useCallback(()=>{var e,t,s;xt(he),ht((null==(e=null==xe?void 0:xe.latitude)?void 0:e.toString())||"0"),yt((null==(t=null==xe?void 0:xe.longitude)?void 0:t.toString())||"0"),ft((null==(s=null==xe?void 0:xe.send_advert_interval_hours)?void 0:s.toString())||"0"),wt(null),ut(!0)},[he,xe]),Qs=C.useCallback(()=>{ut(!1),wt(null)},[]);C.useEffect(()=>{if(!ot)return;const e=e=>{kt.current&&!kt.current.contains(e.target)&&Qs()};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[ot,Qs]);const Zs=async()=>{var e;if("loading"===St)return;const t=(null==_t?void 0:_t.cors_enabled)??!1,s=!t,a=t;Lt.current&&clearTimeout(Lt.current),Mt.current&&clearTimeout(Mt.current),Pt.current=!1,Et(s),Tt("loading"),Lt.current=setTimeout(()=>{Pt.current||Be.current&&(Et(a),Tt("error"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3))},1e4);try{const t=await b({web:{cors_enabled:s}});if(Pt.current=!0,Lt.current&&clearTimeout(Lt.current),!Be.current)return;t.success||(null==(e=t.data)?void 0:e.persisted)?(await ue(),Tt("success"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3)):(Et(a),Tt("error"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3))}catch{if(Pt.current=!0,Lt.current&&clearTimeout(Lt.current),!Be.current)return;Et(a),Tt("error"),Mt.current=setTimeout(()=>{Be.current&&(Tt("idle"),Et(null))},2e3)}};C.useEffect(()=>{(async()=>{Is(!0);try{const e=await y();e.success&&e.data?zs(e.data.exists):zs(!1);const t=null==_t?void 0:_t.web_path;Ps(!t||""===t)}catch{zs(!1)}finally{Is(!1)}})()},[null==_t?void 0:_t.web_path]);const ea=async e=>{var t;if("loading"!==Ds){Hs("loading");try{const s=await b({web:{web_path:e?null:"/opt/pymc_console/web/html"}});if(!Be.current)return;s.success||(null==(t=s.data)?void 0:t.persisted)?(Ps(e),Hs("success"),qs(!0),setTimeout(()=>{Be.current&&Hs("idle")},2e3)):(Hs("error"),setTimeout(()=>{Be.current&&Hs("idle")},2e3))}catch{if(!Be.current)return;Hs("error"),setTimeout(()=>{Be.current&&Hs("idle")},2e3)}}},ta=C.useCallback(async()=>{It(!0),Ht(null);try{const e=await l();zt(e.tokens||[])}catch(e){Ht(e instanceof Error?e.message:"Failed to fetch tokens")}finally{It(!1)}},[]);C.useEffect(()=>{ta()},[ta]);const sa=async()=>{if(Kt.trim()){Jt(!0),Ht(null);try{const e=await f(Kt.trim());Yt(e.token||null),qt(!1),Ut(!0),Vt(""),await ta()}catch(e){Ht(e instanceof Error?e.message:"Failed to create token")}finally{Jt(!1)}}else Ht("Token name is required")},aa=e=>e?new Date(1e3*e).toLocaleString():"Never",ra=C.useCallback(e=>{const t=new Map,s=[];return e.forEach(e=>{const s={id:e.id,name:e.name,floodPolicy:e.flood_policy,transport_key:e.transport_key,last_used:e.last_used,parent_id:e.parent_id,children:[]};t.set(e.id,s)}),t.forEach(e=>{e.parent_id&&t.has(e.parent_id)?t.get(e.parent_id).children.push(e):s.push(e)}),s},[]),na=C.useCallback(async()=>{ns(!0),cs(null);try{const e=await c();e.success&&e.data?as(ra(e.data)):cs(e.error||"Failed to load transport keys")}catch(e){cs(e instanceof Error?e.message:"Unknown error occurred")}finally{ns(!1)}},[ra]);C.useEffect(()=>{na()},[na]);const la=C.useCallback((e,t)=>{for(const s of e){if(s.id===t)return s;if(s.children){const e=la(s.children,t);if(e)return e}}return null},[]),ca=C.useCallback(()=>{if(!ms)return;const e=la(ss,ms);return null==e?void 0:e.name},[ms,ss,la]),ia=C.useCallback(e=>{hs(t=>{const s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),da=async e=>{us(!0),cs(null);try{const t=await v("allow"===e);t.success?ds(e):cs(t.error||"Failed to update global flood policy")}catch(t){cs(t instanceof Error?t.message:"Failed to update global flood policy")}finally{us(!1)}},oa=async()=>{if(_s.trim()){Ls(!0),cs(null);try{const e=await N({name:_s.trim(),flood_policy:Ts,parent_id:ms??void 0});e.success?(await na(),ys(!1),Ss(""),Fs("deny")):cs(e.error||"Failed to add transport key")}catch(e){cs(e instanceof Error?e.message:"Failed to add transport key")}finally{Ls(!1)}}else cs("Key name is required")},ua=C.useCallback(()=>{if(!ms)return;const e=la(ss,ms);e&&(ws({...e}),fs(!0))},[ms,ss,la]);C.useEffect(()=>{const e=e=>{"Escape"===e.key&&(bs&&(ys(!1),Ss(""),Fs("deny")),gs&&(fs(!1),ws(null)),js&&(vs(!1),Cs(null)),Ot&&(qt(!1),Vt("")),Bt&&(Ut(!1),Yt(null)))};if(bs||gs||js||Ot||Bt)return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[bs,gs,js,Ot,Bt]);const ma=C.useCallback(()=>{if(!ms)return;const e=la(ss,ms);e&&(Cs(e),vs(!0))},[ms,ss,la]),xa=({node:e,level:t})=>{const s=ps.has(e.id),a=ms===e.id,n=e.children&&e.children.length>0,l="allow"===is;return r.jsxs("div",{children:[r.jsxs("div",{className:_("flex items-center gap-2 h-[36px] px-3 rounded-full cursor-pointer transition-colors",a?"bg-accent-primary/15":"hover:bg-white/[0.02]",l&&"opacity-50 cursor-not-allowed"),style:{marginLeft:16*t+"px"},onClick:()=>!l&&xs(e.id),children:[n?r.jsx("button",{onClick:t=>{t.stopPropagation(),ia(e.id)},className:"p-1 hover:bg-white/[0.05] rounded-full transition-colors",children:r.jsx(V,{className:_("w-3.5 h-3.5 text-text-muted transition-transform",s&&"rotate-90")})}):r.jsx("span",{className:"w-5"}),r.jsx(B,{className:"w-4 h-4 text-accent-primary flex-shrink-0"}),r.jsx("span",{className:"type-data text-text-primary flex-1 truncate",children:e.name}),r.jsx("span",{className:_("type-data-xs px-2 py-0.5 rounded-full","allow"===e.floodPolicy?"bg-accent-success/15 text-accent-success":"bg-accent-danger/15 text-accent-danger"),children:"allow"===e.floodPolicy?"Allow":"Deny"})]}),n&&s&&r.jsx("div",{children:e.children.map(e=>r.jsx(xa,{node:e,level:t+1},e.id))})]})};return r.jsxs(E,{children:[r.jsx(L,{title:"Configuration",icon:r.jsx(i,{})}),r.jsxs(R,{template:"standard",children:[r.jsx(z,{span:12,md:6,children:r.jsx(M,{children:r.jsxs("div",{ref:kt,children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("h2",{className:"type-subheading text-text-primary flex items-center gap-2",children:[r.jsx(d,{className:"icon-md text-accent-primary"}),"Repeater Settings"]}),r.jsx("div",{className:"flex items-center gap-1",children:xe&&(ot?r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:Qs,disabled:"loading"===jt,className:_("p-2 rounded-lg transition-colors","loading"===jt?"text-text-muted cursor-not-allowed":"text-text-muted hover:text-accent-danger hover:bg-accent-danger/10"),title:"Cancel",children:r.jsx(o,{className:"w-4 h-4"})}),r.jsx("button",{onClick:async()=>{if("loading"!==jt){Ct.current&&clearTimeout(Ct.current),vt("loading"),wt(null);try{const e={};mt&&mt!==he&&(e.node_name=mt);const t=parseFloat(pt);isNaN(t)||t===(null==xe?void 0:xe.latitude)||(e.latitude=t);const s=parseFloat(bt);isNaN(s)||s===(null==xe?void 0:xe.longitude)||(e.longitude=s);const a=parseInt(gt);if(isNaN(a)||a===(null==xe?void 0:xe.send_advert_interval_hours)||(e.flood_advert_interval_hours=a),0===Object.keys(e).length)return wt({success:!0,message:"No changes to save"}),void vt("idle");const r=await h(e);if(!Be.current)return;if(r.success&&r.data){const e=r.data.applied.join(", ");wt({success:!0,message:`Updated: ${e}`}),await ue(),vt("success"),Ct.current=setTimeout(()=>{Be.current&&(vt("idle"),ut(!1),wt(null))},1500)}else wt({success:!1,message:r.error||"Failed to save"}),vt("error"),Ct.current=setTimeout(()=>{Be.current&&vt("idle")},2e3)}catch(e){if(!Be.current)return;wt({success:!1,message:String(e)}),vt("error"),Ct.current=setTimeout(()=>{Be.current&&vt("idle")},2e3)}}},disabled:"loading"===jt,className:_("p-2 rounded-lg transition-colors","loading"===jt?"text-accent-primary cursor-wait":"success"===jt?"text-accent-success":"error"===jt?"text-accent-danger":"text-accent-success hover:bg-accent-success/10"),title:"Save changes",children:"loading"===jt?r.jsx(A,{className:"w-4 h-4 animate-spin"}):"success"===jt?r.jsx(I,{className:"w-4 h-4"}):"error"===jt?r.jsx(o,{className:"w-4 h-4"}):r.jsx(I,{className:"w-4 h-4"})})]}):r.jsx("button",{onClick:Js,className:"p-2 rounded-lg transition-colors text-text-muted hover:text-text-primary hover:bg-bg-subtle",title:"Edit repeater settings",children:r.jsx(W,{className:"w-4 h-4"})}))})]}),Nt&&r.jsx("div",{className:_("text-xs mb-3 px-2 py-1.5 rounded-md",Nt.success?"text-accent-success bg-accent-success/10":"text-accent-danger bg-accent-danger/10"),children:Nt.message}),xe?r.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[r.jsxs("div",{className:"col-span-2",children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Node Name"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"text",value:mt,onChange:e=>xt(e.target.value),maxLength:50,className:"w-full bg-transparent text-text-primary focus:outline-none type-data",placeholder:"Enter node name"}):r.jsx("span",{className:"type-data text-text-primary",children:he})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:ot?"Latitude (°)":"Latitude"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"number",value:pt,onChange:e=>ht(e.target.value),step:"0.000001",min:"-90",max:"90",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:0!==xe.latitude?xe.latitude.toFixed(6):"Not set"})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:ot?"Longitude (°)":"Longitude"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"number",value:bt,onChange:e=>yt(e.target.value),step:"0.000001",min:"-180",max:"180",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:0!==xe.longitude?xe.longitude.toFixed(6):"Not set"})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:ot?"Advert Interval (hours)":"Advert Interval"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",ot?"bg-white/5":"bg-white/[0.02]"),children:ot?r.jsx("input",{type:"number",value:gt,onChange:e=>ft(e.target.value),min:"0",max:"48",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:xe.send_advert_interval_hours>0?`${xe.send_advert_interval_hours}h`:"Disabled"})}),ot&&r.jsx("p",{className:"type-data-xs text-text-muted mt-1 ml-4",children:"0 = disabled, 3-48 hours"})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Score-based TX"}),r.jsx("div",{className:"h-[38px] rounded-full px-4 flex items-center bg-white/[0.02]",children:r.jsx("span",{className:"type-data text-text-primary",children:xe.use_score_for_tx?"Enabled":"Disabled"})})]})]}):r.jsx("p",{className:"text-text-muted",children:"Loading repeater settings..."})]})})}),r.jsx(z,{span:12,md:6,children:r.jsx(M,{children:r.jsxs("div",{ref:ze,children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("h2",{className:"type-subheading text-text-primary flex items-center gap-2",children:[r.jsx($,{className:"icon-md text-accent-primary"}),"Radio Configuration"]}),r.jsx("div",{className:"flex items-center gap-1",children:me&&(fe?r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:Ys,disabled:"loading"===Le,className:_("p-2 rounded-lg transition-colors","loading"===Le?"text-text-muted cursor-not-allowed":"text-text-muted hover:text-accent-danger hover:bg-accent-danger/10"),title:"Cancel",children:r.jsx(o,{className:"w-4 h-4"})}),r.jsx("button",{onClick:async()=>{if("loading"!==Le){Ae.current&&clearTimeout(Ae.current),Me("loading"),Re(null);try{const e={},t=parseFloat(ve),s=me?me.frequency/1e6:0;Math.abs(t-s)>1e-4&&(e.frequency_mhz=t);const a=me?me.bandwidth/1e3:0;we!==a&&(e.bandwidth_khz=we),Ce!==(null==me?void 0:me.spreading_factor)&&(e.spreading_factor=Ce),Se!==(null==me?void 0:me.coding_rate)&&(e.coding_rate=Se);const r=parseInt(Fe);if(r!==(null==me?void 0:me.tx_power)&&(e.tx_power=r),0===Object.keys(e).length)return Re({success:!0,message:"No changes to save"}),void Me("idle");const n=await h(e);if(!Be.current)return;if(n.success&&n.data){const e=n.data.applied.join(", "),t=n.data.live_update?" (applied live)":" (restart required)";Re({success:!0,message:`Updated: ${e}${t}`}),await ue(),Me("success"),Ae.current=setTimeout(()=>{Be.current&&(Me("idle"),je(!1),Re(null))},1500)}else Re({success:!1,message:n.error||"Failed to save"}),Me("error"),Ae.current=setTimeout(()=>{Be.current&&Me("idle")},2e3)}catch(e){if(!Be.current)return;Re({success:!1,message:String(e)}),Me("error"),Ae.current=setTimeout(()=>{Be.current&&Me("idle")},2e3)}}},disabled:"loading"===Le||!$s,className:_("p-2 rounded-lg transition-colors","loading"===Le?"text-accent-primary cursor-wait":"success"===Le?"text-accent-success":"error"===Le?"text-accent-danger":$s?"text-accent-success hover:bg-accent-success/10":"text-text-muted cursor-not-allowed"),title:$s?"Save changes":"No changes to save",children:"loading"===Le?r.jsx(A,{className:"w-4 h-4 animate-spin"}):"success"===Le?r.jsx(I,{className:"w-4 h-4"}):"error"===Le?r.jsx(o,{className:"w-4 h-4"}):r.jsx(I,{className:"w-4 h-4"})})]}):r.jsx("button",{onClick:()=>{me&&(Ne((me.frequency/1e6).toFixed(3)),ke(me.bandwidth/1e3),_e(me.spreading_factor),Te(me.coding_rate),Ee(String(me.tx_power))),Re(null),je(!0)},className:"p-2 rounded-lg transition-colors text-text-muted hover:text-text-primary hover:bg-bg-subtle",title:"Edit radio settings",children:r.jsx(W,{className:"w-4 h-4"})}))})]}),Pe&&r.jsx("div",{className:_("text-xs mb-3 px-2 py-1.5 rounded-md",Pe.success?"text-accent-success bg-accent-success/10":"text-accent-danger bg-accent-danger/10"),children:Pe.message}),me?r.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:fe?"Frequency (MHz)":"Frequency"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsx("input",{type:"number",value:ve,onChange:e=>Ne(e.target.value),step:"0.001",min:"400",max:"930",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsx("span",{className:"type-data text-text-primary",children:u(me.frequency)})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:fe?"TX Power (dBm)":"TX Power"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsx("input",{type:"number",value:Fe,onChange:e=>Ee(e.target.value),min:"-9",max:"22",className:"w-full bg-transparent text-text-primary focus:outline-none type-data"}):r.jsxs("span",{className:"type-data text-text-primary",children:[me.tx_power," dBm"]})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Bandwidth"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors relative",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsxs(r.Fragment,{children:[r.jsx("select",{value:we,onChange:e=>ke(parseFloat(e.target.value)),className:"w-full bg-transparent text-text-primary focus:outline-none appearance-none cursor-pointer type-data pr-6",children:te.map(e=>r.jsx("option",{value:e.value,children:e.label},e.value))}),r.jsx(m,{className:"absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 text-text-muted pointer-events-none"})]}):r.jsx("span",{className:"type-data text-text-primary",children:x(me.bandwidth)})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Spreading Factor"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors relative",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsxs(r.Fragment,{children:[r.jsx("select",{value:Ce,onChange:e=>_e(parseInt(e.target.value)),className:"w-full bg-transparent text-text-primary focus:outline-none appearance-none cursor-pointer type-data pr-6",children:se.map(e=>r.jsxs("option",{value:e,children:["SF",e]},e))}),r.jsx(m,{className:"absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 text-text-muted pointer-events-none"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:["SF",me.spreading_factor]})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Coding Rate"}),r.jsx("div",{className:_("h-[38px] rounded-full px-4 flex items-center transition-colors relative",fe?"bg-white/5":"bg-white/[0.02]"),children:fe?r.jsxs(r.Fragment,{children:[r.jsx("select",{value:Se,onChange:e=>Te(parseInt(e.target.value)),className:"w-full bg-transparent text-text-primary focus:outline-none appearance-none cursor-pointer type-data pr-6",children:ae.map(e=>r.jsx("option",{value:e.value,children:e.label},e.value))}),r.jsx(m,{className:"absolute right-4 top-1/2 -translate-y-1/2 w-4 h-4 text-text-muted pointer-events-none"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:["4/",me.coding_rate]})})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-1",children:"Preamble"}),r.jsx("div",{className:"h-[38px] rounded-full px-4 flex items-center bg-white/[0.02]",children:r.jsxs("span",{className:"type-data text-text-primary",children:[me.preamble_length," symbols"]})})]})]}):r.jsx("p",{className:"text-text-muted",children:"Loading radio configuration..."})]})})})]}),r.jsxs(R,{template:"standard",children:[r.jsx(z,{span:12,md:6,children:r.jsx(M,{children:r.jsxs("div",{ref:Ie,children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("h2",{className:"type-subheading text-text-primary flex items-center gap-3",children:[r.jsx(p,{className:"icon-md text-text-secondary"}),"Operating Mode"]}),r.jsx("div",{className:"flex items-center gap-1",children:Ze?r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:async()=>{if("loading"!==ct){dt.current&&clearTimeout(dt.current),it("loading");try{const e=await h({tx_delay_factor:parseFloat(tt),direct_tx_delay_factor:parseFloat(at)});if(await de({max_airtime_percent:parseFloat(nt),enforcement_enabled:ye}),!Be.current)return;e.success&&e.data?(await ue(),it("success"),dt.current=setTimeout(()=>{Be.current&&(it("idle"),et(!1))},1500)):(it("error"),dt.current=setTimeout(()=>{Be.current&&it("idle")},2e3))}catch{if(!Be.current)return;it("error"),dt.current=setTimeout(()=>{Be.current&&it("idle")},2e3)}}},disabled:"loading"===ct,className:_("p-2 rounded-lg transition-colors","loading"===ct?"text-accent-primary cursor-wait":"success"===ct?"text-accent-success":"error"===ct?"text-accent-danger":"text-accent-success hover:bg-accent-success/10"),title:"Save",children:"loading"===ct?r.jsx(A,{className:"w-4 h-4 animate-spin"}):"success"===ct?r.jsx(I,{className:"w-4 h-4"}):"error"===ct?r.jsx(o,{className:"w-4 h-4"}):r.jsx(I,{className:"w-4 h-4"})}),r.jsx("button",{onClick:Ws,className:"p-2 rounded-lg text-text-muted hover:text-accent-danger hover:bg-accent-danger/10",title:"Cancel",children:r.jsx(o,{className:"w-4 h-4"})})]}):r.jsx("button",{onClick:Gs,className:"p-2 rounded-lg transition-colors text-text-muted hover:text-text-primary hover:bg-bg-subtle",title:"Edit settings",children:r.jsx(W,{className:"w-4 h-4"})})})]}),r.jsx("p",{className:"type-label text-text-muted mb-3",children:"Control how the repeater handles packets"}),r.jsxs("div",{className:"flex flex-col sm:flex-row gap-4",children:[r.jsxs("div",{className:"flex-1 space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("label",{className:"type-label text-text-muted",children:"Repeat"}),r.jsx("div",{className:"flex items-center gap-2",children:(()=>{const e=null!==Ke?Ke:"forward"===be;return r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:async()=>{if("loading"===De)return;const t=!e,s="forward"===be;Ue.current&&clearTimeout(Ue.current),Xe.current&&clearTimeout(Xe.current),Je.current=!1,Ve(t),He("loading"),Ue.current=setTimeout(()=>{Je.current||Be.current&&(Ve(s),He("error"),Xe.current=setTimeout(()=>{Be.current&&(He("idle"),Ve(null))},2e3))},1e4);try{if(await ce(t?"forward":"monitor"),Je.current=!0,Ue.current&&clearTimeout(Ue.current),!Be.current)return;He("success"),Xe.current=setTimeout(()=>{Be.current&&(He("idle"),Ve(null),ie())},2e3)}catch{if(Je.current=!0,Ue.current&&clearTimeout(Ue.current),!Be.current)return;Ve(s),He("error"),Xe.current=setTimeout(()=>{Be.current&&(He("idle"),Ve(null))},2e3)}},disabled:"loading"===De,className:_("relative inline-flex h-6 w-11 items-center rounded-full transition-colors border-2",e?"bg-accent-success border-accent-success":"bg-bg-elevated border-border-subtle","loading"===De&&"opacity-70"),"aria-label":"Toggle forward mode",children:r.jsx("span",{className:_("inline-block h-4 w-4 transform rounded-full bg-white transition-transform shadow-lg",e?"translate-x-5":"translate-x-0.5")})}),r.jsx("span",{className:_("type-data text-sm w-7",e?"text-accent-success":"text-text-muted"),children:e?"On":"Off"}),"loading"===De&&r.jsx(A,{className:"w-4 h-4 text-text-muted animate-spin"}),"success"===De&&r.jsx(I,{className:"w-4 h-4 text-accent-success"}),"error"===De&&r.jsx(o,{className:"w-4 h-4 text-accent-danger"})]})})()})]}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("label",{className:"type-label text-text-muted",children:"Duty Cycle"}),r.jsx("div",{className:"flex items-center gap-2",children:(()=>{const e=null!==$e?$e:ye;return r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:async()=>{if("loading"===Oe)return;const t=!e,s=ye;Ge.current&&clearTimeout(Ge.current),We.current&&clearTimeout(We.current),Qe.current=!1,Ye(t),qe("loading"),Ge.current=setTimeout(()=>{Qe.current||Be.current&&(Ye(s),qe("error"),We.current=setTimeout(()=>{Be.current&&(qe("idle"),Ye(null))},2e3))},1e4);try{if(await de({max_airtime_percent:Xs(),enforcement_enabled:t}),Qe.current=!0,Ge.current&&clearTimeout(Ge.current),!Be.current)return;qe("success"),We.current=setTimeout(()=>{Be.current&&(qe("idle"),Ye(null),oe())},2e3)}catch{if(Qe.current=!0,Ge.current&&clearTimeout(Ge.current),!Be.current)return;Ye(s),qe("error"),We.current=setTimeout(()=>{Be.current&&(qe("idle"),Ye(null))},2e3)}},disabled:"loading"===Oe,className:_("relative inline-flex h-6 w-11 items-center rounded-full transition-colors border-2",e?"bg-accent-success border-accent-success":"bg-bg-elevated border-border-subtle","loading"===Oe&&"opacity-70"),"aria-label":"Toggle duty cycle",children:r.jsx("span",{className:_("inline-block h-4 w-4 transform rounded-full bg-white transition-transform shadow-lg",e?"translate-x-5":"translate-x-0.5")})}),r.jsx("span",{className:_("type-data text-sm w-7",e?"text-accent-success":"text-text-muted"),children:e?"On":"Off"}),"loading"===Oe&&r.jsx(A,{className:"w-4 h-4 text-text-muted animate-spin"}),"success"===Oe&&r.jsx(I,{className:"w-4 h-4 text-accent-success"}),"error"===Oe&&r.jsx(o,{className:"w-4 h-4 text-accent-danger"})]})})()})]}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("label",{className:"type-label text-text-muted",children:"Max Airtime"}),r.jsx("div",{className:_("h-[32px] rounded-full px-3 flex items-center justify-end transition-colors min-w-[80px]",Ze?"bg-white/5":"bg-white/[0.02]"),children:Ze?r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx("input",{type:"number",value:nt,onChange:e=>lt(e.target.value),step:"0.5",min:"0.1",max:"100",className:"w-12 bg-transparent text-text-primary text-right focus:outline-none type-data"}),r.jsx("span",{className:"text-text-muted type-data",children:"%"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:[Xs().toFixed(1),"%"]})})]})]}),r.jsx("div",{className:"hidden sm:block w-px bg-border-subtle"}),r.jsxs("div",{className:"flex-1 pt-4 sm:pt-0 border-t sm:border-t-0 border-border-subtle",children:[r.jsx("label",{className:"type-label text-text-muted block mb-3",children:"TX Delays"}),r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"type-label text-text-muted",children:"Flood"}),r.jsx("div",{className:_("h-[32px] rounded-full px-3 flex items-center justify-end transition-colors min-w-[80px]",Ze?"bg-white/5":"bg-white/[0.02]"),children:Ze?r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx("input",{type:"number",value:tt,onChange:e=>st(e.target.value),step:"0.1",min:"0",max:"5",className:"w-12 bg-transparent text-text-primary text-right focus:outline-none type-data"}),r.jsx("span",{className:"text-text-muted type-data",children:"x"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:[Bs().toFixed(2),"x"]})})]}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"type-label text-text-muted",children:"Direct"}),r.jsx("div",{className:_("h-[32px] rounded-full px-3 flex items-center justify-end transition-colors min-w-[80px]",Ze?"bg-white/5":"bg-white/[0.02]"),children:Ze?r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx("input",{type:"number",value:at,onChange:e=>rt(e.target.value),step:"0.1",min:"0",max:"5",className:"w-12 bg-transparent text-text-primary text-right focus:outline-none type-data"}),r.jsx("span",{className:"text-text-muted type-data",children:"s"})]}):r.jsxs("span",{className:"type-data text-text-primary",children:[Us().toFixed(2),"s"]})})]})]})]})]})]})})}),r.jsx(z,{span:12,md:6,children:r.jsxs(M,{children:[r.jsx(P,{icon:r.jsx(i,{}),title:"App Settings",largeTitle:!0}),r.jsx("p",{className:"type-body-sm text-text-muted mb-4",children:"Appearance and web server options."}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsxs("div",{children:[r.jsx("span",{className:"type-body text-text-primary font-medium block",children:"Enable CORS"}),r.jsx("span",{className:"type-body-sm text-text-muted",children:"Allow cross-origin API access"})]}),r.jsx("div",{className:"flex items-center gap-2",children:(()=>{const e=null!==Ft?Ft:(null==_t?void 0:_t.cors_enabled)??!1;return r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:Zs,disabled:"loading"===St,className:_("relative inline-flex h-6 w-11 items-center rounded-full transition-colors border-2",e?"bg-accent-primary border-accent-primary":"bg-bg-elevated border-border-subtle","loading"===St&&"opacity-70"),title:e?"Disable CORS":"Enable CORS",children:r.jsx("span",{className:_("inline-block h-4 w-4 transform rounded-full bg-white transition-transform shadow-lg",e?"translate-x-5":"translate-x-0.5")})}),"loading"===St&&r.jsx(A,{className:"w-4 h-4 text-text-muted animate-spin"}),"success"===St&&r.jsx(I,{className:"w-4 h-4 text-accent-success"}),"error"===St&&r.jsx(o,{className:"w-4 h-4 text-accent-danger"})]})})()})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-body text-text-primary font-medium block mb-2",children:"Theme"}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"flex-1 flex items-center justify-center",children:r.jsx(ee,{showLogoOnly:!0})}),r.jsx("div",{className:"flex-shrink-0",children:r.jsx(ee,{showThumbnailsOnly:!0})})]})]})]})]})})]}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",children:[r.jsxs("div",{children:[r.jsxs("h2",{className:"type-heading text-text-primary flex items-center gap-2",children:[r.jsx(U,{className:"icon-md text-accent-primary"}),"Regions / Transport Keys"]}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Manage regional key hierarchy for flood control"})]}),r.jsxs("div",{className:"flex gap-2 flex-wrap",children:[r.jsxs("button",{onClick:()=>ys(!0),disabled:"allow"===is,className:_("flex items-center gap-1.5 h-[32px] px-3 rounded-full transition-colors type-body-sm font-medium","allow"===is?"bg-white/[0.02] text-text-muted cursor-not-allowed":"bg-accent-success/10 hover:bg-accent-success/20 text-accent-success"),children:[r.jsx(J,{className:"w-3.5 h-3.5"}),"Add"]}),r.jsx("button",{onClick:ua,disabled:!ms||"allow"===is,className:_("h-[32px] px-3 rounded-full transition-colors type-body-sm font-medium",ms&&"allow"!==is?"bg-accent-primary/10 hover:bg-accent-primary/20 text-accent-primary":"bg-white/[0.02] text-text-muted cursor-not-allowed"),children:"Edit"}),r.jsx("button",{onClick:ma,disabled:!ms||"allow"===is,className:_("h-[32px] px-3 rounded-full transition-colors type-body-sm font-medium",ms&&"allow"!==is?"bg-accent-danger/10 hover:bg-accent-danger/20 text-accent-danger":"bg-white/[0.02] text-text-muted cursor-not-allowed"),children:"Delete"})]})]}),r.jsx("div",{className:"bg-white/[0.02] rounded-2xl p-4 mb-4",children:r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:_("w-10 h-10 rounded-full flex items-center justify-center","allow"===is?"bg-accent-success/20":"bg-accent-danger/20"),children:"allow"===is?r.jsx(Q,{className:"w-5 h-5 text-accent-success"}):r.jsx(Z,{className:"w-5 h-5 text-accent-danger"})}),r.jsxs("div",{children:[r.jsx("h4",{className:"type-body text-text-primary font-medium",children:"Global Flood Policy"}),r.jsx("p",{className:"type-body-sm text-text-muted",children:"Master control for repeater flooding"})]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsxs("div",{className:"flex bg-white/[0.02] rounded-full p-1",children:[r.jsx("button",{onClick:()=>da("deny"),disabled:os,className:_("px-4 py-1.5 rounded-full transition-colors type-body-sm font-medium","deny"===is?"bg-accent-danger/20 text-accent-danger":"text-text-muted hover:text-text-secondary",os&&"opacity-50"),children:"Deny"}),r.jsx("button",{onClick:()=>da("allow"),disabled:os,className:_("px-4 py-1.5 rounded-full transition-colors type-body-sm font-medium","allow"===is?"bg-accent-success/20 text-accent-success":"text-text-muted hover:text-text-secondary",os&&"opacity-50"),children:"Allow"})]}),os&&r.jsx(A,{className:"w-4 h-4 animate-spin text-text-muted"})]})]})}),ls&&r.jsx("div",{className:"type-body-sm mb-3 px-3 py-2 rounded-full text-accent-danger bg-accent-danger/10",children:ls}),r.jsx("div",{className:"bg-white/[0.02] rounded-2xl p-4 min-h-[120px]",children:rs?r.jsxs("div",{className:"flex items-center justify-center py-6",children:[r.jsx(A,{className:"w-5 h-5 animate-spin text-accent-primary mr-2"}),r.jsx("span",{className:"type-body-sm text-text-muted",children:"Loading transport keys..."})]}):0===ss.length?r.jsxs("div",{className:"text-center py-6",children:[r.jsx("div",{className:"w-12 h-12 rounded-full bg-white/[0.02] mx-auto mb-3 flex items-center justify-center",children:r.jsx(U,{className:"w-6 h-6 text-text-muted/50"})}),r.jsx("p",{className:"type-body text-text-muted",children:"No transport keys found"}),r.jsx("p",{className:"type-body-sm text-text-muted/70 mt-1",children:"Add your first transport key to get started"})]}):r.jsx("div",{className:"space-y-1",children:ss.map(e=>r.jsx(xa,{node:e,level:0},e.id))})})]})}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",children:[r.jsxs("div",{children:[r.jsxs("h2",{className:"type-heading text-text-primary flex items-center gap-2",children:[r.jsx(X,{className:"icon-md text-accent-primary"}),"API Tokens"]}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Manage API tokens for machine-to-machine authentication"})]}),r.jsxs("button",{onClick:()=>qt(!0),className:"flex items-center justify-center gap-2 h-[32px] px-4 bg-accent-primary/10 hover:bg-accent-primary/20 text-accent-primary rounded-full transition-colors type-body-sm font-medium",children:[r.jsx(J,{className:"w-4 h-4"}),"Create Token"]})]}),r.jsx("div",{className:"bg-accent-tertiary/5 rounded-2xl p-4 mb-4",children:r.jsxs("div",{className:"flex gap-3",children:[r.jsx("div",{className:"w-8 h-8 rounded-full bg-accent-tertiary/20 flex items-center justify-center flex-shrink-0",children:r.jsx(O,{className:"w-4 h-4 text-accent-tertiary"})}),r.jsxs("div",{className:"type-body-sm text-text-muted",children:[r.jsxs("p",{children:[r.jsx("span",{className:"text-text-secondary",children:"API tokens"})," are used for machine-to-machine authentication. Include the token in the ",r.jsx("code",{className:"type-code bg-accent-tertiary/20 px-1.5 py-0.5 rounded-full text-accent-tertiary",children:"X-API-Key"})," header when making API requests."]}),r.jsx("p",{className:"mt-1 text-text-muted/70",children:"Tokens are only shown once at creation. Store them securely."})]})]})}),Dt&&r.jsx("div",{className:"type-body-sm mb-3 px-3 py-2 rounded-full text-accent-danger bg-accent-danger/10",children:Dt}),At&&0===Rt.length?r.jsxs("div",{className:"flex items-center justify-center py-6",children:[r.jsx(A,{className:"w-5 h-5 animate-spin text-accent-primary mr-2"}),r.jsx("span",{className:"type-body-sm text-text-muted",children:"Loading tokens..."})]}):Rt.length>0?r.jsx("div",{className:"space-y-2",children:Rt.map(e=>r.jsx("div",{className:"bg-white/[0.02] hover:bg-white/[0.04] rounded-2xl p-4 transition-colors",children:r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[r.jsx("div",{className:"w-10 h-10 rounded-full bg-accent-primary/10 flex items-center justify-center flex-shrink-0",children:r.jsx(X,{className:"w-5 h-5 text-accent-primary"})}),r.jsxs("div",{className:"min-w-0 flex-1",children:[r.jsx("h3",{className:"type-body text-text-primary font-medium truncate",children:e.name}),r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:gap-4 mt-0.5",children:[r.jsxs("span",{className:"type-data-sm text-text-muted truncate",children:["Created: ",aa(e.created_at)]}),r.jsxs("span",{className:"type-data-sm text-text-muted truncate",children:["Last used: ",aa(e.last_used)]})]})]})]}),r.jsxs("button",{onClick:()=>Gt({id:e.id,name:e.name}),disabled:Qt,className:"h-[32px] px-4 bg-accent-danger/10 hover:bg-accent-danger/20 text-accent-danger rounded-full transition-colors disabled:opacity-50 type-body-sm font-medium flex items-center justify-center gap-1.5",children:[r.jsx(T,{className:"w-3.5 h-3.5"}),"Revoke"]})]})},e.id))}):r.jsxs("div",{className:"bg-white/[0.02] rounded-2xl p-6 text-center",children:[r.jsx("div",{className:"w-14 h-14 rounded-full bg-white/[0.02] mx-auto mb-4 flex items-center justify-center",children:r.jsx(X,{className:"w-7 h-7 text-text-muted/50"})}),r.jsx("h3",{className:"type-body text-text-primary font-medium mb-1",children:"No API Tokens"}),r.jsx("p",{className:"type-body-sm text-text-muted mb-4",children:"Create a token to enable API access"}),r.jsx("button",{onClick:()=>qt(!0),className:"h-[32px] px-4 bg-accent-primary/10 hover:bg-accent-primary/20 text-accent-primary rounded-full transition-colors type-body-sm font-medium",children:"Create Your First Token"})]})]})}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsx("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",children:r.jsxs("div",{children:[r.jsxs("h2",{className:"type-heading text-text-primary flex items-center gap-2",children:[r.jsx(G,{className:"icon-md text-accent-primary"}),"Web Frontend"]}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Choose which web interface to use"})]})}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"space-y-3",children:[r.jsxs("label",{className:_("flex items-start gap-3 p-4 bg-white/[0.02] rounded-2xl border-2 cursor-pointer transition-all",Ms?"border-accent-primary bg-accent-primary/5":"border-transparent hover:border-accent-primary/30","loading"===Ds&&"opacity-50 pointer-events-none"),children:[r.jsx("input",{type:"radio",name:"frontend",checked:Ms,onChange:()=>ea(!0),disabled:"loading"===Ds,className:"mt-1 h-4 w-4 text-accent-primary focus:ring-accent-primary focus:ring-offset-bg-elevated"}),r.jsxs("div",{className:"flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"type-body text-text-primary font-medium",children:"Default Frontend"}),r.jsx("a",{href:"https://github.com/rightup/pyMC_Repeater",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),className:"type-data-xs bg-accent-tertiary/15 text-accent-tertiary px-2.5 py-0.5 rounded-full font-medium hover:bg-accent-tertiary/25 transition-colors",children:"@RightUp"})]}),r.jsx("div",{className:"type-body-sm text-text-muted mt-1",children:"Built-in pyMC Repeater web interface"}),r.jsx("div",{className:"type-data-xs text-text-muted/60 mt-1 font-mono",children:"/opt/pymc_repeater/repeater/web/html"})]})]}),r.jsxs("label",{className:_("flex items-start gap-3 p-4 bg-white/[0.02] rounded-2xl border-2 cursor-pointer transition-all",Ms?"border-transparent hover:border-accent-primary/30":"border-accent-primary bg-accent-primary/5","loading"===Ds&&"opacity-50 pointer-events-none"),children:[r.jsx("input",{type:"radio",name:"frontend",checked:!Ms,onChange:()=>ea(!1),disabled:"loading"===Ds,className:"mt-1 h-4 w-4 text-accent-primary focus:ring-accent-primary focus:ring-offset-bg-elevated"}),r.jsxs("div",{className:"flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"type-body text-text-primary font-medium",children:"PyMC Console"}),r.jsx("span",{className:"type-data-xs bg-accent-secondary/15 text-accent-secondary px-2.5 py-0.5 rounded-full font-medium",children:"@Treehouse ⚡"})]}),r.jsx("div",{className:"type-body-sm text-text-muted mt-1",children:"Alternative web interface for pyMC Repeater"}),r.jsx("div",{className:"type-data-xs text-text-muted/60 mt-1 font-mono",children:"/opt/pymc_console/web/html"})]})]})]}),!As&&r.jsx("div",{className:_("bg-white/[0.02] rounded-2xl p-4",Rs?"border border-accent-success/20":"border border-accent-tertiary/20"),children:r.jsxs("div",{className:"flex items-start gap-3",children:[r.jsx("div",{className:_("w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0",Rs?"bg-accent-success/20":"bg-accent-tertiary/20"),children:Rs?r.jsx(Y,{className:"w-4 h-4 text-accent-success"}):r.jsx(O,{className:"w-4 h-4 text-accent-tertiary"})}),r.jsxs("div",{className:"flex-1",children:[r.jsx("h4",{className:"type-body text-text-primary font-medium",children:Rs?"PyMC Console has been detected":"PyMC Console Not Installed"}),Rs?r.jsxs("p",{className:"type-body-sm text-text-muted mt-1",children:["PyMC Console is installed at ",r.jsx("code",{className:"type-code bg-accent-success/10 px-1.5 py-0.5 rounded-full text-accent-success",children:"/opt/pymc_console/web/html"})]}):r.jsxs(r.Fragment,{children:[r.jsxs("p",{className:"type-body-sm text-text-muted mt-1 mb-3",children:["PyMC Console must be installed at ",r.jsx("code",{className:"type-code bg-accent-tertiary/10 px-1.5 py-0.5 rounded-full text-accent-tertiary",children:"/opt/pymc_console/web/html"})," before selecting this option."]}),r.jsxs("a",{href:"https://github.com/dmduran12/pymc_console-dist",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 h-[32px] px-4 bg-accent-tertiary/10 hover:bg-accent-tertiary/20 text-accent-tertiary rounded-full type-body-sm font-medium transition-colors",children:[r.jsx(q,{className:"w-4 h-4"}),"PyMC Console Install Instructions"]})]})]})]})}),Os&&r.jsx("div",{className:"bg-white/[0.02] rounded-2xl p-4 border border-accent-secondary/30",children:r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[r.jsxs("div",{className:"flex items-start gap-3 flex-1",children:[r.jsx("div",{className:"w-8 h-8 rounded-full bg-accent-secondary/20 flex items-center justify-center flex-shrink-0",children:r.jsx(D,{className:"w-4 h-4 text-accent-secondary"})}),r.jsxs("div",{className:"flex-1",children:[r.jsx("h4",{className:"type-body text-text-primary font-medium",children:"Service restart required"}),r.jsx("p",{className:"type-body-sm text-text-muted mt-1",children:"Web frontend changes will take effect after restarting the pymc-repeater service."})]})]}),r.jsx("button",{onClick:async()=>{if(!Ks){Vs(!0);try{await g(),qs(!1),setTimeout(()=>{window.location.reload()},2e3)}catch{qs(!1),setTimeout(()=>{window.location.reload()},3e3)}}},disabled:Ks,className:"h-[32px] px-4 bg-accent-secondary/10 hover:bg-accent-secondary/20 text-accent-secondary rounded-full transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 whitespace-nowrap type-body-sm font-medium",children:Ks?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Restarting..."]}):r.jsxs(r.Fragment,{children:[r.jsx(K,{className:"w-4 h-4"}),"Restart Now"]})})]})})]})]})}),r.jsx(R,{template:"auto",children:r.jsxs(M,{children:[r.jsx(P,{icon:r.jsx(p,{}),title:"Node Information",largeTitle:!0}),le?r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Node Name"}),r.jsx("p",{className:"type-body text-text-primary mt-1",children:he})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Version"}),r.jsxs("p",{className:"type-data text-text-primary mt-1",children:["v",le.version]})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Core Version"}),r.jsxs("p",{className:"type-data text-text-primary mt-1",children:["v",le.core_version]})]}),r.jsxs("div",{children:[r.jsx("span",{className:"type-label text-text-muted",children:"Local Hash"}),r.jsx("div",{className:"mt-1",children:le.local_hash?r.jsx(S,{hash:le.local_hash,size:"sm"}):r.jsx("span",{className:"type-data-sm text-text-muted",children:"N/A"})})]})]}),le.public_key&&r.jsxs("div",{className:"mt-4 pt-4 border-t border-border-subtle",children:[r.jsx("span",{className:"type-label text-text-muted",children:"Public Key"}),r.jsx("div",{className:"mt-1",children:r.jsx(S,{hash:le.public_key,prefixLength:12,suffixLength:8})})]})]}):r.jsx("p",{className:"text-text-muted",children:"Loading node information..."})]})}),Ot&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&qt(!1),role:"dialog","aria-modal":"true","aria-labelledby":"create-token-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"create-token-modal-title",className:"type-subheading text-text-primary mb-4",children:"Create API Token"}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Token Name"}),r.jsx("input",{type:"text",value:Kt,onChange:e=>Vt(e.target.value),placeholder:"e.g., Production Server, CI/CD Pipeline",className:"w-full px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary placeholder-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 transition-colors",onKeyDown:e=>"Enter"===e.key&&sa(),autoFocus:!0}),r.jsx("p",{className:"text-xs text-text-muted mt-1",children:"Give your token a descriptive name to identify its purpose"})]}),r.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[r.jsx("button",{onClick:()=>{qt(!1),Vt(""),Ht(null)},disabled:Wt,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:sa,disabled:Wt||!Kt.trim(),className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Wt?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Creating..."]}):"Create Token"})]})]})]})}),Bt&&$t&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&Ut(!1),role:"dialog","aria-modal":"true","aria-labelledby":"show-token-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-lg w-full shadow-2xl",children:[r.jsx("h3",{id:"show-token-modal-title",className:"type-subheading text-text-primary mb-4",children:"Token Created Successfully"}),r.jsxs("div",{className:"space-y-4",children:[r.jsx("div",{className:"bg-accent-secondary/10 border border-accent-secondary/30 rounded-lg p-3",children:r.jsxs("div",{className:"flex gap-2",children:[r.jsx(D,{className:"w-4 h-4 text-accent-secondary flex-shrink-0 mt-0.5"}),r.jsxs("div",{className:"text-sm text-text-secondary",children:[r.jsx("strong",{children:"Save this token now!"})," For security reasons, it will not be shown again."]})]})}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Your API Token"}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("input",{value:$t,readOnly:!0,className:"flex-1 px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary font-mono text-sm"}),r.jsxs("button",{onClick:()=>{$t&&(navigator.clipboard.writeText($t),ts(!0),setTimeout(()=>ts(!1),2e3))},className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors flex items-center gap-2",title:"Copy to clipboard",children:[es?r.jsx(I,{className:"w-4 h-4 text-accent-success"}):r.jsx(H,{className:"w-4 h-4"}),es?"Copied!":"Copy"]})]})]}),r.jsxs("div",{className:"bg-accent-tertiary/10 border border-accent-tertiary/30 rounded-lg p-3",children:[r.jsx("p",{className:"text-sm text-text-secondary mb-2",children:r.jsx("strong",{children:"Usage Example:"})}),r.jsxs("code",{className:"block bg-accent-tertiary/20 px-3 py-2 rounded text-xs text-accent-tertiary font-mono overflow-x-auto",children:['curl -H "X-API-Key: ',$t.slice(0,12),'..." ',window.location.origin,"/api/stats"]})]}),r.jsx("div",{className:"flex justify-end mt-6",children:r.jsx("button",{onClick:()=>{Ut(!1),Yt(null)},className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors",children:"Done"})})]})]})}),r.jsx(F,{isOpen:!!Xt,title:"Revoke API Token",message:`Are you sure you want to revoke the token '${null==Xt?void 0:Xt.name}'? This action cannot be undone.`,confirmLabel:Qt?"Revoking...":"Revoke",cancelLabel:"Cancel",variant:"danger",onConfirm:async()=>{if(Xt){Zt(!0),Ht(null);try{await j(Xt.id),await ta(),Gt(null)}catch(e){Ht(e instanceof Error?e.message:"Failed to revoke token")}finally{Zt(!1)}}},onCancel:()=>Gt(null)}),bs&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&ys(!1),role:"dialog","aria-modal":"true","aria-labelledby":"add-key-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"add-key-modal-title",className:"type-subheading text-text-primary mb-4",children:"Add Transport Key"}),r.jsxs("div",{className:"space-y-4",children:[ms&&r.jsxs("div",{className:"bg-accent-tertiary/10 border border-accent-tertiary/30 rounded-lg p-3 text-sm text-text-secondary",children:["Adding as child of: ",r.jsx("strong",{className:"text-text-primary",children:ca()})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Key Name"}),r.jsx("input",{type:"text",value:_s,onChange:e=>Ss(e.target.value),placeholder:"e.g., Region Name, Group Key",className:"w-full px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary placeholder-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 transition-colors",onKeyDown:e=>"Enter"===e.key&&oa(),autoFocus:!0})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Flood Policy"}),r.jsxs("div",{className:"flex bg-bg-subtle rounded-lg border border-border-subtle p-1",children:[r.jsx("button",{onClick:()=>Fs("deny"),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","deny"===Ts?"bg-accent-danger/20 text-accent-danger border border-accent-danger/50":"text-text-muted hover:text-text-secondary"),children:"DENY"}),r.jsx("button",{onClick:()=>Fs("allow"),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","allow"===Ts?"bg-accent-success/20 text-accent-success border border-accent-success/50":"text-text-muted hover:text-text-secondary"),children:"ALLOW"})]})]}),r.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[r.jsx("button",{onClick:()=>{ys(!1),Ss(""),Fs("deny")},disabled:Es,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:oa,disabled:Es||!_s.trim(),className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Es?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Adding..."]}):"Add Key"})]})]})]})}),gs&&Ns&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&fs(!1),role:"dialog","aria-modal":"true","aria-labelledby":"edit-key-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"edit-key-modal-title",className:"type-subheading text-text-primary mb-4",children:"Edit Transport Key"}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Key Name"}),r.jsx("input",{type:"text",value:Ns.name,onChange:e=>ws({...Ns,name:e.target.value}),className:"w-full px-4 py-2 bg-bg-subtle border border-border-subtle rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-primary/50 transition-colors",autoFocus:!0})]}),r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Flood Policy"}),r.jsxs("div",{className:"flex bg-bg-subtle rounded-lg border border-border-subtle p-1",children:[r.jsx("button",{onClick:()=>ws({...Ns,floodPolicy:"deny"}),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","deny"===Ns.floodPolicy?"bg-accent-danger/20 text-accent-danger border border-accent-danger/50":"text-text-muted hover:text-text-secondary"),children:"DENY"}),r.jsx("button",{onClick:()=>ws({...Ns,floodPolicy:"allow"}),className:_("flex-1 px-3 py-2 text-sm font-medium rounded transition-colors","allow"===Ns.floodPolicy?"bg-accent-success/20 text-accent-success border border-accent-success/50":"text-text-muted hover:text-text-secondary"),children:"ALLOW"})]})]}),Ns.transport_key&&r.jsxs("div",{children:[r.jsx("label",{className:"type-label text-text-muted block mb-2",children:"Transport Key"}),r.jsx("code",{className:"block bg-bg-subtle px-3 py-2 rounded-lg text-xs text-text-muted font-mono overflow-x-auto",children:Ns.transport_key})]}),r.jsxs("div",{className:"flex justify-between gap-3 mt-6",children:[r.jsx("button",{onClick:()=>{fs(!1),Cs(Ns),vs(!0),ws(null)},disabled:Es,className:"px-4 py-2 bg-accent-danger/20 hover:bg-accent-danger/30 text-accent-danger rounded-lg border border-accent-danger/50 transition-colors disabled:opacity-50",children:"Delete"}),r.jsxs("div",{className:"flex gap-3",children:[r.jsx("button",{onClick:()=>{fs(!1),ws(null)},disabled:Es,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:async()=>{if(Ns){Ls(!0),cs(null);try{const e=await w(Ns.id,{name:Ns.name,flood_policy:Ns.floodPolicy});e.success?(await na(),fs(!1),ws(null)):cs(e.error||"Failed to update transport key")}catch(e){cs(e instanceof Error?e.message:"Failed to update transport key")}finally{Ls(!1)}}},disabled:Es||!Ns.name.trim(),className:"px-4 py-2 bg-accent-primary/20 hover:bg-accent-primary/30 text-text-primary rounded-lg border border-accent-primary/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Es?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Saving..."]}):"Save"})]})]})]})]})}),js&&ks&&r.jsx("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e=>e.target===e.currentTarget&&vs(!1),role:"dialog","aria-modal":"true","aria-labelledby":"delete-key-modal-title",children:r.jsxs("div",{className:"bg-bg-elevated border border-border-subtle rounded-xl p-6 max-w-md w-full shadow-2xl",children:[r.jsx("h3",{id:"delete-key-modal-title",className:"type-subheading text-text-primary mb-4",children:"Delete Transport Key"}),r.jsxs("p",{className:"text-text-secondary mb-4",children:["Are you sure you want to delete ",r.jsxs("strong",{className:"text-text-primary",children:["'",ks.name,"'"]}),"?"]}),ks.children&&ks.children.length>0&&r.jsx("div",{className:"bg-accent-secondary/10 border border-accent-secondary/30 rounded-lg p-3 mb-4",children:r.jsxs("div",{className:"flex gap-2",children:[r.jsx(D,{className:"w-4 h-4 text-accent-secondary flex-shrink-0 mt-0.5"}),r.jsxs("div",{className:"text-sm text-text-secondary",children:["This key has ",ks.children.length," child key(s). Deleting will also remove all children."]})]})}),r.jsxs("div",{className:"flex justify-end gap-3",children:[r.jsx("button",{onClick:()=>{vs(!1),Cs(null)},disabled:Es,className:"px-4 py-2 bg-bg-subtle hover:bg-bg-elevated text-text-secondary rounded-lg border border-border-subtle transition-colors disabled:opacity-50",children:"Cancel"}),r.jsx("button",{onClick:async()=>{if(ks){Ls(!0),cs(null);try{const e=await k(ks.id);e.success?(await na(),vs(!1),Cs(null),xs(null)):cs(e.error||"Failed to delete transport key")}catch(e){cs(e instanceof Error?e.message:"Failed to delete transport key")}finally{Ls(!1)}}},disabled:Es,className:"px-4 py-2 bg-accent-danger/20 hover:bg-accent-danger/30 text-accent-danger rounded-lg border border-accent-danger/50 transition-colors disabled:opacity-50 flex items-center gap-2",children:Es?r.jsxs(r.Fragment,{children:[r.jsx(A,{className:"w-4 h-4 animate-spin"}),"Deleting..."]}):"Delete"})]})]})})]})}export{re as default}; diff --git a/frontend/dist/assets/ConfirmModal-Dqq3f6Pz.js b/frontend/dist/assets/ConfirmModal-L-7rhSxP.js similarity index 95% rename from frontend/dist/assets/ConfirmModal-Dqq3f6Pz.js rename to frontend/dist/assets/ConfirmModal-L-7rhSxP.js index 758a1a66..e96c991d 100644 --- a/frontend/dist/assets/ConfirmModal-Dqq3f6Pz.js +++ b/frontend/dist/assets/ConfirmModal-L-7rhSxP.js @@ -1 +1 @@ -import{c as e,j as t,X as o}from"./index-u-aEBJEv.js";import{b as n,g as s,c as d}from"./recharts-bmHCCfxU.js";import{T as r}from"./triangle-alert-mjaXzP1s.js";const a=e("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]),l=n.memo(function({isOpen:e,title:a="Confirm",message:l,confirmLabel:c="Confirm",cancelLabel:i="Cancel",variant:m="default",onConfirm:b,onCancel:x}){if(n.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&x()};window.addEventListener("keydown",t);const o=document.body.style.overflow,n=document.body.style.position,s=document.body.style.width,d=document.body.style.top,r=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${r}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=o,document.body.style.position=n,document.body.style.width=s,document.body.style.top=d,window.scrollTo(0,r)}},[e,x]),!e)return null;const u={danger:{icon:"text-accent-danger",button:"bg-accent-danger hover:bg-red-600"},warning:{icon:"text-accent-secondary",button:"bg-accent-secondary hover:bg-yellow-600 text-bg-body"},default:{icon:"text-accent-primary",button:"bg-accent-primary hover:bg-violet-500 text-bg-body"}}[m];return s.createPortal(t.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-md z-[10010] flex items-end sm:items-center justify-center",onClick:x,role:"dialog","aria-modal":"true","aria-labelledby":"confirm-modal-title",children:t.jsxs("div",{className:d("glass-card-elevated w-full max-w-sm","sm:mx-4 sm:rounded-xl","rounded-t-2xl rounded-b-none sm:rounded-b-xl","pb-safe"),onClick:e=>e.stopPropagation(),children:[t.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:d("p-2 rounded-lg bg-bg-subtle",u.icon),children:t.jsx(r,{className:"w-5 h-5"})}),t.jsx("h3",{id:"confirm-modal-title",className:"text-base font-semibold text-text-primary",children:a})]}),t.jsx("button",{onClick:x,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:t.jsx(o,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-sm text-text-secondary",children:l})}),t.jsxs("div",{className:"flex gap-3 p-4 pt-0",children:[t.jsx("button",{onClick:x,className:"flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-secondary bg-bg-subtle hover:bg-bg-elevated border border-border-subtle transition-colors",children:i}),t.jsx("button",{onClick:b,className:d("flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-primary transition-colors",u.button),children:c})]})]})}),document.body)});export{l as C,a as T}; +import{c as e,j as t,X as o}from"./index-CnT6m9UL.js";import{b as n,g as s,c as d}from"./recharts-bmHCCfxU.js";import{T as r}from"./triangle-alert-BVWkhQDA.js";const a=e("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]),l=n.memo(function({isOpen:e,title:a="Confirm",message:l,confirmLabel:c="Confirm",cancelLabel:i="Cancel",variant:m="default",onConfirm:b,onCancel:x}){if(n.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&x()};window.addEventListener("keydown",t);const o=document.body.style.overflow,n=document.body.style.position,s=document.body.style.width,d=document.body.style.top,r=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${r}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=o,document.body.style.position=n,document.body.style.width=s,document.body.style.top=d,window.scrollTo(0,r)}},[e,x]),!e)return null;const u={danger:{icon:"text-accent-danger",button:"bg-accent-danger hover:bg-red-600"},warning:{icon:"text-accent-secondary",button:"bg-accent-secondary hover:bg-yellow-600 text-bg-body"},default:{icon:"text-accent-primary",button:"bg-accent-primary hover:bg-violet-500 text-bg-body"}}[m];return s.createPortal(t.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-md z-[10010] flex items-end sm:items-center justify-center",onClick:x,role:"dialog","aria-modal":"true","aria-labelledby":"confirm-modal-title",children:t.jsxs("div",{className:d("glass-card-elevated w-full max-w-sm","sm:mx-4 sm:rounded-xl","rounded-t-2xl rounded-b-none sm:rounded-b-xl","pb-safe"),onClick:e=>e.stopPropagation(),children:[t.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:d("p-2 rounded-lg bg-bg-subtle",u.icon),children:t.jsx(r,{className:"w-5 h-5"})}),t.jsx("h3",{id:"confirm-modal-title",className:"text-base font-semibold text-text-primary",children:a})]}),t.jsx("button",{onClick:x,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:t.jsx(o,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-sm text-text-secondary",children:l})}),t.jsxs("div",{className:"flex gap-3 p-4 pt-0",children:[t.jsx("button",{onClick:x,className:"flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-secondary bg-bg-subtle hover:bg-bg-elevated border border-border-subtle transition-colors",children:i}),t.jsx("button",{onClick:b,className:d("flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-primary transition-colors",u.button),children:c})]})]})}),document.body)});export{l as C,a as T}; diff --git a/frontend/dist/assets/Contacts-mxXbTbA9.js b/frontend/dist/assets/Contacts-CLo_3QPn.js similarity index 93% rename from frontend/dist/assets/Contacts-mxXbTbA9.js rename to frontend/dist/assets/Contacts-CLo_3QPn.js index 2be6033a..6e944d7d 100644 --- a/frontend/dist/assets/Contacts-mxXbTbA9.js +++ b/frontend/dist/assets/Contacts-CLo_3QPn.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ContactsMapMapLibre-Dn2coX3j.js","assets/index-u-aEBJEv.js","assets/recharts-bmHCCfxU.js","assets/maplibre-gl-CFO9X1Ek.js","assets/index--XvAw-pH.css","assets/maplibre-gl-Bo6KJfqq.js","assets/maplibre-gl-B1CfjdFi.css","assets/ConfirmModal-Dqq3f6Pz.js","assets/triangle-alert-mjaXzP1s.js","assets/loader-circle-S02pN6Pc.js","assets/info-DB0wMPyN.js","assets/useThemeColors-CMkWsRmX.js","assets/CollisionExplorerModal-DpehaIf1.js","assets/leaflet-ClE6qLuu.js","assets/map-pin-Dxo4grF0.js","assets/CollisionExplorerModal-CIGW-MKW.css","assets/house-CH6EBns-.js","assets/refresh-cw-CwCmA6yx.js","assets/trending-up-Bh7q2eR0.js","assets/map-Cv9tMAUH.js","assets/external-link-BjkfQ8qu.js","assets/SignalIndicator-fZ2fPuZN.js","assets/zap-hdBg1E3g.js","assets/activity-BEkQtz77.js","assets/HashBadge-DD7AM9Wo.js","assets/PageLayout-eQKINMu6.js","assets/users-mNRSAj9B.js"])))=>i.map(i=>d[i]); -import{c as e,j as t,_ as s,F as a,E as n,G as r,H as l,I as c,y as i,J as o,k as d,K as h,M as x,N as m,h as u,R as p,X as g,C as j,O as f}from"./index-u-aEBJEv.js";import{b as v,d as N,h as y,T as b,f as w,e as k,L as C}from"./recharts-bmHCCfxU.js";import{a as M}from"./SignalIndicator-fZ2fPuZN.js";import{T as S}from"./triangle-alert-mjaXzP1s.js";import{T as H,Z as L,M as $}from"./zap-hdBg1E3g.js";import{A as _}from"./activity-BEkQtz77.js";import{T as R,N as E}from"./trending-up-Bh7q2eR0.js";import{H as A}from"./HashBadge-DD7AM9Wo.js";import{T as P,C as T}from"./ConfirmModal-Dqq3f6Pz.js";import{C as F,M as O,S as z,a as D,A as K}from"./CollisionExplorerModal-DpehaIf1.js";import{P as W,a as q}from"./PageLayout-eQKINMu6.js";import{M as I}from"./map-pin-Dxo4grF0.js";import{U as B}from"./users-mNRSAj9B.js";const U=e("arrow-up-down",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]),G=e("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),V=e("file-digit",[["path",{d:"M4 12V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2",key:"jrl274"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 16h2v6",key:"1bxocy"}],["path",{d:"M10 22h4",key:"ceow96"}],["rect",{x:"2",y:"16",width:"4",height:"6",rx:"2",key:"r45zd0"}]]),Z=e("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),J=e("ruler",[["path",{d:"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z",key:"icamh8"}],["path",{d:"m14.5 12.5 2-2",key:"inckbg"}],["path",{d:"m11.5 9.5 2-2",key:"fmmyf7"}],["path",{d:"m8.5 6.5 2-2",key:"vc6u1g"}],["path",{d:"m17.5 15.5 2-2",key:"wo5hmg"}]]),Q=e("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);class X extends v.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){var e;return this.state.hasError?t.jsx("div",{className:"map-container-16-9 glass-card flex items-center justify-center",role:"alert","aria-live":"assertive",children:t.jsxs("div",{className:"text-center text-white/50 p-4",children:[t.jsx("p",{className:"text-lg mb-2",children:"Map failed to load"}),t.jsx("p",{className:"text-sm text-white/30",children:(null==(e=this.state.error)?void 0:e.message)||"Unknown error"}),t.jsx("p",{className:"text-xs text-white/20 mt-2",children:"Try refreshing the page or check your browser's WebGL support."})]})}):this.props.children}}const Y=v.lazy(()=>s(()=>import("./ContactsMapMapLibre-Dn2coX3j.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])));function ee({neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:c}){return t.jsx(X,{children:t.jsx(v.Suspense,{fallback:t.jsx("div",{className:"map-container-16-9 glass-card flex items-center justify-center",role:"status","aria-live":"polite","aria-label":"Loading map",children:t.jsxs("div",{className:"text-white/50 flex items-center gap-3",children:[t.jsx("div",{className:"w-5 h-5 border-2 border-accent-primary border-t-transparent rounded-full animate-spin","aria-hidden":"true"}),t.jsx("span",{children:"Loading map..."})]})}),children:t.jsx(Y,{neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:c})})})}function te(e){return e>=.7?"text-accent-success":e>=.5?"text-accent-secondary":e>=.3?"text-signal-poor":"text-accent-danger"}function se(e){return`${Math.round(100*e)}%`}const ae=v.memo(function({path:e,isHighlighted:s,onHighlight:a}){const n=function(e){return e>.2?{icon:t.jsx(R,{className:"w-3 h-3"}),color:"text-accent-success"}:e<-.2?{icon:t.jsx(H,{className:"w-3 h-3"}),color:"text-accent-danger"}:{icon:t.jsx($,{className:"w-3 h-3"}),color:"text-text-muted"}}(e.observationTrend),r=e.weakestLinkKey&&e.weakestLinkConfidence<.5;return t.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md transition-colors cursor-pointer "+(s?"bg-accent-primary/20 border border-accent-primary/40":"hover:bg-white/5"),onClick:()=>a(s?null:e.weakestLinkKey),children:[t.jsx("div",{className:"flex-shrink-0 w-12 text-center py-1 rounded-md "+(l=e.healthScore,l>=.7?"bg-accent-success/10":l>=.5?"bg-accent-secondary/10":l>=.3?"bg-signal-poor/10":"bg-accent-danger/10"),children:t.jsx("span",{className:`text-xs font-semibold tabular-nums ${te(e.healthScore)}`,children:se(e.healthScore)})}),t.jsx("div",{className:"flex-1 flex items-center gap-0.5 overflow-x-auto min-w-0",children:e.hops.map((s,a)=>{var n;return t.jsxs("span",{className:"flex items-center",children:[t.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded "+(r&&(null==(n=e.weakestLinkKey)?void 0:n.includes(s))?"bg-accent-danger/20 text-accent-danger":"bg-white/10 text-text-secondary"),children:s}),al.slice(0,e),[l,e]),d=v.useMemo(()=>0===l.length?null:{avgHealth:l.reduce((e,t)=>e+t.healthScore,0)/l.length,declining:l.filter(e=>e.observationTrend<-.2).length,weakLinks:l.filter(e=>e.weakestLinkConfidence<.5).length},[l]),h=e=>{null==s||s(e)};return 0===l.length?null:t.jsxs("div",{className:"chart-container",children:[t.jsxs("button",{onClick:()=>i(!c),className:"w-full chart-header hover:bg-white/5 transition-colors rounded-t-lg cursor-pointer",children:[t.jsxs("div",{className:"chart-title",children:[t.jsx(Z,{className:"chart-title-icon"}),"Path Health",t.jsxs("span",{className:"ml-2 text-[10px] font-normal text-text-muted",children:["(",l.length," paths)"]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[d&&t.jsxs("div",{className:"flex items-center gap-3 text-[10px]",children:[t.jsxs("span",{className:`tabular-nums ${te(d.avgHealth)}`,children:["Avg: ",se(d.avgHealth)]}),d.weakLinks>0&&t.jsxs("span",{className:"text-accent-danger flex items-center gap-1",children:[t.jsx(S,{className:"w-3 h-3"}),d.weakLinks," weak"]}),d.declining>0&&t.jsxs("span",{className:"text-signal-poor flex items-center gap-1",children:[t.jsx(H,{className:"w-3 h-3"}),d.declining," declining"]})]}),c?t.jsx(G,{className:"w-4 h-4 text-text-muted"}):t.jsx(n,{className:"w-4 h-4 text-text-muted"})]})]}),c&&t.jsxs("div",{className:"p-3 pt-0 space-y-1",children:[t.jsxs("div",{className:"flex items-center gap-4 text-[10px] text-text-muted pb-2 border-b border-white/5",children:[t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-success"})," Healthy (≥70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-secondary"})," Fair (50-70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-signal-poor"})," Weak (30-50%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-danger"})," Critical (<30%)"]})]}),t.jsx("div",{className:"space-y-1 max-h-64 overflow-y-auto",children:o.map(e=>t.jsx(ae,{path:e,isHighlighted:r===e.weakestLinkKey,onHighlight:h},e.pathKey))}),l.length>e&&t.jsxs("div",{className:"text-center text-[10px] text-text-muted pt-2",children:["Showing top ",e," of ",l.length," paths"]})]})]})}),re="var(--signal-critical)",le="var(--signal-poor)",ce="var(--signal-fair)",ie="var(--signal-good)",oe="var(--signal-excellent)",de="var(--text-muted)";function he({active:e,payload:s}){if(!e||!s||!s.length)return null;const a=s[0].payload,n=new Date(a.timestamp),r=`${(n.getMonth()+1).toString().padStart(2,"0")}/${n.getDate().toString().padStart(2,"0")}`;return t.jsxs("div",{className:"bg-tooltip-bg border border-border-subtle rounded px-1.5 py-0.5 text-[10px] shadow-xl",children:[t.jsx("span",{className:"text-text-muted",children:r}),t.jsx("span",{className:"ml-1.5 font-semibold tabular-nums",children:a.count})]})}const xe=v.memo(function({nodeHash:e,width:s=60,height:a=20,color:n,showArea:c=!0,showTooltip:i=!1,className:o=""}){const d=r(e),h=l(),x=n??(d.length>0?function(e){if(0===e.length)return re;const t=e.slice(-4),s=t.reduce((e,t)=>e+t.count,0),a=s/t.length,n=e.reduce((e,t)=>e+t.count,0)/e.length;if(0===s)return re;if(n>0){const e=a/n;return e>=1.2?oe:e>=.8?ie:e>=.4?ce:e>=.1?le:re}return s>=10?oe:s>=5?ie:s>=2?ce:s>=1?le:re}(d):de),m={width:s,height:a};if(d.length<2){const e="number"==typeof s?s:60,n=h?de:re;return t.jsx("div",{className:`flex items-center justify-center ${o}`,style:{...m,color:n},children:t.jsx("svg",{width:"100%",height:a,viewBox:`0 0 ${e} ${a}`,preserveAspectRatio:"none",children:t.jsx("line",{x1:4,y1:a/2,x2:e-4,y2:a/2,stroke:"currentColor",strokeWidth:1.5,strokeDasharray:"3,2",className:h?"animate-pulse":""})})})}const u=`sparkline-gradient-${e.slice(-6)}`;return t.jsx("div",{className:o,style:m,children:t.jsx(N,{width:"100%",height:"100%",children:c?t.jsxs(y,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[t.jsx("defs",{children:t.jsxs("linearGradient",{id:u,x1:"0",y1:"0",x2:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:x,stopOpacity:.35}),t.jsx("stop",{offset:"100%",stopColor:x,stopOpacity:.05})]})}),i&&t.jsx(b,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(w,{type:"monotone",dataKey:"count",stroke:"none",fill:`url(#${u})`,isAnimationActive:!1}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:x,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]}):t.jsxs(C,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[i&&t.jsx(b,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:x,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]})})})}),me=v.memo(function({hash:e,className:s="",size:a="sm"}){const n=c(),[r,l]=v.useState(!1),o=v.useMemo(()=>i(e),[e]),d=v.useMemo(()=>o?n.find(e=>e.prefix===o)??null:null,[o,n]),h=v.useCallback(e=>{e.preventDefault(),e.stopPropagation(),l(!0)},[]),x=v.useCallback(()=>{l(!1)},[]);if(!d)return null;const m="sm"===a?"w-3.5 h-3.5":"w-4 h-4";return t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",onClick:h,className:`inline-flex items-center justify-center p-0.5 rounded text-signal-fair hover:text-accent-secondary hover:bg-signal-fair/10 focus:outline-none focus:ring-2 focus:ring-signal-fair/50 transition-colors cursor-pointer touch-manipulation ${s}`,title:`Prefix conflict: ${d.candidateCount} nodes share prefix "${o}"`,"aria-label":`View prefix conflict for ${o}`,children:t.jsx(V,{className:m})}),t.jsx(F,{isOpen:r,prefix:d.prefix,candidateHashes:d.candidateHashes,onClose:x})]})});function ue(e,t,s,a){const n=(s-e)*Math.PI/180,r=(a-t)*Math.PI/180,l=Math.sin(n/2)*Math.sin(n/2)+Math.cos(e*Math.PI/180)*Math.cos(s*Math.PI/180)*Math.sin(r/2)*Math.sin(r/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*6371e3}const pe=Object.freeze(Object.defineProperty({__proto__:null,default:function(){const{stats:e}=o(),s=d(),a=h(),n=x(),r=m(),l=u(),[c,i]=v.useState(null),[N,y]=v.useState("lastHeard"),[b,w]=v.useState("desc"),[k,C]=v.useState(""),[S,H]=v.useState(!1),[L,$]=v.useState(null),[R,F]=v.useState(null),G=v.useMemo(()=>(null==e?void 0:e.neighbors)??{},[null==e?void 0:e.neighbors]),V=v.useMemo(()=>Object.fromEntries(Object.entries(G).filter(([e])=>!s.has(e))),[G,s]),Z=v.useMemo(()=>{var t;return(null==(t=null==e?void 0:e.config)?void 0:t.repeater)?{latitude:e.config.repeater.latitude,longitude:e.config.repeater.longitude,name:e.config.node_name||"Local Node"}:void 0},[e]),X=null==e?void 0:e.local_hash,Y=v.useMemo(()=>{const e=new Map;if(!(null==Z?void 0:Z.latitude)||!(null==Z?void 0:Z.longitude))return e;for(const[t,s]of Object.entries(V))s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude?e.set(t,ue(Z.latitude,Z.longitude,s.latitude,s.longitude)):e.set(t,null);return e},[V,Z]),{neighborHashSet:te,neighborSignalMap:se}=v.useMemo(()=>{const e=new Set,t=new Map;for(const s of l)e.add(s.hash),t.set(s.hash,{avgRssi:s.avgRssi,avgSnr:s.avgSnr});return{neighborHashSet:e,neighborSignalMap:t}},[l]),ae=v.useMemo(()=>{const e=k.toLowerCase().trim(),t="neighbor"===e||"neighbors"===e,s=S||t;return Object.fromEntries(Object.entries(V).filter(([a,n])=>{if(s&&!te.has(a))return!1;if(t)return!0;if(!e)return!0;const r=(n.node_name||n.name||"").toLowerCase(),l=a.slice(2,4).toLowerCase();return r.includes(e)||l.includes(e)||a.toLowerCase().includes(e)}))},[V,k,S,te]),re=v.useMemo(()=>Object.entries(ae).sort(([e,t],[s,a])=>{let n=0;switch(N){case"lastHeard":n=(t.last_seen||0)-(a.last_seen||0);break;case"distance":{const t=Y.get(e)??null,a=Y.get(s)??null;n=null===t&&null===a?0:null===t?1:null===a?-1:t-a;break}case"centrality":n=(r.get(e)||0)-(r.get(s)||0)}return"desc"===b?-n:n}),[ae,N,b,Y,r]),le=re.filter(([,e])=>e.latitude&&e.longitude&&0!==e.latitude&&0!==e.longitude).length,ce=v.useMemo(()=>new Set(n),[n]),ie=v.useCallback(e=>{N===e?w(e=>"desc"===e?"asc":"desc"):(y(e),w("desc"))},[N]),oe=v.useCallback(e=>{const t=V[e];(null==t?void 0:t.latitude)&&(null==t?void 0:t.longitude)&&0!==t.latitude&&0!==t.longitude&&$(e)},[V]),de=v.useCallback(()=>{$(null)},[]);return t.jsxs(W,{children:[t.jsx(q,{title:"Contacts",icon:t.jsx(B,{}),controls:t.jsxs("div",{className:"flex items-baseline gap-3 sm:gap-4",children:[t.jsxs("span",{className:"roster-title tabular-nums",children:[re.length," node",1!==re.length?"s":""]}),le>0&&t.jsxs("span",{className:"roster-title flex items-baseline gap-1.5 tabular-nums",children:[t.jsx(I,{className:"w-3.5 h-3.5 relative top-[2px]"}),le," with location"]})]})}),t.jsx("div",{className:"relative",children:t.jsx(ee,{neighbors:V,localNode:Z,localHash:X,onRemoveNode:a,selectedNodeHash:L,onNodeSelected:de,highlightedEdgeKey:R})}),t.jsx(ne,{maxPaths:10,highlightedEdge:R,onHighlightEdge:F}),t.jsxs("div",{className:"chart-container",children:[t.jsxs("div",{className:"chart-header",children:[t.jsxs("div",{className:"chart-title",children:[t.jsx(B,{className:"chart-title-icon"}),"Discovered Contacts"]}),t.jsxs("div",{className:"flex items-center gap-1.5 sm:gap-2",children:[te.size>0&&t.jsxs("button",{onClick:()=>H(!S),className:"flex items-center gap-1 px-1.5 sm:px-2.5 py-1.5 text-xs rounded-lg transition-colors "+(S?"bg-accent-success/20 text-accent-success border border-accent-success/30":"text-text-muted hover:text-text-secondary hover:bg-white/5 border border-transparent"),title:S?"Show all contacts":"Show only MeshCore neighbors (direct RF contact)",children:[t.jsx(p,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Neighbors"}),t.jsx("span",{className:"sm:hidden tabular-nums",children:te.size})]}),t.jsxs("div",{className:"relative",children:[t.jsx(Q,{className:"absolute left-2 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-text-muted"}),t.jsx("input",{type:"text",value:k,onChange:e=>C(e.target.value),placeholder:"Search...",className:"w-20 sm:w-28 lg:w-32 pl-6 sm:pl-7 pr-6 py-1.5 text-xs bg-white/5 border border-white/10 rounded-lg text-text-primary placeholder:text-text-muted focus:outline-none focus:border-accent-primary/50"}),k&&t.jsx("button",{onClick:()=>{C(""),"neighbor"!==k.toLowerCase().trim()&&"neighbors"!==k.toLowerCase().trim()||H(!1)},className:"absolute right-1.5 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-secondary p-0.5",children:t.jsx(g,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"flex items-center gap-0.5 sm:gap-1",children:[t.jsxs("button",{onClick:()=>ie("lastHeard"),className:"flex items-center gap-1 p-1.5 sm:px-2 sm:py-1.5 text-xs rounded-lg transition-colors "+("lastHeard"===N?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by last heard",children:[t.jsx(j,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Recent"}),"lastHeard"===N&&t.jsx(U,{className:"w-3 h-3 "+("asc"===b?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>ie("distance"),className:"flex items-center gap-1 p-1.5 sm:px-2 sm:py-1.5 text-xs rounded-lg transition-colors "+("distance"===N?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by distance",children:[t.jsx(J,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Distance"}),"distance"===N&&t.jsx(U,{className:"w-3 h-3 "+("asc"===b?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>ie("centrality"),className:"flex items-center gap-1 p-1.5 sm:px-2 sm:py-1.5 text-xs rounded-lg transition-colors "+("centrality"===N?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by network centrality",children:[t.jsx(_,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Centrality"}),"centrality"===N&&t.jsx(U,{className:"w-3 h-3 "+("asc"===b?"rotate-180":"")})]})]})]})]}),re.length>0?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"hidden sm:grid contacts-grid-header border-b border-border-subtle/50 px-3 py-2 text-[10px] uppercase tracking-wider text-text-muted",children:[t.jsx("div",{className:"contacts-col-node",children:"Node"}),t.jsx("div",{className:"contacts-col-signal text-right",children:"Signal"}),t.jsx("div",{className:"contacts-col-distance text-right",children:"Distance"}),t.jsx("div",{className:"contacts-col-centrality text-right",children:"Centrality"}),t.jsx("div",{className:"contacts-col-activity text-center",children:"Activity"}),t.jsx("div",{className:"contacts-col-seen text-right",children:"Last Seen"}),t.jsx("div",{className:"contacts-col-actions"})]}),t.jsx("div",{className:"divide-y divide-border-subtle/30",children:re.map(([e,s])=>{var a;const n=s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude,l=s.node_name||s.name||"Unknown",c=ce.has(e),o=te.has(e),d=Y.get(e),h=r.get(e)||0,x=o?se.get(e):void 0,m=o&&x,u=null==(a=s.contact_type)?void 0:a.toLowerCase(),p="room server"===u||"room_server"===u||"room"===u||"server"===u,g="companion"===u||"client"===u||"cli"===u,j=s.is_repeater||"repeater"===u||"rep"===u,v=o?"direct":"flood",N=o?"Direct RF contact (zero-hop neighbor)":"Flood routing (multi-hop via mesh)";return t.jsxs("div",{className:`contacts-grid-row ${c?"bg-amber-500/5 border-l-2 border-l-amber-400":""} ${n?"cursor-pointer hover:bg-white/[0.02]":""}`,onClick:()=>oe(e),children:[t.jsxs("div",{className:"contacts-col-node flex items-center gap-2 min-w-0",children:[m&&null!==(null==x?void 0:x.avgSnr)?t.jsx("div",{className:"w-2 h-2 rounded-full flex-shrink-0 self-center "+(b=x.avgSnr,void 0===b?"bg-[var(--signal-unknown)]":b>=5?"bg-[var(--signal-excellent)]":b>=0?"bg-[var(--signal-good)]":b>=-5?"bg-[var(--signal-fair)]":b>=-10?"bg-[var(--signal-poor)]":"bg-[var(--signal-critical)]")}):t.jsx("div",{className:"w-2 flex-shrink-0"}),t.jsx("div",{className:"roster-icon flex-shrink-0",title:N,children:p&&j?t.jsxs("div",{className:"relative w-5 h-5",children:[t.jsx(O,{className:"w-5 h-5 absolute inset-0 text-accent-secondary"}),t.jsx(z,{className:"w-2.5 h-2.5 absolute -bottom-0.5 -right-0.5 text-accent-primary"})]}):p?t.jsx(O,{className:"w-5 h-5 text-accent-secondary"}):g?t.jsx(D,{className:"w-5 h-5 text-text-muted"}):j?"direct"===v?t.jsx(K,{className:"w-5 h-5 text-accent-success"}):t.jsx(z,{className:"w-5 h-5 text-accent-tertiary"}):t.jsx(D,{className:"w-5 h-5 text-text-muted"})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsxs("div",{className:"flex items-center gap-1.5 overflow-hidden",children:[t.jsx("span",{className:"roster-title truncate",title:l,children:l}),o&&t.jsx("span",{className:"type-badge px-1.5 py-0.5 rounded flex-shrink-0",style:{backgroundColor:"rgba(113, 152, 114, 0.2)",color:"var(--accent-success)"},children:"NBR"}),c&&t.jsxs("span",{className:"type-badge px-1.5 py-0.5 rounded flex items-center gap-1 flex-shrink-0",style:{backgroundColor:"rgba(223, 188, 114, 0.2)",color:"var(--accent-secondary)"},children:[t.jsx(E,{className:"w-3 h-3"}),"HUB"]}),j&&t.jsx("span",{className:"pill-tag flex-shrink-0",children:"RPT"})]}),t.jsxs("div",{className:"flex items-center gap-1.5 mt-0.5",children:[t.jsx(A,{hash:e,size:"xs",prefixLength:8,suffixLength:6}),t.jsx(me,{hash:e})]})]})]}),t.jsxs("div",{className:"contacts-col-signal flex items-center justify-end gap-2",children:[m&&null!==(null==x?void 0:x.avgRssi)&&t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(M,{rssi:x.avgRssi,className:"w-3.5 h-3.5"}),t.jsx("span",{className:"type-data-xs tabular-nums text-text-muted",children:Math.round(x.avgRssi)})]}),m&&null!==(null==x?void 0:x.avgSnr)&&t.jsxs("span",{className:"type-data-xs tabular-nums text-text-muted",children:[x.avgSnr.toFixed(1)," dB"]})]}),t.jsx("div",{className:"contacts-col-distance flex items-center justify-end gap-1 text-text-muted",children:null!=d&&t.jsxs(t.Fragment,{children:[t.jsx(J,{className:"w-3 h-3"}),t.jsx("span",{className:"type-data-xs tabular-nums",children:(y=d,y<1e3?`${Math.round(y)}m`:`${(y/1e3).toFixed(1)}km`)})]})}),t.jsx("div",{className:"contacts-col-centrality flex items-center justify-end gap-1",children:h>0&&t.jsxs(t.Fragment,{children:[t.jsx(_,{className:"w-3 h-3 text-accent-secondary"}),t.jsxs("span",{className:"type-data-xs tabular-nums text-text-muted",children:[(100*h).toFixed(0),"%"]})]})}),t.jsx("div",{className:"contacts-col-activity flex items-center justify-center",children:t.jsx(xe,{nodeHash:e,width:48,height:16})}),t.jsx("div",{className:"contacts-col-seen flex items-center justify-end",children:t.jsx("span",{className:"type-data-xs tabular-nums text-text-primary whitespace-nowrap",children:s.last_seen?f(s.last_seen):"—"})}),t.jsx("div",{className:"contacts-col-actions flex items-center justify-end",children:t.jsx("button",{onClick:t=>{t.stopPropagation(),i({hash:e,name:l})},className:"p-1 sm:p-1.5 rounded-lg text-text-muted/50 hover:text-red-400 hover:bg-red-500/10 transition-colors",title:"Remove contact",children:t.jsx(P,{className:"w-3.5 h-3.5 sm:w-4 sm:h-4"})})})]},e);var y,b})})]}):t.jsxs("div",{className:"roster-empty",children:[t.jsx(B,{className:"roster-empty-icon"}),t.jsx("div",{className:"type-label text-text-secondary",children:"No Contacts Discovered"}),t.jsx("div",{className:"type-data-xs text-text-muted mt-1",children:"Contacts will appear here as they advertise on the mesh network."})]})]}),t.jsx(T,{isOpen:!!c,title:"Remove Contact",message:`Are you sure you would like to remove ${(null==c?void 0:c.name)||"this contact"}?`,confirmLabel:"Remove",cancelLabel:"Cancel",variant:"danger",onConfirm:()=>{c&&a(c.hash),i(null)},onCancel:()=>i(null)})]})}},Symbol.toStringTag,{value:"Module"}));export{pe as C,Z as G,xe as N,me as P}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ContactsMapMapLibre-mf58_i9D.js","assets/index-CnT6m9UL.js","assets/recharts-bmHCCfxU.js","assets/maplibre-gl-CFO9X1Ek.js","assets/index--XvAw-pH.css","assets/maplibre-gl-VNF-YDUx.js","assets/maplibre-gl-B1CfjdFi.css","assets/ConfirmModal-L-7rhSxP.js","assets/triangle-alert-BVWkhQDA.js","assets/loader-circle-CQxh52S4.js","assets/info-DSETn7DH.js","assets/useThemeColors-CMkWsRmX.js","assets/CollisionExplorerModal-Cdrfz88i.js","assets/leaflet-ClE6qLuu.js","assets/map-pin-ChtEo6bl.js","assets/CollisionExplorerModal-CIGW-MKW.css","assets/house-C8yJ0MKa.js","assets/refresh-cw-CLS7Qxt_.js","assets/trending-up-lRPwgdrm.js","assets/map-Ln3tKWJm.js","assets/external-link-BtJLfi91.js","assets/SignalIndicator-BG13oVT6.js","assets/zap-CaMlD59M.js","assets/activity-DTqQg6_M.js","assets/HashBadge-CfU2AT65.js","assets/PageLayout-B1Rz13MR.js","assets/users-3XLTrE24.js"])))=>i.map(i=>d[i]); +import{c as e,j as t,_ as s,F as a,E as n,G as r,H as l,I as c,y as i,J as o,k as d,K as h,M as x,N as m,h as u,R as p,X as g,C as j,O as f}from"./index-CnT6m9UL.js";import{b as v,d as N,h as y,T as b,f as w,e as k,L as C}from"./recharts-bmHCCfxU.js";import{a as M}from"./SignalIndicator-BG13oVT6.js";import{T as S}from"./triangle-alert-BVWkhQDA.js";import{T as H,Z as L,M as $}from"./zap-CaMlD59M.js";import{A as _}from"./activity-DTqQg6_M.js";import{T as R,N as E}from"./trending-up-lRPwgdrm.js";import{H as A}from"./HashBadge-CfU2AT65.js";import{T as P,C as T}from"./ConfirmModal-L-7rhSxP.js";import{C as F,M as O,S as z,a as D,A as K}from"./CollisionExplorerModal-Cdrfz88i.js";import{P as W,a as q}from"./PageLayout-B1Rz13MR.js";import{M as I}from"./map-pin-ChtEo6bl.js";import{U as B}from"./users-3XLTrE24.js";const U=e("arrow-up-down",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]),G=e("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),V=e("file-digit",[["path",{d:"M4 12V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2",key:"jrl274"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 16h2v6",key:"1bxocy"}],["path",{d:"M10 22h4",key:"ceow96"}],["rect",{x:"2",y:"16",width:"4",height:"6",rx:"2",key:"r45zd0"}]]),Z=e("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),J=e("ruler",[["path",{d:"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z",key:"icamh8"}],["path",{d:"m14.5 12.5 2-2",key:"inckbg"}],["path",{d:"m11.5 9.5 2-2",key:"fmmyf7"}],["path",{d:"m8.5 6.5 2-2",key:"vc6u1g"}],["path",{d:"m17.5 15.5 2-2",key:"wo5hmg"}]]),Q=e("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);class X extends v.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){var e;return this.state.hasError?t.jsx("div",{className:"map-container-16-9 glass-card flex items-center justify-center",role:"alert","aria-live":"assertive",children:t.jsxs("div",{className:"text-center text-white/50 p-4",children:[t.jsx("p",{className:"text-lg mb-2",children:"Map failed to load"}),t.jsx("p",{className:"text-sm text-white/30",children:(null==(e=this.state.error)?void 0:e.message)||"Unknown error"}),t.jsx("p",{className:"text-xs text-white/20 mt-2",children:"Try refreshing the page or check your browser's WebGL support."})]})}):this.props.children}}const Y=v.lazy(()=>s(()=>import("./ContactsMapMapLibre-mf58_i9D.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])));function ee({neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:c}){return t.jsx(X,{children:t.jsx(v.Suspense,{fallback:t.jsx("div",{className:"map-container-16-9 glass-card flex items-center justify-center",role:"status","aria-live":"polite","aria-label":"Loading map",children:t.jsxs("div",{className:"text-white/50 flex items-center gap-3",children:[t.jsx("div",{className:"w-5 h-5 border-2 border-accent-primary border-t-transparent rounded-full animate-spin","aria-hidden":"true"}),t.jsx("span",{children:"Loading map..."})]})}),children:t.jsx(Y,{neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:c})})})}function te(e){return e>=.7?"text-accent-success":e>=.5?"text-accent-secondary":e>=.3?"text-signal-poor":"text-accent-danger"}function se(e){return`${Math.round(100*e)}%`}const ae=v.memo(function({path:e,isHighlighted:s,onHighlight:a}){const n=function(e){return e>.2?{icon:t.jsx(R,{className:"w-3 h-3"}),color:"text-accent-success"}:e<-.2?{icon:t.jsx(H,{className:"w-3 h-3"}),color:"text-accent-danger"}:{icon:t.jsx($,{className:"w-3 h-3"}),color:"text-text-muted"}}(e.observationTrend),r=e.weakestLinkKey&&e.weakestLinkConfidence<.5;return t.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md transition-colors cursor-pointer "+(s?"bg-accent-primary/20 border border-accent-primary/40":"hover:bg-white/5"),onClick:()=>a(s?null:e.weakestLinkKey),children:[t.jsx("div",{className:"flex-shrink-0 w-12 text-center py-1 rounded-md "+(l=e.healthScore,l>=.7?"bg-accent-success/10":l>=.5?"bg-accent-secondary/10":l>=.3?"bg-signal-poor/10":"bg-accent-danger/10"),children:t.jsx("span",{className:`text-xs font-semibold tabular-nums ${te(e.healthScore)}`,children:se(e.healthScore)})}),t.jsx("div",{className:"flex-1 flex items-center gap-0.5 overflow-x-auto min-w-0",children:e.hops.map((s,a)=>{var n;return t.jsxs("span",{className:"flex items-center",children:[t.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded "+(r&&(null==(n=e.weakestLinkKey)?void 0:n.includes(s))?"bg-accent-danger/20 text-accent-danger":"bg-white/10 text-text-secondary"),children:s}),al.slice(0,e),[l,e]),d=v.useMemo(()=>0===l.length?null:{avgHealth:l.reduce((e,t)=>e+t.healthScore,0)/l.length,declining:l.filter(e=>e.observationTrend<-.2).length,weakLinks:l.filter(e=>e.weakestLinkConfidence<.5).length},[l]),h=e=>{null==s||s(e)};return 0===l.length?null:t.jsxs("div",{className:"chart-container",children:[t.jsxs("button",{onClick:()=>i(!c),className:"w-full chart-header hover:bg-white/5 transition-colors rounded-t-lg cursor-pointer",children:[t.jsxs("div",{className:"chart-title",children:[t.jsx(Z,{className:"chart-title-icon"}),"Path Health",t.jsxs("span",{className:"ml-2 text-[10px] font-normal text-text-muted",children:["(",l.length," paths)"]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[d&&t.jsxs("div",{className:"flex items-center gap-3 text-[10px]",children:[t.jsxs("span",{className:`tabular-nums ${te(d.avgHealth)}`,children:["Avg: ",se(d.avgHealth)]}),d.weakLinks>0&&t.jsxs("span",{className:"text-accent-danger flex items-center gap-1",children:[t.jsx(S,{className:"w-3 h-3"}),d.weakLinks," weak"]}),d.declining>0&&t.jsxs("span",{className:"text-signal-poor flex items-center gap-1",children:[t.jsx(H,{className:"w-3 h-3"}),d.declining," declining"]})]}),c?t.jsx(G,{className:"w-4 h-4 text-text-muted"}):t.jsx(n,{className:"w-4 h-4 text-text-muted"})]})]}),c&&t.jsxs("div",{className:"p-3 pt-0 space-y-1",children:[t.jsxs("div",{className:"flex items-center gap-4 text-[10px] text-text-muted pb-2 border-b border-white/5",children:[t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-success"})," Healthy (≥70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-secondary"})," Fair (50-70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-signal-poor"})," Weak (30-50%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-danger"})," Critical (<30%)"]})]}),t.jsx("div",{className:"space-y-1 max-h-64 overflow-y-auto",children:o.map(e=>t.jsx(ae,{path:e,isHighlighted:r===e.weakestLinkKey,onHighlight:h},e.pathKey))}),l.length>e&&t.jsxs("div",{className:"text-center text-[10px] text-text-muted pt-2",children:["Showing top ",e," of ",l.length," paths"]})]})]})}),re="var(--signal-critical)",le="var(--signal-poor)",ce="var(--signal-fair)",ie="var(--signal-good)",oe="var(--signal-excellent)",de="var(--text-muted)";function he({active:e,payload:s}){if(!e||!s||!s.length)return null;const a=s[0].payload,n=new Date(a.timestamp),r=`${(n.getMonth()+1).toString().padStart(2,"0")}/${n.getDate().toString().padStart(2,"0")}`;return t.jsxs("div",{className:"bg-tooltip-bg border border-border-subtle rounded px-1.5 py-0.5 text-[10px] shadow-xl",children:[t.jsx("span",{className:"text-text-muted",children:r}),t.jsx("span",{className:"ml-1.5 font-semibold tabular-nums",children:a.count})]})}const xe=v.memo(function({nodeHash:e,width:s=60,height:a=20,color:n,showArea:c=!0,showTooltip:i=!1,className:o=""}){const d=r(e),h=l(),x=n??(d.length>0?function(e){if(0===e.length)return re;const t=e.slice(-4),s=t.reduce((e,t)=>e+t.count,0),a=s/t.length,n=e.reduce((e,t)=>e+t.count,0)/e.length;if(0===s)return re;if(n>0){const e=a/n;return e>=1.2?oe:e>=.8?ie:e>=.4?ce:e>=.1?le:re}return s>=10?oe:s>=5?ie:s>=2?ce:s>=1?le:re}(d):de),m={width:s,height:a};if(d.length<2){const e="number"==typeof s?s:60,n=h?de:re;return t.jsx("div",{className:`flex items-center justify-center ${o}`,style:{...m,color:n},children:t.jsx("svg",{width:"100%",height:a,viewBox:`0 0 ${e} ${a}`,preserveAspectRatio:"none",children:t.jsx("line",{x1:4,y1:a/2,x2:e-4,y2:a/2,stroke:"currentColor",strokeWidth:1.5,strokeDasharray:"3,2",className:h?"animate-pulse":""})})})}const u=`sparkline-gradient-${e.slice(-6)}`;return t.jsx("div",{className:o,style:m,children:t.jsx(N,{width:"100%",height:"100%",children:c?t.jsxs(y,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[t.jsx("defs",{children:t.jsxs("linearGradient",{id:u,x1:"0",y1:"0",x2:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:x,stopOpacity:.35}),t.jsx("stop",{offset:"100%",stopColor:x,stopOpacity:.05})]})}),i&&t.jsx(b,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(w,{type:"monotone",dataKey:"count",stroke:"none",fill:`url(#${u})`,isAnimationActive:!1}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:x,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]}):t.jsxs(C,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[i&&t.jsx(b,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:x,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]})})})}),me=v.memo(function({hash:e,className:s="",size:a="sm"}){const n=c(),[r,l]=v.useState(!1),o=v.useMemo(()=>i(e),[e]),d=v.useMemo(()=>o?n.find(e=>e.prefix===o)??null:null,[o,n]),h=v.useCallback(e=>{e.preventDefault(),e.stopPropagation(),l(!0)},[]),x=v.useCallback(()=>{l(!1)},[]);if(!d)return null;const m="sm"===a?"w-3.5 h-3.5":"w-4 h-4";return t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",onClick:h,className:`inline-flex items-center justify-center p-0.5 rounded text-signal-fair hover:text-accent-secondary hover:bg-signal-fair/10 focus:outline-none focus:ring-2 focus:ring-signal-fair/50 transition-colors cursor-pointer touch-manipulation ${s}`,title:`Prefix conflict: ${d.candidateCount} nodes share prefix "${o}"`,"aria-label":`View prefix conflict for ${o}`,children:t.jsx(V,{className:m})}),t.jsx(F,{isOpen:r,prefix:d.prefix,candidateHashes:d.candidateHashes,onClose:x})]})});function ue(e,t,s,a){const n=(s-e)*Math.PI/180,r=(a-t)*Math.PI/180,l=Math.sin(n/2)*Math.sin(n/2)+Math.cos(e*Math.PI/180)*Math.cos(s*Math.PI/180)*Math.sin(r/2)*Math.sin(r/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*6371e3}const pe=Object.freeze(Object.defineProperty({__proto__:null,default:function(){const{stats:e}=o(),s=d(),a=h(),n=x(),r=m(),l=u(),[c,i]=v.useState(null),[N,y]=v.useState("lastHeard"),[b,w]=v.useState("desc"),[k,C]=v.useState(""),[S,H]=v.useState(!1),[L,$]=v.useState(null),[R,F]=v.useState(null),G=v.useMemo(()=>(null==e?void 0:e.neighbors)??{},[null==e?void 0:e.neighbors]),V=v.useMemo(()=>Object.fromEntries(Object.entries(G).filter(([e])=>!s.has(e))),[G,s]),Z=v.useMemo(()=>{var t;return(null==(t=null==e?void 0:e.config)?void 0:t.repeater)?{latitude:e.config.repeater.latitude,longitude:e.config.repeater.longitude,name:e.config.node_name||"Local Node"}:void 0},[e]),X=null==e?void 0:e.local_hash,Y=v.useMemo(()=>{const e=new Map;if(!(null==Z?void 0:Z.latitude)||!(null==Z?void 0:Z.longitude))return e;for(const[t,s]of Object.entries(V))s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude?e.set(t,ue(Z.latitude,Z.longitude,s.latitude,s.longitude)):e.set(t,null);return e},[V,Z]),{neighborHashSet:te,neighborSignalMap:se}=v.useMemo(()=>{const e=new Set,t=new Map;for(const s of l)e.add(s.hash),t.set(s.hash,{avgRssi:s.avgRssi,avgSnr:s.avgSnr});return{neighborHashSet:e,neighborSignalMap:t}},[l]),ae=v.useMemo(()=>{const e=k.toLowerCase().trim(),t="neighbor"===e||"neighbors"===e,s=S||t;return Object.fromEntries(Object.entries(V).filter(([a,n])=>{if(s&&!te.has(a))return!1;if(t)return!0;if(!e)return!0;const r=(n.node_name||n.name||"").toLowerCase(),l=a.slice(2,4).toLowerCase();return r.includes(e)||l.includes(e)||a.toLowerCase().includes(e)}))},[V,k,S,te]),re=v.useMemo(()=>Object.entries(ae).sort(([e,t],[s,a])=>{let n=0;switch(N){case"lastHeard":n=(t.last_seen||0)-(a.last_seen||0);break;case"distance":{const t=Y.get(e)??null,a=Y.get(s)??null;n=null===t&&null===a?0:null===t?1:null===a?-1:t-a;break}case"centrality":n=(r.get(e)||0)-(r.get(s)||0)}return"desc"===b?-n:n}),[ae,N,b,Y,r]),le=re.filter(([,e])=>e.latitude&&e.longitude&&0!==e.latitude&&0!==e.longitude).length,ce=v.useMemo(()=>new Set(n),[n]),ie=v.useCallback(e=>{N===e?w(e=>"desc"===e?"asc":"desc"):(y(e),w("desc"))},[N]),oe=v.useCallback(e=>{const t=V[e];(null==t?void 0:t.latitude)&&(null==t?void 0:t.longitude)&&0!==t.latitude&&0!==t.longitude&&$(e)},[V]),de=v.useCallback(()=>{$(null)},[]);return t.jsxs(W,{children:[t.jsx(q,{title:"Contacts",icon:t.jsx(B,{}),controls:t.jsxs("div",{className:"flex items-baseline gap-3 sm:gap-4",children:[t.jsxs("span",{className:"roster-title tabular-nums",children:[re.length," node",1!==re.length?"s":""]}),le>0&&t.jsxs("span",{className:"roster-title flex items-baseline gap-1.5 tabular-nums",children:[t.jsx(I,{className:"w-3.5 h-3.5 relative top-[2px]"}),le," with location"]})]})}),t.jsx("div",{className:"relative",children:t.jsx(ee,{neighbors:V,localNode:Z,localHash:X,onRemoveNode:a,selectedNodeHash:L,onNodeSelected:de,highlightedEdgeKey:R})}),t.jsx(ne,{maxPaths:10,highlightedEdge:R,onHighlightEdge:F}),t.jsxs("div",{className:"chart-container",children:[t.jsxs("div",{className:"chart-header",children:[t.jsxs("div",{className:"chart-title",children:[t.jsx(B,{className:"chart-title-icon"}),"Discovered Contacts"]}),t.jsxs("div",{className:"flex items-center gap-1.5 sm:gap-2",children:[te.size>0&&t.jsxs("button",{onClick:()=>H(!S),className:"flex items-center gap-1 px-1.5 sm:px-2.5 py-1.5 text-xs rounded-lg transition-colors "+(S?"bg-accent-success/20 text-accent-success border border-accent-success/30":"text-text-muted hover:text-text-secondary hover:bg-white/5 border border-transparent"),title:S?"Show all contacts":"Show only MeshCore neighbors (direct RF contact)",children:[t.jsx(p,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Neighbors"}),t.jsx("span",{className:"sm:hidden tabular-nums",children:te.size})]}),t.jsxs("div",{className:"relative",children:[t.jsx(Q,{className:"absolute left-2 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-text-muted"}),t.jsx("input",{type:"text",value:k,onChange:e=>C(e.target.value),placeholder:"Search...",className:"w-20 sm:w-28 lg:w-32 pl-6 sm:pl-7 pr-6 py-1.5 text-xs bg-white/5 border border-white/10 rounded-lg text-text-primary placeholder:text-text-muted focus:outline-none focus:border-accent-primary/50"}),k&&t.jsx("button",{onClick:()=>{C(""),"neighbor"!==k.toLowerCase().trim()&&"neighbors"!==k.toLowerCase().trim()||H(!1)},className:"absolute right-1.5 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-secondary p-0.5",children:t.jsx(g,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"flex items-center gap-0.5 sm:gap-1",children:[t.jsxs("button",{onClick:()=>ie("lastHeard"),className:"flex items-center gap-1 p-1.5 sm:px-2 sm:py-1.5 text-xs rounded-lg transition-colors "+("lastHeard"===N?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by last heard",children:[t.jsx(j,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Recent"}),"lastHeard"===N&&t.jsx(U,{className:"w-3 h-3 "+("asc"===b?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>ie("distance"),className:"flex items-center gap-1 p-1.5 sm:px-2 sm:py-1.5 text-xs rounded-lg transition-colors "+("distance"===N?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by distance",children:[t.jsx(J,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Distance"}),"distance"===N&&t.jsx(U,{className:"w-3 h-3 "+("asc"===b?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>ie("centrality"),className:"flex items-center gap-1 p-1.5 sm:px-2 sm:py-1.5 text-xs rounded-lg transition-colors "+("centrality"===N?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by network centrality",children:[t.jsx(_,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Centrality"}),"centrality"===N&&t.jsx(U,{className:"w-3 h-3 "+("asc"===b?"rotate-180":"")})]})]})]})]}),re.length>0?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"hidden sm:grid contacts-grid-header border-b border-border-subtle/50 px-3 py-2 text-[10px] uppercase tracking-wider text-text-muted",children:[t.jsx("div",{className:"contacts-col-node",children:"Node"}),t.jsx("div",{className:"contacts-col-signal text-right",children:"Signal"}),t.jsx("div",{className:"contacts-col-distance text-right",children:"Distance"}),t.jsx("div",{className:"contacts-col-centrality text-right",children:"Centrality"}),t.jsx("div",{className:"contacts-col-activity text-center",children:"Activity"}),t.jsx("div",{className:"contacts-col-seen text-right",children:"Last Seen"}),t.jsx("div",{className:"contacts-col-actions"})]}),t.jsx("div",{className:"divide-y divide-border-subtle/30",children:re.map(([e,s])=>{var a;const n=s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude,l=s.node_name||s.name||"Unknown",c=ce.has(e),o=te.has(e),d=Y.get(e),h=r.get(e)||0,x=o?se.get(e):void 0,m=o&&x,u=null==(a=s.contact_type)?void 0:a.toLowerCase(),p="room server"===u||"room_server"===u||"room"===u||"server"===u,g="companion"===u||"client"===u||"cli"===u,j=s.is_repeater||"repeater"===u||"rep"===u,v=o?"direct":"flood",N=o?"Direct RF contact (zero-hop neighbor)":"Flood routing (multi-hop via mesh)";return t.jsxs("div",{className:`contacts-grid-row ${c?"bg-amber-500/5 border-l-2 border-l-amber-400":""} ${n?"cursor-pointer hover:bg-white/[0.02]":""}`,onClick:()=>oe(e),children:[t.jsxs("div",{className:"contacts-col-node flex items-center gap-2 min-w-0",children:[m&&null!==(null==x?void 0:x.avgSnr)?t.jsx("div",{className:"w-2 h-2 rounded-full flex-shrink-0 self-center "+(b=x.avgSnr,void 0===b?"bg-[var(--signal-unknown)]":b>=5?"bg-[var(--signal-excellent)]":b>=0?"bg-[var(--signal-good)]":b>=-5?"bg-[var(--signal-fair)]":b>=-10?"bg-[var(--signal-poor)]":"bg-[var(--signal-critical)]")}):t.jsx("div",{className:"w-2 flex-shrink-0"}),t.jsx("div",{className:"roster-icon flex-shrink-0",title:N,children:p&&j?t.jsxs("div",{className:"relative w-5 h-5",children:[t.jsx(O,{className:"w-5 h-5 absolute inset-0 text-accent-secondary"}),t.jsx(z,{className:"w-2.5 h-2.5 absolute -bottom-0.5 -right-0.5 text-accent-primary"})]}):p?t.jsx(O,{className:"w-5 h-5 text-accent-secondary"}):g?t.jsx(D,{className:"w-5 h-5 text-text-muted"}):j?"direct"===v?t.jsx(K,{className:"w-5 h-5 text-accent-success"}):t.jsx(z,{className:"w-5 h-5 text-accent-tertiary"}):t.jsx(D,{className:"w-5 h-5 text-text-muted"})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsxs("div",{className:"flex items-center gap-1.5 overflow-hidden",children:[t.jsx("span",{className:"roster-title truncate",title:l,children:l}),o&&t.jsx("span",{className:"type-badge px-1.5 py-0.5 rounded flex-shrink-0",style:{backgroundColor:"rgba(113, 152, 114, 0.2)",color:"var(--accent-success)"},children:"NBR"}),c&&t.jsxs("span",{className:"type-badge px-1.5 py-0.5 rounded flex items-center gap-1 flex-shrink-0",style:{backgroundColor:"rgba(223, 188, 114, 0.2)",color:"var(--accent-secondary)"},children:[t.jsx(E,{className:"w-3 h-3"}),"HUB"]}),j&&t.jsx("span",{className:"pill-tag flex-shrink-0",children:"RPT"})]}),t.jsxs("div",{className:"flex items-center gap-1.5 mt-0.5",children:[t.jsx(A,{hash:e,size:"xs",prefixLength:8,suffixLength:6}),t.jsx(me,{hash:e})]})]})]}),t.jsxs("div",{className:"contacts-col-signal flex items-center justify-end gap-2",children:[m&&null!==(null==x?void 0:x.avgRssi)&&t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(M,{rssi:x.avgRssi,className:"w-3.5 h-3.5"}),t.jsx("span",{className:"type-data-xs tabular-nums text-text-muted",children:Math.round(x.avgRssi)})]}),m&&null!==(null==x?void 0:x.avgSnr)&&t.jsxs("span",{className:"type-data-xs tabular-nums text-text-muted",children:[x.avgSnr.toFixed(1)," dB"]})]}),t.jsx("div",{className:"contacts-col-distance flex items-center justify-end gap-1 text-text-muted",children:null!=d&&t.jsxs(t.Fragment,{children:[t.jsx(J,{className:"w-3 h-3"}),t.jsx("span",{className:"type-data-xs tabular-nums",children:(y=d,y<1e3?`${Math.round(y)}m`:`${(y/1e3).toFixed(1)}km`)})]})}),t.jsx("div",{className:"contacts-col-centrality flex items-center justify-end gap-1",children:h>0&&t.jsxs(t.Fragment,{children:[t.jsx(_,{className:"w-3 h-3 text-accent-secondary"}),t.jsxs("span",{className:"type-data-xs tabular-nums text-text-muted",children:[(100*h).toFixed(0),"%"]})]})}),t.jsx("div",{className:"contacts-col-activity flex items-center justify-center",children:t.jsx(xe,{nodeHash:e,width:48,height:16})}),t.jsx("div",{className:"contacts-col-seen flex items-center justify-end",children:t.jsx("span",{className:"type-data-xs tabular-nums text-text-primary whitespace-nowrap",children:s.last_seen?f(s.last_seen):"—"})}),t.jsx("div",{className:"contacts-col-actions flex items-center justify-end",children:t.jsx("button",{onClick:t=>{t.stopPropagation(),i({hash:e,name:l})},className:"p-1 sm:p-1.5 rounded-lg text-text-muted/50 hover:text-red-400 hover:bg-red-500/10 transition-colors",title:"Remove contact",children:t.jsx(P,{className:"w-3.5 h-3.5 sm:w-4 sm:h-4"})})})]},e);var y,b})})]}):t.jsxs("div",{className:"roster-empty",children:[t.jsx(B,{className:"roster-empty-icon"}),t.jsx("div",{className:"type-label text-text-secondary",children:"No Contacts Discovered"}),t.jsx("div",{className:"type-data-xs text-text-muted mt-1",children:"Contacts will appear here as they advertise on the mesh network."})]})]}),t.jsx(T,{isOpen:!!c,title:"Remove Contact",message:`Are you sure you would like to remove ${(null==c?void 0:c.name)||"this contact"}?`,confirmLabel:"Remove",cancelLabel:"Cancel",variant:"danger",onConfirm:()=>{c&&a(c.hash),i(null)},onCancel:()=>i(null)})]})}},Symbol.toStringTag,{value:"Module"}));export{pe as C,Z as G,xe as N,me as P}; diff --git a/frontend/dist/assets/ContactsMapMapLibre-Dn2coX3j.js b/frontend/dist/assets/ContactsMapMapLibre-mf58_i9D.js similarity index 99% rename from frontend/dist/assets/ContactsMapMapLibre-Dn2coX3j.js rename to frontend/dist/assets/ContactsMapMapLibre-mf58_i9D.js index c6b43600..bb2e187f 100644 --- a/frontend/dist/assets/ContactsMapMapLibre-Dn2coX3j.js +++ b/frontend/dist/assets/ContactsMapMapLibre-mf58_i9D.js @@ -1 +1 @@ -var e,t,n=Object.defineProperty,r=(e,t,r)=>((e,t,r)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);import{c as i,j as s,O as o,a7 as a,X as A,_ as l,aw as c,ax as u,h,ay as d}from"./index-u-aEBJEv.js";import{b as f,g as p,c as g,r as m}from"./recharts-bmHCCfxU.js";import{u as _,a as b,P as v,S as y,L as w,M as x,N as E,b as T}from"./maplibre-gl-Bo6KJfqq.js";import{T as S,C}from"./ConfirmModal-Dqq3f6Pz.js";import{a as k,C as R}from"./triangle-alert-mjaXzP1s.js";import{G as P,P as I,N as M}from"./Contacts-mxXbTbA9.js";import{L}from"./loader-circle-S02pN6Pc.js";import{I as N}from"./info-DB0wMPyN.js";import{d as B,g as D}from"./useThemeColors-CMkWsRmX.js";import{M as O}from"./CollisionExplorerModal-DpehaIf1.js";import{H as F}from"./house-CH6EBns-.js";import{R as U}from"./refresh-cw-CwCmA6yx.js";import{M as j}from"./map-pin-Dxo4grF0.js";import{N as G}from"./trending-up-Bh7q2eR0.js";import{M as z}from"./map-Cv9tMAUH.js";import{E as V}from"./external-link-BjkfQ8qu.js";import{g as W}from"./maplibre-gl-CFO9X1Ek.js";import"./SignalIndicator-fZ2fPuZN.js";import"./zap-hdBg1E3g.js";import"./activity-BEkQtz77.js";import"./HashBadge-DD7AM9Wo.js";import"./PageLayout-eQKINMu6.js";import"./users-mNRSAj9B.js";import"./leaflet-ClE6qLuu.js";const H=i("car",[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]]),$=i("chart-no-axes-column",[["path",{d:"M5 21v-6",key:"1hz6c0"}],["path",{d:"M12 21V3",key:"1lcnhd"}],["path",{d:"M19 21V9",key:"unv183"}]]),X=i("chevrons-left-right-ellipsis",[["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"m17 7 5 5-5 5",key:"1xlxn0"}],["path",{d:"m7 7-5 5 5 5",key:"19njba"}],["path",{d:"M8 12h.01",key:"czm47f"}]]),Q=i("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]),Y=i("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]),q=i("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),K=i("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),Z=i("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),J=i("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]),ee=i("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]),te=i("waypoints",[["circle",{cx:"12",cy:"4.5",r:"2.5",key:"r5ysbb"}],["path",{d:"m10.2 6.3-3.9 3.9",key:"1nzqf6"}],["circle",{cx:"4.5",cy:"12",r:"2.5",key:"jydg6v"}],["path",{d:"M7 12h10",key:"b7w52i"}],["circle",{cx:"19.5",cy:"12",r:"2.5",key:"1piiel"}],["path",{d:"m13.8 17.7 3.9-3.9",key:"1wyg1y"}],["circle",{cx:"12",cy:"19.5",r:"2.5",key:"13o1pw"}]]);function ne(e,t){const n=Math.max(5,Math.min(e,300)),r=Math.log(5),i=Math.log(300);return 1+(Math.log(n)-r)/(i-r)*5}const re="#4338CA";function ie({label:e,icon:t,status:n,detail:r}){return s.jsxs("div",{className:g("flex items-center gap-3 py-3 px-4 rounded-xl transition-all duration-300","active"===n&&"bg-[#4338CA]/10","complete"===n&&"bg-accent-success/10","pending"===n&&"opacity-40"),children:[s.jsx("div",{className:g("w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0 transition-all duration-300","active"===n&&"bg-[#4338CA]/20","complete"===n&&"bg-accent-success/20","pending"===n&&"bg-white/5"),children:"complete"===n?s.jsx(k,{className:"w-4 h-4 text-accent-success"}):"active"===n?s.jsx(L,{className:"w-4 h-4 animate-spin",style:{color:re}}):s.jsx("span",{className:"text-text-muted",children:t})}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("div",{className:g("text-sm font-medium transition-colors","active"===n&&"text-[#4338CA]","complete"===n&&"text-accent-success","pending"===n&&"text-text-muted"),children:e}),r&&"pending"!==n&&s.jsx("div",{className:"text-xs text-text-muted mt-0.5 truncate",children:r})]})]})}const se=f.memo(function({isOpen:e,currentStep:t,packetCount:n,onClose:r}){if(f.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&r&&r()};window.addEventListener("keydown",t);const n=document.body.style.overflow,i=document.body.style.position,s=document.body.style.width,o=document.body.style.top,a=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${a}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=n,document.body.style.position=i,document.body.style.width=s,document.body.style.top=o,window.scrollTo(0,a)}},[e,r]),!e)return null;const i="complete"===t,o=e=>{const n=["fetching","analyzing","building","complete"],r=n.indexOf(t),i=n.indexOf(e);return i0?`${n.toLocaleString()} packets`:"Loading database..."}),s.jsx(ie,{label:"Analyzing Database",icon:s.jsx(Y,{className:"w-4 h-4"}),status:o("analyzing"),detail:"Processing packet paths"}),s.jsx(ie,{label:"Building Topology",icon:s.jsx(P,{className:"w-4 h-4"}),status:o("building"),detail:"Computing mesh edges"})]}),s.jsx("p",{className:"text-xs text-text-muted text-center mt-5",children:"This may take a few seconds..."})]})})]}),document.body)}),oe="#4B5563",ae="#6B7280",Ae="#374151",le="#5EEAD4",ce="#6366F1",ue="#9CA3AF",he="#6B7280",de="#FBBF24",fe=2e3;function pe({text:e}){return s.jsxs("span",{className:"group relative cursor-help",children:[s.jsx(N,{className:"w-3 h-3 text-text-muted"}),s.jsx("div",{className:"absolute bottom-full left-0 mb-1 hidden group-hover:block w-44 p-2 text-[10px] leading-tight rounded-lg z-10",style:{background:"rgba(20, 20, 22, 0.98)",border:"1px solid rgba(140, 160, 200, 0.3)"},children:e})]})}function ge(e){const t=new Date(1e3*e);return`${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getDate().toString().padStart(2,"0")}`}function me({hash:e,hashPrefix:t,name:n,isHub:r,isZeroHop:i,isMobile:a,isRoomServer:A,isStale:l,lastSeenTimestamp:c,centrality:u,affinity:h,meanSnr:d,meanRssi:p,neighbor:g,onRemove:m,txDelayRec:_}){const[b,v]=f.useState(!1),y=i?"Direct":(null==h?void 0:h.typicalHopPosition)?`${h.typicalHopPosition}-hop`:null,w=[{label:"Packets",value:(null==h?void 0:h.frequency)||0},{label:"Adverts",value:g.advert_count||0}];i&&void 0!==d&&w.push({label:"SNR",value:`${d.toFixed(1)} dB`}),i&&void 0!==p&&w.push({label:"RSSI",value:`${Math.round(p)} dBm`});const x=_&&!_.insufficientData,E={hub:{bg:"bg-amber-500/20",text:"text-amber-400",title:"Hub: High-connectivity node (4+ neighbors) that bridges many paths"},backbone:{bg:"bg-purple-500/20",text:"text-purple-400",title:"Backbone: Critical relay with 4+ neighbors and high traffic"},relay:{bg:"bg-cyan-500/20",text:"text-cyan-400",title:"Relay: Standard forwarding node with symmetric traffic"},edge:{bg:"bg-gray-500/20",text:"text-gray-400",title:"Edge: Peripheral node with few connections"}},T={high:{bg:"bg-green-500/20",text:"text-green-400",title:"1000+ packets observed"},medium:{bg:"bg-amber-500/20",text:"text-amber-400",title:"500-999 packets observed"},low:{bg:"bg-red-500/20",text:"text-red-400",title:"100-499 packets observed"},insufficient:{bg:"bg-gray-500/20",text:"text-gray-400",title:"Insufficient data for analysis"}};return s.jsxs("div",{className:"w-[220px] pr-3",children:[s.jsx("div",{className:"text-[14px] font-semibold text-text-primary leading-snug truncate mb-0.5",children:n}),s.jsxs("div",{className:"flex items-center gap-1 flex-wrap mb-1.5",children:[s.jsx("code",{className:"font-mono text-[10px] text-text-muted/70 bg-white/5 px-1 py-px rounded",children:t}),s.jsx("button",{onClick:()=>{navigator.clipboard.writeText(e),v(!0),setTimeout(()=>v(!1),1500)},className:"p-0.5 hover:bg-white/10 rounded transition-colors",title:"Copy full hash",children:b?s.jsx(k,{className:"w-2.5 h-2.5 text-accent-success"}):s.jsx(R,{className:"w-2.5 h-2.5 text-text-muted/50"})}),s.jsx(I,{hash:e,size:"sm"}),r&&s.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded",style:{backgroundColor:"#FBBF24",color:"#000"},children:"Hub"}),y&&s.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded",style:{backgroundColor:i?"#FBBF24":"rgba(255,255,255,0.08)",color:i?"#000":"rgba(255,255,255,0.5)"},children:y}),a&&s.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded bg-orange-500/25 text-orange-300",children:"Mobile"}),g.is_repeater&&s.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded bg-cyan-500/20 text-cyan-400",children:"Rptr"}),A&&s.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded bg-amber-500/25 text-amber-400",children:"Room"}),l&&c&&s.jsxs("span",{className:"px-1 py-px text-[8px] font-medium rounded bg-gray-500/30 text-gray-300",title:"Neighbor not heard in 7+ days",children:["Idle ",ge(c)]})]}),s.jsxs("div",{className:"text-[10px] text-text-muted/60 mb-2 leading-tight",children:[s.jsx("span",{children:o(g.last_seen)}),(null==h?void 0:h.distanceMeters)&&s.jsxs("span",{className:"font-medium text-text-muted/80",children:[" · ",(C=h.distanceMeters,null===C?"—":C<1e3?`${Math.round(C)}m`:`${(C/1e3).toFixed(1)}km`)]}),g.latitude&&g.longitude&&0!==g.latitude&&0!==g.longitude&&s.jsxs("span",{className:"font-mono text-[9px]",children:[" · ",g.latitude.toFixed(4),", ",g.longitude.toFixed(4)]})]}),s.jsx("div",{className:"mb-2",children:s.jsx(M,{nodeHash:e,width:"100%",height:28,showArea:!0,showTooltip:!0})}),s.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-0.5 text-[11px] mb-2",children:[w.map((e,t)=>s.jsxs("div",{className:"flex justify-between",children:[s.jsx("span",{className:"text-text-muted/50",children:e.label}),s.jsx("span",{className:"font-semibold tabular-nums "+("highlight"in e&&e.highlight?"text-amber-400":""),children:e.value})]},t)),x&&_.networkRole&&s.jsx(s.Fragment,{children:s.jsxs("div",{className:"flex items-center justify-between col-span-2 mt-1 pt-1 border-t border-white/5",children:[s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx("span",{className:"text-text-muted/50",children:"Role"}),s.jsx("span",{className:`px-1.5 py-px text-[8px] font-bold uppercase rounded ${E[_.networkRole].bg} ${E[_.networkRole].text}`,title:E[_.networkRole].title,children:_.networkRole})]}),_.dataConfidence&&s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx("span",{className:"text-text-muted/50",children:"Data"}),s.jsx("span",{className:`px-1.5 py-px text-[8px] font-bold uppercase rounded ${T[_.dataConfidence].bg} ${T[_.dataConfidence].text}`,title:T[_.dataConfidence].title,children:_.dataConfidence})]})]})})]}),(x||m)&&s.jsxs("div",{className:"pt-1.5 border-t border-white/5",children:[x&&s.jsxs("div",{className:"flex items-center gap-2 text-[10px]",children:[s.jsx("span",{className:"text-text-muted/50",children:"TX Delay"}),s.jsxs("span",{className:"font-semibold tabular-nums text-amber-400",children:["×",(_.floodFactor??_.txDelayFactor).toFixed(1)]}),s.jsx("span",{className:"text-text-muted/30",children:"flood"}),s.jsxs("span",{className:"font-semibold tabular-nums text-amber-400",children:["×",(_.directFactor??_.directTxDelayFactor).toFixed(1)]}),s.jsx("span",{className:"text-text-muted/30",children:"direct"})]}),m&&s.jsx("div",{className:"flex justify-end "+(x?"mt-1.5":""),children:s.jsx("button",{onClick:m,className:"flex items-center gap-0.5 p-1 text-[10px] text-text-muted/30 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors",title:"Remove from contacts",children:s.jsx(S,{className:"w-3 h-3"})})})]})]});var C}function _e({showTopology:e,validatedPolylineCount:t,filteredNeighborCount:n,hasLocalNode:r,meshTopology:i,zeroHopNeighbors:o,neighborsWithLocation:a}){const A=B();return s.jsxs("div",{className:"map-control-glass text-xs",style:{padding:"0.625rem"},children:[s.jsxs("div",{className:"text-text-secondary font-medium mb-1.5 flex items-center gap-1",children:["Nodes",s.jsx(pe,{text:"Node type shown by shape. Yellow = direct RF neighbor."})]}),s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",background:"transparent",border:`4px solid ${A.nodeColor}`,boxSizing:"border-box"}}),s.jsx("span",{className:"text-text-muted",children:"Node"}),s.jsx(pe,{text:"Standard mesh node. Can be a repeater, client, or companion device."})]}),s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",backgroundColor:A.hubColor}}),s.jsx("span",{className:"text-text-muted",children:"Hub"}),s.jsx(pe,{text:"Network hub (≥10% of last-hop traffic). Hubs are central to mesh traffic flow."})]}),(l=a,l.some(([,e])=>{var t;const n=null==(t=e.contact_type)?void 0:t.toLowerCase();return"room server"===n||"room_server"===n||"room"===n||"server"===n})&&s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx(O,{className:"w-3 h-3 flex-shrink-0",style:{color:A.roomColor},strokeWidth:2.5}),s.jsx("span",{className:"text-text-muted",children:"Room"}),s.jsx(pe,{text:"Room Server identity. Hosts a chat room that clients can sync messages with."})]})),s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx(F,{className:"w-3 h-3 flex-shrink-0",style:{color:A.localColor},strokeWidth:2.5}),s.jsx("span",{className:"text-text-muted",children:"Local"}),s.jsx(pe,{text:"Your repeater. This is the node running pyMC_Repeater that you're connected to."})]}),o.size>0&&s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"rounded flex-shrink-0",style:{width:"12px",height:"8px",backgroundColor:A.neighborColor}}),s.jsx("span",{className:"text-text-muted",children:"Neighbor"}),s.jsx(pe,{text:"Zero-hop direct RF contact. Color indicates we receive their ADVERTs directly."})]}),i.gatewayNodes.length>0&&s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",backgroundColor:A.nodeColor}}),s.jsx("span",{className:"text-text-muted",children:"Gateway"}),s.jsx(pe,{text:"Significant traffic forwarder (7-10% of last-hop traffic). Gateways relay substantial traffic to the local node."})]}),i.mobileNodes.length>0&&s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",background:"transparent",border:`4px solid ${A.mobileColor}`,boxSizing:"border-box"}}),s.jsx("span",{className:"text-text-muted",children:"Mobile"}),s.jsx(pe,{text:"Volatile node that frequently appears/disappears from paths. Likely a portable or vehicle-mounted device."})]})]}),o.size>0&&s.jsx("div",{className:"mt-1.5 pt-1.5 border-t border-white/10",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"flex-shrink-0",style:{width:"14px",height:"2px",backgroundImage:`repeating-linear-gradient(90deg, ${he} 0, ${he} 3px, transparent 3px, transparent 5px)`,borderRadius:"1px"}}),s.jsx("span",{className:"text-text-muted",children:"Neighbor"}),s.jsx(pe,{text:"Dashed gray → yellow on hover. Direct RF contact with local."})]})}),e&&t>0&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"text-text-secondary font-medium mt-2 pt-2 border-t border-white/10 mb-1 flex items-center gap-1",children:["Topology",s.jsx(pe,{text:"Links with 5+ validations. Thickness = relative strength."})]}),s.jsxs("div",{className:"flex flex-col gap-0.5 text-text-muted",children:[s.jsxs("div",{className:"flex justify-between tabular-nums",children:[s.jsx("span",{children:"Nodes"}),s.jsx("span",{className:"text-text-secondary",children:n+(r?1:0)})]}),s.jsxs("div",{className:"flex justify-between tabular-nums",children:[s.jsx("span",{children:"Links"}),s.jsx("span",{className:"text-text-secondary",children:t})]}),i.hubNodes.length>0&&s.jsxs("div",{className:"flex justify-between tabular-nums",children:[s.jsx("span",{children:"Hubs"}),s.jsx("span",{style:{color:"#6366F1"},children:i.hubNodes.length})]})]}),s.jsx("div",{className:"flex flex-col gap-1 mt-1.5 pt-1.5 border-t border-white/10",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("div",{className:"flex-shrink-0",style:{width:"14px",height:"3px",backgroundColor:oe,borderRadius:"1px"}}),s.jsx("span",{className:"text-text-muted",children:"Link"}),s.jsx(pe,{text:"Gray at rest. Hover to reveal type (teal=direct, indigo=loop)."})]})}),i.loops.length>0&&s.jsx("div",{className:"mt-1.5 pt-1.5 border-t border-white/10",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx(U,{className:"w-3 h-3 flex-shrink-0",style:{color:ce}}),s.jsxs("div",{className:"flex flex-col",children:[s.jsxs("span",{style:{color:ce},className:"font-medium",children:[i.loops.length," ",1===i.loops.length?"Loop":"Loops"]}),s.jsx("span",{className:"text-text-muted text-[10px] leading-tight",children:"Redundant paths"})]})]})})]})]});var l}const be="rgba(251, 191, 36, 0.2)";function ve({isDeepLoading:e,showDeepAnalysisModal:t,onDeepAnalysis:n,showTopology:r,onToggleTopology:i,hasValidatedPolylines:o,showNeighborLines:a,onToggleNeighborLines:A,hasNeighborPolylines:l,showNodes:c,onToggleNodes:u,soloHubs:h,onToggleSoloHubs:d,hasHubNodes:f,soloDirect:p,onToggleSoloDirect:g,hasZeroHopNeighbors:m,isFullscreen:_,onToggleFullscreen:b}){return s.jsxs("div",{className:"absolute top-4 right-4 z-[600] map-controls-container",children:[s.jsxs("button",{onClick:n,disabled:e||t,className:"map-control-glass px-3 py-2 flex items-center gap-2 transition-colors hover:bg-white/10 disabled:opacity-50 disabled:cursor-not-allowed",title:"Deep Analysis - Load full packet history and rebuild topology",children:[s.jsx("span",{className:"map-control-label text-xs font-medium text-text-primary",children:"Deep Analysis"}),s.jsx($,{className:"w-4 h-4 text-accent-primary"})]}),o&&s.jsx("button",{onClick:i,className:"p-2 transition-colors hover:bg-white/10 "+(r?"map-control-glass-active":"map-control-glass"),style:r?{backgroundColor:"rgba(74, 222, 128, 0.2)"}:void 0,title:r?"Hide topology lines":"Show topology lines",children:r?s.jsx(P,{className:"w-4 h-4 text-green-400"}):s.jsx(K,{className:"w-4 h-4 text-text-secondary"})}),l&&s.jsx("button",{onClick:A,className:"p-2 transition-colors hover:bg-white/10 "+(a?"map-control-glass-active":"map-control-glass"),style:a?{backgroundColor:be}:void 0,title:a?"Hide neighbor lines":"Show neighbor lines",children:s.jsx(te,{className:"w-4 h-4 "+(a?"text-amber-400":"text-text-secondary")})}),s.jsx("button",{onClick:u,className:"p-2 transition-colors hover:bg-white/10 "+(c?"map-control-glass-active":"map-control-glass"),style:c?{backgroundColor:"rgba(99, 102, 241, 0.2)"}:void 0,title:c?"Hide all nodes":"Show all nodes",children:c?s.jsx(j,{className:"w-4 h-4 text-indigo-400"}):s.jsx(K,{className:"w-4 h-4 text-text-secondary"})}),f&&s.jsx("button",{onClick:d,className:"p-2 transition-colors hover:bg-white/10 "+(h?"map-control-glass-active":"map-control-glass"),style:h?{backgroundColor:be}:void 0,title:h?"Show all nodes":"Solo hubs & connections",children:s.jsx(G,{className:"w-4 h-4 "+(h?"text-amber-400":"text-text-secondary")})}),m&&s.jsx("button",{onClick:g,className:"p-2 transition-colors hover:bg-white/10 "+(p?"map-control-glass-active":"map-control-glass"),style:p?{backgroundColor:"rgba(67, 56, 202, 0.35)"}:void 0,title:p?"Show all nodes":"Solo direct (0-hop) nodes",children:s.jsx(X,{className:"w-4 h-4 "+(p?"text-indigo-400":"text-text-secondary")})}),s.jsx("button",{onClick:b,className:"map-control-glass p-2 transition-colors hover:bg-white/10",title:_?"Exit fullscreen":"Fullscreen",children:_?s.jsx(ee,{className:"w-4 h-4 text-text-secondary"}):s.jsx(J,{className:"w-4 h-4 text-text-secondary"})})]})}function ye({isActive:e,onClick:t}){return s.jsxs("button",{onClick:t,className:"flex items-center gap-2 w-full text-left transition-colors hover:bg-white/5 "+(e?"map-control-glass-active":"map-control-glass"),style:{padding:"0.5rem 0.625rem",...e?{backgroundColor:"rgba(245, 158, 11, 0.15)"}:{}},title:e?"Configure wardriving coverage":"Show wardriving coverage",children:[s.jsx(H,{className:"w-3.5 h-3.5 flex-shrink-0 "+(e?"text-amber-400":"text-text-secondary")}),s.jsx("span",{className:"text-xs font-medium "+(e?"text-amber-400":"text-text-secondary"),children:"Wardrive"})]})}function we(e){let t=!0,n=-90,r=90,i=-180,s=180;for(const o of e.toLowerCase()){const e="0123456789bcdefghjkmnpqrstuvwxyz".indexOf(o);if(-1!==e)for(let o=4;o>=0;o--){const a=e>>o&1;if(t){const e=(i+s)/2;a?i=e:s=e}else{const e=(n+r)/2;a?n=e:r=e}t=!t}}return{lat:(n+r)/2,lon:(i+s)/2}}function xe(e){return Math.exp(-e*Math.LN2/7)}const Ee="pymc-wardriving-url",Te="pymc-wardriving-enabled";function Se(e){"undefined"!=typeof localStorage&&(e?localStorage.setItem(Ee,e):localStorage.removeItem(Ee))}function Ce(e){"undefined"!=typeof localStorage&&localStorage.setItem(Te,String(e))}function ke(e,t=null){if(null!==e){const n=(Math.max(-12,Math.min(12,e))+12)/24;return null!==t?.8*n+(Math.max(-120,Math.min(-50,t))+120)/70*.2:n}return null!==t?(Math.max(-120,Math.min(-50,t))+120)/70:.5}const Re=a((e,t)=>({status:"idle",isVisible:"undefined"!=typeof localStorage&&"true"===localStorage.getItem(Te),coveragePoints:[],repeaters:[],error:null,stats:{coverageCount:0,repeaterCount:0,lastUpdated:null},url:"undefined"==typeof localStorage?"":localStorage.getItem(Ee)||"",isModalOpen:!1,openModal:()=>e({isModalOpen:!0}),closeModal:()=>e({isModalOpen:!1}),setUrl:t=>e({url:t}),toggleVisibility:()=>{const n=!t().isVisible;Ce(n),e({isVisible:n})},setVisible:t=>{Ce(t),e({isVisible:t})},loadCoverage:async t=>{if(!t.trim())return e({error:"Please enter a URL",status:"error"}),!1;try{new URL(t.trim())}catch{return e({error:"Invalid URL format",status:"error"}),!1}e({error:null,status:"connecting"});try{e({status:"loading"});const n=await async function(e){const t=`${e.replace(/\/+$/,"").replace(/\/get-nodes$/,"").replace(/\/get-samples$/,"")}/get-samples`,n=await fetch(t,{headers:{Accept:"application/json"}});if(!n.ok)throw new Error(`Failed to fetch precise samples: ${n.status}`);return n.json()}(t.trim());if(!n||"object"!=typeof n)throw new Error("Invalid response from server");if(!Array.isArray(n.keys))throw new Error("No sample data found in response");e({status:"processing"});const r=function(e){var t;const n=[];for(const r of e.keys){if(!r.observed)continue;const{lat:e,lon:i}=we(r.hash),s=parseInt(r.time,10),o=isNaN(s)?30:(Date.now()-s)/864e5,a=xe(o),A=ke(r.snr,r.rssi)*(.3+.7*a);n.push({lat:e,lon:i,successRate:r.observed?1:0,weight:A,totalSamples:1,ageDays:o,geohash:r.hash,repeaters:(null==(t=r.path)?void 0:t.map(e=>e.toLowerCase()))||[]})}return n}(n);if(0===r.length)throw new Error("No valid coverage points found");return e({coveragePoints:r,repeaters:[],stats:{coverageCount:r.length,repeaterCount:0,lastUpdated:new Date},status:"success",isVisible:!0,url:t.trim()}),Se(t.trim()),Ce(!0),!0}catch(n){const t=n instanceof Error?n.message:"Failed to load coverage data";let r=t;return t.includes("Failed to fetch")||t.includes("NetworkError")?r="Could not connect to server. Check the URL and try again.":t.includes("CORS")?r="Server does not allow cross-origin requests.":t.includes("404")&&(r="Coverage endpoint not found. Check the URL."),e({error:r,status:"error"}),!1}},clearCoverage:()=>{e({coveragePoints:[],repeaters:[],stats:{coverageCount:0,repeaterCount:0,lastUpdated:null},status:"idle",error:null,isVisible:!1,url:""}),Se(""),Ce(!1)}}));function Pe({status:e}){if("connecting"!==e&&"loading"!==e&&"processing"!==e)return null;const t={idle:"",connecting:"Connecting to server...",loading:"Fetching coverage data...",processing:"Processing coverage points...",success:"",error:""}[e];return t?s.jsxs("div",{className:"flex items-center gap-3 p-4 bg-amber-500/10 border border-amber-500/30 rounded-xl",children:[s.jsx("div",{className:"relative",children:s.jsx(L,{className:"w-5 h-5 text-amber-400 animate-spin"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-sm text-amber-400 font-medium",children:t}),s.jsx("div",{className:"mt-2 h-1 bg-amber-500/20 rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-amber-400 rounded-full transition-all duration-300",style:{width:"connecting"===e?"30%":"loading"===e?"60%":"90%"}})})]})]}):null}function Ie(){const{isModalOpen:e,closeModal:t,status:n,isVisible:r,stats:i,error:o,url:a,loadCoverage:l,clearCoverage:c,toggleVisibility:u,setUrl:h}=Re(),d="connecting"===n||"loading"===n||"processing"===n,[p,g]=f.useState(a),m=f.useCallback(async()=>{await l(p)},[p,l]),_=f.useCallback(()=>{g(""),c()},[c]),b=f.useCallback(e=>{"Enter"!==e.key||e.shiftKey||d||(e.preventDefault(),m())},[m,d]),v=f.useCallback(e=>{const t=e.target.value;g(t),h(t)},[h]);if(!e)return null;const y=i.coverageCount>0,w=p.trim().length>0&&!d;return s.jsxs("div",{className:"fixed inset-0 z-[10010] flex items-center justify-center",children:[s.jsx("div",{className:"absolute inset-0 bg-black/40 backdrop-blur-md",onClick:d?void 0:t}),s.jsxs("div",{className:"relative glass-card-elevated w-full max-w-md mx-4",children:[s.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"p-2 rounded-lg bg-amber-500/20",children:s.jsx(H,{className:"w-5 h-5 text-amber-400"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-lg font-semibold text-text-primary",children:"Wardriving Coverage"}),s.jsx("p",{className:"text-xs text-text-muted",children:"Overlay RF coverage heatmap"})]})]}),s.jsx("button",{onClick:t,disabled:d,className:"p-2 rounded-lg hover:bg-white/10 transition-colors disabled:opacity-50",children:s.jsx(A,{className:"w-5 h-5 text-text-secondary"})})]}),s.jsxs("div",{className:"p-4 space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-sm font-medium text-text-secondary mb-2",children:"Coverage Server URL"}),s.jsx("input",{type:"url",value:p,onChange:v,onKeyDown:b,placeholder:"https://coverage.wcmesh.com",className:"w-full px-4 py-3 bg-black/30 border border-border rounded-xl text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-amber-500/50 focus:border-amber-500/50 transition-all disabled:opacity-50",disabled:d}),s.jsx("p",{className:"mt-1.5 text-xs text-text-muted",children:"Enter the base URL of a wardriving coverage server (e.g., coverage.wcmesh.com)"})]}),s.jsx(Pe,{status:n}),"error"===n&&o&&s.jsxs("div",{className:"flex items-start gap-3 p-3 bg-red-500/10 border border-red-500/30 rounded-xl",children:[s.jsx(Q,{className:"w-5 h-5 text-red-400 flex-shrink-0 mt-0.5"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-sm text-red-400 font-medium",children:"Connection Failed"}),s.jsx("p",{className:"text-xs text-red-400/80 mt-0.5",children:o})]})]}),"success"===n&&y&&s.jsxs("div",{className:"flex items-start gap-3 p-3 bg-green-500/10 border border-green-500/30 rounded-xl",children:[s.jsx(k,{className:"w-5 h-5 text-green-400 flex-shrink-0 mt-0.5"}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-sm text-green-400 font-medium",children:"Data Loaded Successfully"}),s.jsxs("p",{className:"text-xs text-green-400/80 mt-0.5",children:[i.coverageCount.toLocaleString()," coverage points • ",i.repeaterCount.toLocaleString()," repeaters"]})]})]}),y&&!d&&"success"!==n&&s.jsxs("div",{className:"flex items-start gap-3 p-3 bg-amber-500/10 border border-amber-500/30 rounded-xl",children:[s.jsx(z,{className:"w-5 h-5 text-amber-400 flex-shrink-0 mt-0.5"}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-sm text-amber-400 font-medium",children:"Coverage Data Loaded"}),s.jsxs("p",{className:"text-xs text-amber-400/80 mt-0.5",children:[i.coverageCount.toLocaleString()," points •",i.lastUpdated&&` Last updated ${i.lastUpdated.toLocaleTimeString()}`]})]})]})]}),s.jsxs("div",{className:"flex items-center justify-between gap-3 p-4 border-t border-border-subtle",children:[s.jsx("div",{className:"flex items-center gap-2",children:y&&s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:u,disabled:d,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-text-secondary hover:text-text-primary hover:bg-white/5 rounded-lg transition-colors disabled:opacity-50",title:r?"Hide heatmap":"Show heatmap",children:r?s.jsxs(s.Fragment,{children:[s.jsx(K,{className:"w-3.5 h-3.5"})," Hide"]}):s.jsxs(s.Fragment,{children:[s.jsx(Z,{className:"w-3.5 h-3.5"})," Show"]})}),s.jsxs("button",{onClick:_,disabled:d,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-red-400/80 hover:text-red-400 hover:bg-red-500/10 rounded-lg transition-colors disabled:opacity-50",title:"Clear coverage data",children:[s.jsx(S,{className:"w-3.5 h-3.5"})," Clear"]})]})}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("button",{onClick:t,disabled:d,className:"px-4 py-2 text-sm font-medium text-text-secondary hover:bg-white/10 rounded-lg transition-colors disabled:opacity-50",children:y?"Done":"Cancel"}),s.jsx("button",{onClick:m,disabled:!w,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium bg-amber-500 hover:bg-amber-400 text-black rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:d?s.jsxs(s.Fragment,{children:[s.jsx(L,{className:"w-4 h-4 animate-spin"}),"Loading..."]}):y?s.jsxs(s.Fragment,{children:[s.jsx(q,{className:"w-4 h-4"}),"Refresh"]}):s.jsxs(s.Fragment,{children:[s.jsx(V,{className:"w-4 h-4"}),"Connect"]})})]})]})]})]})}function Me(e,t){if(!e)throw new Error(t||"loader assertion failed.")}const Le=Boolean("object"!=typeof process||"[object process]"!==String(process)||process.browser),Ne="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version);Ne&&parseFloat(Ne[1]);const Be=globalThis,De=globalThis.process||{},Oe=globalThis.navigator||{};function Fe(e){var t,n;if("undefined"!=typeof window&&"renderer"===(null==(t=window.process)?void 0:t.type))return!0;if("undefined"!=typeof process&&Boolean(null==(n=process.versions)?void 0:n.electron))return!0;const r="undefined"!=typeof navigator&&navigator.userAgent;return Boolean(r&&r.indexOf("Electron")>=0)}function Ue(){return!("object"==typeof process&&"[object process]"===String(process)&&!(null==process?void 0:process.browser))||Fe()}const je="4.1.0";class Ge{constructor(e,t,n="sessionStorage"){this.storage=function(e){try{const t=window[e],n="__storage_test__";return t.setItem(n,n),t.removeItem(n),t}catch(ms){return null}}(n),this.id=e,this.config=t,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(e){if(Object.assign(this.config,e),this.storage){const e=JSON.stringify(this.config);this.storage.setItem(this.id,e)}}_loadConfiguration(){let e={};if(this.storage){const t=this.storage.getItem(this.id);e=t?JSON.parse(t):{}}return Object.assign(this.config,e),this}}var ze,Ve;function We(e){return"string"!=typeof e?e:(e=e.toUpperCase(),ze[e]||ze.WHITE)}function He(e,t){if(!e)throw new Error("Assertion failed")}function $e(){var e,t,n;let r;if(Ue()&&Be.performance)r=null==(t=null==(e=null==Be?void 0:Be.performance)?void 0:e.now)?void 0:t.call(e);else if("hrtime"in De){const e=null==(n=null==De?void 0:De.hrtime)?void 0:n.call(De);r=1e3*e[0]+e[1]/1e6}else r=Date.now();return r}(Ve=ze||(ze={}))[Ve.BLACK=30]="BLACK",Ve[Ve.RED=31]="RED",Ve[Ve.GREEN=32]="GREEN",Ve[Ve.YELLOW=33]="YELLOW",Ve[Ve.BLUE=34]="BLUE",Ve[Ve.MAGENTA=35]="MAGENTA",Ve[Ve.CYAN=36]="CYAN",Ve[Ve.WHITE=37]="WHITE",Ve[Ve.BRIGHT_BLACK=90]="BRIGHT_BLACK",Ve[Ve.BRIGHT_RED=91]="BRIGHT_RED",Ve[Ve.BRIGHT_GREEN=92]="BRIGHT_GREEN",Ve[Ve.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",Ve[Ve.BRIGHT_BLUE=94]="BRIGHT_BLUE",Ve[Ve.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",Ve[Ve.BRIGHT_CYAN=96]="BRIGHT_CYAN",Ve[Ve.BRIGHT_WHITE=97]="BRIGHT_WHITE";const Xe={debug:Ue()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},Qe={enabled:!0,level:0};function Ye(){}const qe={},Ke={once:!0};class Ze{constructor({id:e}={id:""}){this.VERSION=je,this._startTs=$e(),this._deltaTs=$e(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new Ge(`__probe-${this.id}__`,Qe),this.timeStamp(`${this.id} started`),function(e,t=["constructor"]){const n=Object.getPrototypeOf(e),r=Object.getOwnPropertyNames(n),i=e;for(const s of r){const n=i[s];"function"==typeof n&&(t.find(e=>s===e)||(i[s]=n.bind(e)))}}(this),Object.seal(this)}set level(e){this.setLevel(e)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number(($e()-this._startTs).toPrecision(10))}getDelta(){return Number(($e()-this._deltaTs).toPrecision(10))}set priority(e){this.level=e}get priority(){return this.level}getPriority(){return this.level}enable(e=!0){return this._storage.setConfiguration({enabled:e}),this}setLevel(e){return this._storage.setConfiguration({level:e}),this}get(e){return this._storage.config[e]}set(e,t){this._storage.setConfiguration({[e]:t})}settings(){console.table}assert(e,t){if(!e)throw new Error(t||"Assertion failed")}warn(e){return this._getLogFunction(0,e,Xe.warn,arguments,Ke)}error(e){return this._getLogFunction(0,e,Xe.error,arguments)}deprecated(e,t){return this.warn(`\`${e}\` is deprecated and will be removed in a later version. Use \`${t}\` instead`)}removed(e,t){return this.error(`\`${e}\` has been removed. Use \`${t}\` instead`)}probe(e,t){return this._getLogFunction(e,t,Xe.log,arguments,{time:!0,once:!0})}log(e,t){return this._getLogFunction(e,t,Xe.debug,arguments)}info(e,t){return this._getLogFunction(e,t,console.info,arguments)}once(e,t){return this._getLogFunction(e,t,Xe.debug||Xe.info,arguments,Ke)}table(e,t,n){return t?this._getLogFunction(e,t,console.table||Ye,n&&[n],{tag:tt(t)}):Ye}time(e,t){return this._getLogFunction(e,t,console.time?console.time:console.info)}timeEnd(e,t){return this._getLogFunction(e,t,console.timeEnd?console.timeEnd:console.info)}timeStamp(e,t){return this._getLogFunction(e,t,console.timeStamp||Ye)}group(e,t,n={collapsed:!1}){const r=et({logLevel:e,message:t,opts:n}),{collapsed:i}=n;return r.method=(i?console.groupCollapsed:console.group)||console.info,this._getLogFunction(r)}groupCollapsed(e,t,n={}){return this.group(e,t,Object.assign({},n,{collapsed:!0}))}groupEnd(e){return this._getLogFunction(e,"",console.groupEnd||Ye)}withGroup(e,t,n){this.group(e,t)();try{n()}finally{this.groupEnd(e)()}}trace(){console.trace}_shouldLog(e){return this.isEnabled()&&this.getLevel()>=Je(e)}_getLogFunction(e,t,n,r,i){if(this._shouldLog(e)){i=et({logLevel:e,message:t,args:r,opts:i}),He(n=n||i.method),i.total=this.getTotal(),i.delta=this.getDelta(),this._deltaTs=$e();const s=i.tag||i.message;if(i.once&&s){if(qe[s])return Ye;qe[s]=$e()}return t=function(e,t,n){if("string"==typeof t){const o=n.time?function(e,t=8){const n=Math.max(t-e.length,0);return`${" ".repeat(n)}${e}`}(function(e){let t;return t=e<10?`${e.toFixed(2)}ms`:e<100?`${e.toFixed(1)}ms`:e<1e3?`${e.toFixed(0)}ms`:`${(e/1e3).toFixed(2)}s`,t}(n.total)):"";r=t=n.time?`${e}: ${o} ${t}`:`${e}: ${t}`,i=n.color,s=n.background,Ue||"string"!=typeof r||(i&&(r=`[${We(i)}m${r}`),s&&(r=`[${We(s)+10}m${r}`)),t=r}var r,i,s;return t}(this.id,i.message,i),n.bind(console,t,...i.args)}return Ye}}function Je(e){if(!e)return 0;let t;switch(typeof e){case"number":t=e;break;case"object":t=e.logLevel||e.priority||0;break;default:return 0}return He(Number.isFinite(t)&&t>=0),t}function et(e){const{logLevel:t,message:n}=e;e.logLevel=Je(t);const r=e.args?Array.from(e.args):[];for(;r.length&&r.shift()!==n;);switch(typeof t){case"string":case"function":void 0!==n&&r.unshift(n),e.message=t;break;case"object":Object.assign(e,t)}"function"==typeof e.message&&(e.message=e.message());const i=typeof e.message;return He("string"===i||"object"===i),Object.assign(e,{args:r},e.opts)}function tt(e){for(const t in e)for(const n in e[t])return n||"untitled";return"empty"}Ze.VERSION=je;const nt="4.3.3",rt=nt[0]>="0"&&nt[0]<="9"?`v${nt}`:"",it=function(){const e=new Ze({id:"loaders.gl"});return globalThis.loaders=globalThis.loaders||{},globalThis.loaders.log=e,globalThis.loaders.version=rt,globalThis.probe=globalThis.probe||{},globalThis.probe.loaders=e,e}();function st(e,t){return ot(e||{},t)}function ot(e,t,n=0){if(n>3)return t;const r={...e};for(const[i,s]of Object.entries(t))s&&"object"==typeof s&&!Array.isArray(s)?r[i]=ot(r[i]||{},t[i],n+1):r[i]=t[i];return r}var at;function At(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}(null==(at=globalThis._loadersgl_)?void 0:at.version)||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.3.3"),globalThis._loadersgl_.version;const lt="object"!=typeof process||"[object process]"!==String(process)||process.browser,ct="undefined"!=typeof window&&void 0!==window.orientation,ut="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version);ut&&parseFloat(ut[1]);class ht{constructor(e,t){r(this,"name"),r(this,"workerThread"),r(this,"isRunning",!0),r(this,"result"),r(this,"_resolve",()=>{}),r(this,"_reject",()=>{}),this.name=e,this.workerThread=t,this.result=new Promise((e,t)=>{this._resolve=e,this._reject=t})}postMessage(e,t){this.workerThread.postMessage({source:"loaders.gl",type:e,payload:t})}done(e){At(this.isRunning),this.isRunning=!1,this._resolve(e)}error(e){At(this.isRunning),this.isRunning=!1,this._reject(e)}}class dt{terminate(){}}const ft=new Map;function pt(e){const t=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(t)}function gt(e,t=!0,n){const r=n||new Set;if(e)if(mt(e))r.add(e);else if(mt(e.buffer))r.add(e.buffer);else if(ArrayBuffer.isView(e));else if(t&&"object"==typeof e)for(const i in e)gt(e[i],t,r);return void 0===n?Array.from(r):[]}function mt(e){return!!e&&(e instanceof ArrayBuffer||"undefined"!=typeof MessagePort&&e instanceof MessagePort||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)}const _t=()=>{};class bt{constructor(e){r(this,"name"),r(this,"source"),r(this,"url"),r(this,"terminated",!1),r(this,"worker"),r(this,"onMessage"),r(this,"onError"),r(this,"_loadableURL","");const{name:t,source:n,url:i}=e;At(n||i),this.name=t,this.source=n,this.url=i,this.onMessage=_t,this.onError=e=>{},this.worker=lt?this._createBrowserWorker():this._createNodeWorker()}static isSupported(){return"undefined"!=typeof Worker&<||void 0!==dt&&!lt}destroy(){this.onMessage=_t,this.onError=_t,this.worker.terminate(),this.terminated=!0}get isRunning(){return Boolean(this.onMessage)}postMessage(e,t){t=t||gt(e),this.worker.postMessage(e,t)}_getErrorFromErrorEvent(e){let t="Failed to load ";return t+=`worker ${this.name} from ${this.url}. `,e.message&&(t+=`${e.message} in `),e.lineno&&(t+=`:${e.lineno}:${e.colno}`),new Error(t)}_createBrowserWorker(){this._loadableURL=function(e){At(e.source&&!e.url||!e.source&&e.url);let t=ft.get(e.source||e.url);return t||(e.url&&(t=(n=e.url).startsWith("http")?pt(`try {\n importScripts('${n}');\n} catch (error) {\n console.error(error);\n throw error;\n}`):n,ft.set(e.url,t)),e.source&&(t=pt(e.source),ft.set(e.source,t))),At(t),t;var n}({source:this.source,url:this.url});const e=new Worker(this._loadableURL,{name:this.name});return e.onmessage=e=>{e.data?this.onMessage(e.data):this.onError(new Error("No data received"))},e.onerror=e=>{this.onError(this._getErrorFromErrorEvent(e)),this.terminated=!0},e.onmessageerror=e=>{},e}_createNodeWorker(){let e;if(this.url){const t=this.url.includes(":/")||this.url.startsWith("/")?this.url:`./${this.url}`;e=new dt(t,{eval:!1})}else{if(!this.source)throw new Error("no worker");e=new dt(this.source,{eval:!0})}return e.on("message",e=>{this.onMessage(e)}),e.on("error",e=>{this.onError(e)}),e.on("exit",e=>{}),e}}class vt{constructor(e){r(this,"name","unnamed"),r(this,"source"),r(this,"url"),r(this,"maxConcurrency",1),r(this,"maxMobileConcurrency",1),r(this,"onDebug",()=>{}),r(this,"reuseWorkers",!0),r(this,"props",{}),r(this,"jobQueue",[]),r(this,"idleQueue",[]),r(this,"count",0),r(this,"isDestroyed",!1),this.source=e.source,this.url=e.url,this.setProps(e)}static isSupported(){return bt.isSupported()}destroy(){this.idleQueue.forEach(e=>e.destroy()),this.isDestroyed=!0}setProps(e){this.props={...this.props,...e},void 0!==e.name&&(this.name=e.name),void 0!==e.maxConcurrency&&(this.maxConcurrency=e.maxConcurrency),void 0!==e.maxMobileConcurrency&&(this.maxMobileConcurrency=e.maxMobileConcurrency),void 0!==e.reuseWorkers&&(this.reuseWorkers=e.reuseWorkers),void 0!==e.onDebug&&(this.onDebug=e.onDebug)}async startJob(e,t=(e,t,n)=>e.done(n),n=(e,t)=>e.error(t)){const r=new Promise(r=>(this.jobQueue.push({name:e,onMessage:t,onError:n,onStart:r}),this));return this._startQueuedJob(),await r}async _startQueuedJob(){if(!this.jobQueue.length)return;const e=this._getAvailableWorker();if(!e)return;const t=this.jobQueue.shift();if(t){this.onDebug({message:"Starting job",name:t.name,workerThread:e,backlog:this.jobQueue.length});const r=new ht(t.name,e);e.onMessage=e=>t.onMessage(r,e.type,e.payload),e.onError=e=>t.onError(r,e),t.onStart(r);try{await r.result}catch(n){}finally{this.returnWorkerToQueue(e)}}}returnWorkerToQueue(e){!lt||this.isDestroyed||!this.reuseWorkers||this.count>this._getMaxConcurrency()?(e.destroy(),this.count--):this.idleQueue.push(e),this.isDestroyed||this._startQueuedJob()}_getAvailableWorker(){if(this.idleQueue.length>0)return this.idleQueue.shift()||null;if(this.count{}},wt=class e{constructor(e){r(this,"props"),r(this,"workerPools",new Map),this.props={...yt},this.setProps(e),this.workerPools=new Map}static isSupported(){return bt.isSupported()}static getWorkerFarm(t={}){return e._workerFarm=e._workerFarm||new e({}),e._workerFarm.setProps(t),e._workerFarm}destroy(){for(const e of this.workerPools.values())e.destroy();this.workerPools=new Map}setProps(e){this.props={...this.props,...e};for(const t of this.workerPools.values())t.setProps(this._getWorkerPoolProps())}getWorkerPool(e){const{name:t,source:n,url:r}=e;let i=this.workerPools.get(t);return i||(i=new vt({name:t,source:n,url:r}),i.setProps(this._getWorkerPoolProps()),this.workerPools.set(t,i)),i}_getWorkerPoolProps(){return{maxConcurrency:this.props.maxConcurrency,maxMobileConcurrency:this.props.maxMobileConcurrency,reuseWorkers:this.props.reuseWorkers,onDebug:this.props.onDebug}}};r(wt,"_workerFarm");let xt=wt;async function Et(e,t,n,r,i){const s=e.id,o=function(e,t={}){const n=t[e.id]||{},r=lt?`${e.id}-worker.js`:`${e.id}-worker-node.js`;let i=n.workerUrl;if(i||"compression"!==e.id||(i=t.workerUrl),"test"===t._workerType&&(i=lt?`modules/${e.module}/dist/${r}`:`modules/${e.module}/src/workers/${e.id}-worker-node.ts`),!i){let t=e.version;"latest"===t&&(t="latest");const n=t?`@${t}`:"";i=`https://unpkg.com/@loaders.gl/${e.module}${n}/dist/${r}`}return At(i),i}(e,n),a=xt.getWorkerFarm(n).getWorkerPool({name:s,url:o});n=JSON.parse(JSON.stringify(n)),r=JSON.parse(JSON.stringify(r||{}));const A=await a.startJob("process-on-worker",Tt.bind(null,i));A.postMessage("process",{input:t,options:n,context:r});const l=await A.result;return await l.result}async function Tt(e,t,n,r){switch(n){case"done":t.done(r);break;case"error":t.error(new Error(r.error));break;case"process":const{id:n,input:s,options:o}=r;try{const r=await e(s,o);t.postMessage("done",{id:n,result:r})}catch(i){const e=i instanceof Error?i.message:"unknown error";t.postMessage("error",{id:n,error:e})}}}function St(){let e;if("undefined"!=typeof window&&window.performance)e=window.performance.now();else if("undefined"!=typeof process&&process.hrtime){const t=process.hrtime();e=1e3*t[0]+t[1]/1e6}else e=Date.now();return e}class Ct{constructor(e,t){this.sampleSize=1,this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this.name=e,this.type=t,this.reset()}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}setSampleSize(e){return this.sampleSize=e,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(e){return this._count+=e,this._samples++,this._checkSampling(),this}subtractCount(e){return this._count-=e,this._samples++,this._checkSampling(),this}addTime(e){return this._time+=e,this.lastTiming=e,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=St(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(St()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}}class kt{constructor(e){this.stats={},this.id=e.id,this.stats={},this._initializeStats(e.stats),Object.seal(this)}get(e,t="count"){return this._getOrCreate({name:e,type:t})}get size(){return Object.keys(this.stats).length}reset(){for(const e of Object.values(this.stats))e.reset();return this}forEach(e){for(const t of Object.values(this.stats))e(t)}getTable(){const e={};return this.forEach(t=>{e[t.name]={time:t.time||0,count:t.count||0,average:t.getAverageTime()||0,hz:t.getHz()||0}}),e}_initializeStats(e=[]){e.forEach(e=>this._getOrCreate(e))}_getOrCreate(e){const{name:t,type:n}=e;let r=this.stats[t];return r||(r=e instanceof Ct?e:new Ct(t,n),this.stats[t]=r),r}}const Rt={};function Pt(e){if((t=e)&&"object"==typeof t&&t.isBuffer)return e;var t;if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e))return 0===e.byteOffset&&e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);if("string"==typeof e){const t=e;return(new TextEncoder).encode(t).buffer}if(e&&"object"==typeof e&&e._toArrayBuffer)return e._toArrayBuffer();throw new Error("toArrayBuffer")}function It(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(t+1):""}const Mt=e=>"function"==typeof e,Lt=e=>null!==e&&"object"==typeof e,Nt=e=>Lt(e)&&e.constructor==={}.constructor,Bt=e=>"undefined"!=typeof Response&&e instanceof Response||e&&e.arrayBuffer&&e.text&&e.json,Dt=e=>"undefined"!=typeof Blob&&e instanceof Blob,Ot=e=>(e=>"undefined"!=typeof ReadableStream&&e instanceof ReadableStream||Lt(e)&&Mt(e.tee)&&Mt(e.cancel)&&Mt(e.getReader))(e)||(e=>Lt(e)&&Mt(e.read)&&Mt(e.pipe)&&(e=>"boolean"==typeof e)(e.readable))(e);class Ft extends Error{constructor(e,t){super(e),r(this,"reason"),r(this,"url"),r(this,"response"),this.reason=t.reason,this.url=t.url,this.response=t.response}}const Ut=/^data:([-\w.]+\/[-\w.+]+)(;|,)/,jt=/^([-\w.]+\/[-\w.+]+)/;function Gt(e,t){return e.toLowerCase()===t.toLowerCase()}function zt(e){const t=Ut.exec(e);return t?t[1]:""}const Vt=/\?.*/;function Wt(e){return e.replace(Vt,"")}function Ht(e){return Bt(e)?e.url:Dt(e)?e.name||"":"string"==typeof e?e:""}function $t(e){if(Bt(e)){const t=e,n=t.headers.get("content-type")||"",r=Wt(t.url);return function(e){const t=jt.exec(e);return t?t[1]:e}(n)||zt(r)}return Dt(e)?e.type||"":"string"==typeof e?zt(e):""}async function Xt(e){if(Bt(e))return e;const t={},n=function(e){return Bt(e)?e.headers["content-length"]||-1:Dt(e)?e.size:"string"==typeof e?e.length:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:-1}(e);n>=0&&(t["content-length"]=String(n));const r=Ht(e),i=$t(e);i&&(t["content-type"]=i);const s=await async function(e){if("string"==typeof e)return`data:,${e.slice(0,5)}`;if(e instanceof Blob){const t=e.slice(0,5);return await new Promise(e=>{const n=new FileReader;n.onload=t=>{var n;return e(null==(n=null==t?void 0:t.target)?void 0:n.result)},n.readAsDataURL(t)})}return e instanceof ArrayBuffer?`data:base64,${function(e){let t="";const n=new Uint8Array(e);for(let r=0;r{}}info(){return()=>{}}warn(){return()=>{}}error(){return()=>{}}}const Kt={fetch:null,mimeType:void 0,nothrow:!1,log:new class{constructor(){r(this,"console"),this.console=console}log(...e){return this.console.log.bind(this.console,...e)}info(...e){return this.console.info.bind(this.console,...e)}warn(...e){return this.console.warn.bind(this.console,...e)}error(...e){return this.console.error.bind(this.console,...e)}},useLocalLibraries:!1,CDN:"https://unpkg.com/@loaders.gl",worker:!0,maxConcurrency:3,maxMobileConcurrency:1,reuseWorkers:Le,_nodeWorkers:!1,_workerType:"",limit:0,_limitMB:0,batchSize:"auto",batchDebounceMs:0,metadata:!1,transforms:[]},Zt={throws:"nothrow",dataType:"(no longer used)",uri:"baseUri",method:"fetch.method",headers:"fetch.headers",body:"fetch.body",mode:"fetch.mode",credentials:"fetch.credentials",cache:"fetch.cache",redirect:"fetch.redirect",referrer:"fetch.referrer",referrerPolicy:"fetch.referrerPolicy",integrity:"fetch.integrity",keepalive:"fetch.keepalive",signal:"fetch.signal"};function Jt(){globalThis.loaders=globalThis.loaders||{};const{loaders:e}=globalThis;return e._state||(e._state={}),e._state}function en(){const e=Jt();return e.globalOptions=e.globalOptions||{...Kt},e.globalOptions}function tn(e,t,n,r,i){const s=t||"Top level",o=t?`${t}.`:"";for(const a in e){const A=!t&&Lt(e[a]);if(!(a in n)&&("baseUri"!==a||t)&&("workerUrl"!==a||!t))if(a in r)Yt.warn(`${s} loader option '${o}${a}' no longer supported, use '${r[a]}'`)();else if(!A){const e=nn(a,i);Yt.warn(`${s} loader option '${o}${a}' not recognized. ${e}`)()}}}function nn(e,t){const n=e.toLowerCase();let r="";for(const i of t)for(const t in i.options){if(e===t)return`Did you mean '${i.id}.${t}'?`;const s=t.toLowerCase();(n.startsWith(s)||s.startsWith(n))&&(r=r||`Did you mean '${i.id}.${t}'?`)}return r}function rn(e,t){for(const n in t)if(n in t){const r=t[n];Nt(r)&&Nt(e[n])?e[n]={...e[n],...t[n]}:e[n]=t[n]}}function sn(e){return!!e&&(Array.isArray(e)&&(e=e[0]),Array.isArray(null==e?void 0:e.extensions))}function on(e){let t;return Me(e,"null loader"),Me(sn(e),"invalid loader"),Array.isArray(e)&&(t=e[1],e=e[0],e={...e,options:{...e.options,...t}}),((null==e?void 0:e.parseTextSync)||(null==e?void 0:e.parseText))&&(e.text=!0),e.text||(e.binary=!0),e}const an=()=>{const e=Jt();return e.loaderRegistry=e.loaderRegistry||[],e.loaderRegistry},An=/\.([^.]+)$/;function ln(e,t=[],n,r){if(!cn(e))return null;if(t&&!Array.isArray(t))return on(t);let i=[];t&&(i=i.concat(t)),(null==n?void 0:n.ignoreRegisteredLoaders)||i.push(...an()),function(e){for(const t of e)on(t)}(i);const s=function(e,t,n,r){const i=Ht(e),s=$t(e),o=Wt(i)||(null==r?void 0:r.url);let a=null,A="";return(null==n?void 0:n.mimeType)&&(a=hn(t,null==n?void 0:n.mimeType),A=`match forced by supplied MIME type ${null==n?void 0:n.mimeType}`),a=a||function(e,t){const n=t&&An.exec(t),r=n&&n[1];return r?function(e,t){t=t.toLowerCase();for(const n of e)for(const e of n.extensions)if(e.toLowerCase()===t)return n;return null}(e,r):null}(t,o),A=A||(a?`matched url ${o}`:""),a=a||hn(t,s),A=A||(a?`matched MIME type ${s}`:""),a=a||function(e,t){if(!t)return null;for(const n of e)if("string"==typeof t){if(dn(t,n))return n}else if(ArrayBuffer.isView(t)){if(fn(t.buffer,t.byteOffset,n))return n}else if(t instanceof ArrayBuffer&&fn(t,0,n))return n;return null}(t,e),A=A||(a?`matched initial data ${pn(e)}`:""),(null==n?void 0:n.fallbackMimeType)&&(a=a||hn(t,null==n?void 0:n.fallbackMimeType),A=A||(a?`matched fallback MIME type ${s}`:"")),A&&it.log(1,`selectLoader selected ${null==a?void 0:a.name}: ${A}.`),a}(e,i,n,r);if(!s&&!(null==n?void 0:n.nothrow))throw new Error(un(e));return s}function cn(e){return!(e instanceof Response&&204===e.status)}function un(e){const t=Ht(e),n=$t(e);let r="No valid loader found (";r+=t?`${It(t)}, `:"no url provided, ",r+=`MIME type: ${n?`"${n}"`:"not provided"}, `;const i=e?pn(e):"";return r+=i?` first bytes: "${i}"`:"first bytes: not available",r+=")",r}function hn(e,t){var n;for(const r of e){if(null==(n=r.mimeTypes)?void 0:n.some(e=>Gt(t,e)))return r;if(Gt(t,`application/x.${r.id}`))return r}return null}function dn(e,t){return t.testText?t.testText(e):(Array.isArray(t.tests)?t.tests:[t.tests]).some(t=>e.startsWith(t))}function fn(e,t,n){return(Array.isArray(n.tests)?n.tests:[n.tests]).some(n=>function(e,t,n,r){if(r instanceof ArrayBuffer)return function(e,t,n){if(n=n||e.byteLength,e.byteLength100?`${r.slice(0,100)}...`:r;const i={reason:e.statusText,url:e.url,response:e};try{const t=e.headers.get("Content-Type");i.reason=!e.bodyUsed&&(null==t?void 0:t.includes("application/json"))?await e.json():await e.text()}catch(t){}return new Ft(r,i)}(e);throw t}}(n),t.binary?await n.arrayBuffer():await n.text()}if(Ot(e)&&(e=function(e,t){if("string"==typeof e)return function*(e,t){const n=(null==t?void 0:t.chunkSize)||262144;let r=0;const i=new TextEncoder;for(;re&&"function"==typeof e[Symbol.asyncIterator])(e))return async function(e){const t=[];for await(const n of e)t.push(n);return function(...e){return function(e){const t=e.map(e=>e instanceof ArrayBuffer?new Uint8Array(e):e),n=t.reduce((e,t)=>e+t.byteLength,0),r=new Uint8Array(n);let i=0;for(const s of t)r.set(s,i),i+=s.byteLength;return r.buffer}(e)}(...t)}(e);var i;throw new Error(bn)}function yn(e,t){const n=en(),r=e||n;return"function"==typeof r.fetch?r.fetch:Lt(r.fetch)?e=>Qt(e,r.fetch):(null==t?void 0:t.fetch)?null==t?void 0:t.fetch:Qt}async function wn(e,t,n,r){!t||Array.isArray(t)||sn(t)||(r=void 0,n=t,t=void 0),n=n||{};const i=Ht(e=await e),s=function(e,t){if(e&&!Array.isArray(e))return e;let n;if(e&&(n=Array.isArray(e)?e:[e]),t&&t.loaders){const e=Array.isArray(t.loaders)?t.loaders:[t.loaders];n=n?[...n,...e]:e}return n&&n.length?n:void 0}(t,r),o=await async function(e,t=[],n,r){if(!cn(e))return null;let i=ln(e,t,{...n,nothrow:!0},r);if(i)return i;if(Dt(e)&&(i=ln(e=await e.slice(0,10).arrayBuffer(),t,n,r)),!i&&!(null==n?void 0:n.nothrow))throw new Error(un(e));return i}(e,s,n);return o?(r=function(e,t,n){if(n)return n;const r={fetch:yn(t,e),...e};if(r.url){const e=Wt(r.url);r.baseUrl=e,r.queryString=function(e){const t=e.match(Vt);return t&&t[0]}(r.url),r.filename=It(e),r.baseUrl=function(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(0,t):""}(e)}return Array.isArray(r.loaders)||(r.loaders=null),r}({url:i,_parse:wn,loaders:s},n=function(e,t,n,r){return n=n||[],function(e,t){tn(e,null,Kt,Zt,t);for(const n of t){const r=e&&e[n.id]||{},i=n.options&&n.options[n.id]||{},s=n.deprecatedOptions&&n.deprecatedOptions[n.id]||{};tn(r,n.id,i,s,t)}}(e,n=Array.isArray(n)?n:[n]),function(e,t,n){const r={...e.options||{}};return function(e,t){t&&!("baseUri"in e)&&(e.baseUri=t)}(r,n),null===r.log&&(r.log=new qt),rn(r,en()),rn(r,t),r}(t,e,r)}(n,o,s,i),r||null),await async function(e,t,n,r){if(function(e){At(e,"no worker provided");e.version}(e),n=st(e.options,n),Bt(t)){const e=t,{ok:n,redirected:i,status:s,statusText:o,type:a,url:A}=e,l=Object.fromEntries(e.headers.entries());r.response={headers:l,ok:n,redirected:i,status:s,statusText:o,type:a,url:A}}t=await vn(t,e,n);const i=e;if(i.parseTextSync&&"string"==typeof t)return i.parseTextSync(t,n,r);if(function(e,t){return!!xt.isSupported()&&!(!lt&&!(null==t?void 0:t._nodeWorkers))&&e.worker&&(null==t?void 0:t.worker)}(e,n))return await Et(e,t,n,r,wn);if(i.parseText&&"string"==typeof t)return await i.parseText(t,n,r);if(i.parse)return await i.parse(t,n,r);throw At(!i.parseSync),new Error(`${e.id} loader - no parser found and worker is disabled`)}(o,e,n,r)):null}async function xn(e,t,n,r){let i,s;Array.isArray(t)||sn(t)?(i=t,s=n):(i=[],s=t);const o=yn(s);let a=e;return"string"==typeof e&&(a=await o(e)),Dt(e)&&(a=await o(e)),Array.isArray(i),await wn(a,i,s)}const En=null==(e=globalThis.loaders)?void 0:e.parseImageNode,Tn="undefined"!=typeof Image,Sn="undefined"!=typeof ImageBitmap,Cn=Boolean(En),kn=!!Le||Cn;const Rn=/^data:image\/svg\+xml/,Pn=/\.svg((\?|#).*)?$/;function In(e){return e&&(Rn.test(e)||Pn.test(e))}function Mn(e,t){if(In(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function Ln(e,t,n){const r=function(e,t){if(In(t)){let t=(new TextDecoder).decode(e);try{"function"==typeof unescape&&"function"==typeof encodeURIComponent&&(t=unescape(encodeURIComponent(t)))}catch(n){throw new Error(n.message)}return`data:image/svg+xml;base64,${btoa(t)}`}return Mn(e,t)}(e,n),i=self.URL||self.webkitURL,s="string"!=typeof r&&i.createObjectURL(r);try{return await async function(e,t){const n=new Image;return n.src=e,t.image&&t.image.decode&&n.decode?(await n.decode(),n):await new Promise((e,t)=>{try{n.onload=()=>e(n),n.onerror=e=>{const n=e instanceof Error?e.message:"error";t(new Error(n))}}catch(r){t(r)}})}(s||r,t)}finally{s&&i.revokeObjectURL(s)}}const Nn={};let Bn=!0;const Dn=!1,On=!0;function Fn(e){const t=Un(e);return function(e){const t=Un(e);return t.byteLength>=24&&2303741511===t.getUint32(0,Dn)?{mimeType:"image/png",width:t.getUint32(16,Dn),height:t.getUint32(20,Dn)}:null}(t)||function(e){const t=Un(e);if(!(t.byteLength>=3&&65496===t.getUint16(0,Dn)&&255===t.getUint8(2)))return null;const{tableMarkers:n,sofMarkers:r}=function(){const e=new Set([65499,65476,65484,65501,65534]);for(let t=65504;t<65520;++t)e.add(t);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}();let i=2;for(;i+9=10&&1195984440===t.getUint32(0,Dn)?{mimeType:"image/gif",width:t.getUint16(6,On),height:t.getUint16(8,On)}:null}(t)||function(e){const t=Un(e);return t.byteLength>=14&&16973===t.getUint16(0,Dn)&&t.getUint32(2,On)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,On),height:t.getUint32(22,On)}:null}(t)||function(e){const t=function(e){return function(e,t,n=0){const r=(i="ftyp",[...i].map(e=>e.charCodeAt(0)));var i;for(let s=0;sBoolean(Fn(new DataView(e)))],options:{image:{type:"auto",decode:!0}}},Gn=new Ze({id:"deck"});let zn={};function Vn(e){zn=e}function Wn(e,t,n,r){Gn.level>0&&zn[e]&&zn[e].call(null,t,n,r)}const Hn={dataType:null,batchType:null,id:"JSON",name:"JSON",module:"",version:"",options:{},extensions:["json","geojson"],mimeTypes:["application/json","application/geo+json"],testText:function(e){const t=e[0],n=e[e.length-1];return"{"===t&&"}"===n||"["===t&&"]"===n},parseTextSync:JSON.parse},$n=function(){const e="9.2.5",t=globalThis.deck&&globalThis.deck.VERSION;if(t&&t!==e)throw new Error(`deck.gl - multiple versions detected: ${t} vs ${e}`);return t||(Gn.log(1,`deck.gl ${e}`)(),globalThis.deck={...globalThis.deck,VERSION:e,version:e,log:Gn,_registerLoggers:Vn},function(e){const t=an();e=Array.isArray(e)?e:[e];for(const n of e){const e=on(n);t.find(t=>e===t)||t.unshift(e)}}([Hn,[jn,{imagebitmap:{premultiplyAlpha:"none"}}]])),e}();function Xn(e,t){if(!e)throw new Error(t||"shadertools: assertion failed.")}const Qn={number:{type:"number",validate:(e,t)=>Number.isFinite(e)&&"object"==typeof t&&(void 0===t.max||e<=t.max)&&(void 0===t.min||e>=t.min)},array:{type:"array",validate:(e,t)=>Array.isArray(e)||ArrayBuffer.isView(e)}};function Yn(e){let t=qn(e);if("object"!==t)return{value:e,...Qn[t],type:t};if("object"==typeof e)return e?void 0!==e.type?{...e,...Qn[e.type],type:e.type}:void 0===e.value?{type:"object",value:e}:(t=qn(e.value),{...e,...Qn[t],type:t}):{type:"object",value:null};throw new Error("props")}function qn(e){return Array.isArray(e)||ArrayBuffer.isView(e)?"array":typeof e}const Kn={vertex:"#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n",fragment:"#ifdef MODULE_MATERIAL\n fragColor = material_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n fragColor = lighting_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_FOG\n fragColor = fog_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_PICKING\n fragColor = picking_filterHighlightColor(fragColor);\n fragColor = picking_filterPickingColor(fragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n"},Zn=/void\s+main\s*\([^)]*\)\s*\{\n?/,Jn=/}\n?[^{}]*$/,er=[],tr="__LUMA_INJECT_DECLARATIONS__";function nr(e){const t={vertex:{},fragment:{}};for(const n in e){let r=e[n];"string"==typeof r&&(r={order:0,injection:r}),t[rr(n)][n]=r}return t}function rr(e){const t=e.slice(0,2);switch(t){case"vs":return"vertex";case"fs":return"fragment";default:throw new Error(t)}}function ir(e,t,n,r=!1){const i="vertex"===t;for(const s in n){const t=n[s];t.sort((e,t)=>e.order-t.order),er.length=t.length;for(let e=0,n=t.length;ee+r));break;case"vs:#main-end":i&&(e=e.replace(Jn,e=>r+e));break;case"fs:#decl":i||(e=e.replace(tr,r));break;case"fs:#main-start":i||(e=e.replace(Zn,e=>e+r));break;case"fs:#main-end":i||(e=e.replace(Jn,e=>r+e));break;default:e=e.replace(s,e=>e+r)}}return e=e.replace(tr,""),r&&(e=e.replace(/\}\s*$/,e=>e+Kn[t])),e}function sr(e){e.map(e=>function(e){if(e.instance)return;sr(e.dependencies||[]);const{propTypes:t={},deprecations:n=[],inject:r={}}=e,i={normalizedInjections:nr(r),parsedDeprecations:ar(n)};t&&(i.propValidators=function(e){const t={};for(const[n,r]of Object.entries(e))t[n]=Yn(r);return t}(t)),e.instance=i;let s={};t&&(s=Object.entries(t).reduce((e,[t,n])=>{const r=null==n?void 0:n.value;return r&&(e[t]=r),e},{})),e.defaultUniforms={...e.defaultUniforms,...s}}(e))}function or(e,t,n){var r;null==(r=e.deprecations)||r.forEach(e=>{var r;(null==(r=e.regex)?void 0:r.test(t))&&(e.deprecated?n.deprecated(e.old,e.new)():n.removed(e.old,e.new)())})}function ar(e){return e.forEach(e=>{"function"===e.type?e.regex=new RegExp(`\\b${e.old}\\(`):e.regex=new RegExp(`${e.type} ${e.old};`)}),e}function Ar(e){sr(e);const t={},n={};lr({modules:e,level:0,moduleMap:t,moduleDepth:n});const r=Object.keys(n).sort((e,t)=>n[t]-n[e]).map(e=>t[e]);return sr(r),r}function lr(e){const{modules:t,level:n,moduleMap:r,moduleDepth:i}=e;if(n>=5)throw new Error("Possible loop in shader dependency graph");for(const s of t)r[s.name]=s,(void 0===i[s.name]||i[s.name]e.order-t.order);for(const t of e)n+=` ${t.injection}\n`}i.footer&&(n+=` ${i.footer}`),n+="}\n"}return n}function gr(e){const t={vertex:{},fragment:{}};for(const n of e){let e,r;"string"!=typeof n?(e=n,r=e.hook):(e={},r=n),r=r.trim();const[i,s]=r.split(":"),o=r.replace(/\(.+/,""),a=Object.assign(e,{signature:s});switch(i){case"vs":t.vertex[o]=a;break;case"fs":t.fragment[o]=a;break;default:throw new Error(i)}}return t}function mr(e,t="unnamed"){const n=/#define[^\S\r\n]*SHADER_NAME[^\S\r\n]*([A-Za-z0-9_-]+)\s*/.exec(e);return n?n[1]:t}function _r(e){let t=100;const n=e.match(/[^\s]+/g);if(n&&n.length>=2&&"#version"===n[0]){const e=parseInt(n[1],10);Number.isFinite(e)&&(t=e)}if(100!==t&&300!==t)throw new Error(`Invalid GLSL version ${t}`);return t}const br=`\n\n${tr}\n`;function vr(e,t){var n;const{source:r,stage:i,modules:s,hookFunctions:o=[],inject:a={},log:A}=t;Xn("string"==typeof r,"shader source must be a string");const l=r;let c="";const u=gr(o),h={},d={},f={};for(const g in a){const e="string"==typeof a[g]?{injection:a[g],order:0}:a[g],t=/^(v|f)s:(#)?([\w-]+)$/.exec(g);if(t){const n=t[2],r=t[3];n?"decl"===r?d[g]=[e]:f[g]=[e]:h[g]=[e]}else f[g]=[e]}const p=s;for(const g of p){A&&or(g,l,A),c+=xr(g,"wgsl");const e=(null==(n=g.injections)?void 0:n[i])||{};for(const t in e){const n=/^(v|f)s:#([\w-]+)$/.exec(t);if(n){const r="decl"===n[2]?d:f;r[t]=r[t]||[],r[t].push(e[t])}else h[t]=h[t]||[],h[t].push(e[t])}}return c+=br,c=ir(c,i,d),c+=pr(u[i],h),c+=l,c=ir(c,i,f),c}function yr(e,t){var n;const{source:r,stage:i,language:s="glsl",modules:o,defines:a={},hookFunctions:A=[],inject:l={},prologue:c=!0,log:u}=t;Xn("string"==typeof r,"shader source must be a string");const h="glsl"===s?function(e){return{name:mr(e,void 0),language:"glsl",version:_r(e)}}(r).version:-1,d=e.shaderLanguageVersion,f=100===h?"#version 100":"#version 300 es",p=r.split("\n").slice(1).join("\n"),g={};o.forEach(e=>{Object.assign(g,e.defines)}),Object.assign(g,a);let m="";switch(s){case"wgsl":break;case"glsl":m=c?`${f}\n\n// ----- PROLOGUE -------------------------\n#define SHADER_TYPE_${i.toUpperCase()}\n\n${function(e){switch(null==e?void 0:e.gpu.toLowerCase()){case"apple":return"#define APPLE_GPU\n// Apple optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"nvidia":return"#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n";case"intel":return"#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"amd":return"#define AMD_GPU\n";default:return"#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Headless Chrome's software shader 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// If the GPU doesn't have full 32 bits precision, will causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n"}}(e)}\n${"fragment"===i?"precision highp float;\n":""}\n\n// ----- APPLICATION DEFINES -------------------------\n\n${function(e={}){let t="";for(const n in e){const r=e[n];(r||Number.isFinite(r))&&(t+=`#define ${n.toUpperCase()} ${e[n]}\n`)}return t}(g)}\n\n`:`${f}\n`}const _=gr(A),b={},v={},y={};for(const w in l){const e="string"==typeof l[w]?{injection:l[w],order:0}:l[w],t=/^(v|f)s:(#)?([\w-]+)$/.exec(w);if(t){const n=t[2],r=t[3];n?"decl"===r?v[w]=[e]:y[w]=[e]:b[w]=[e]}else y[w]=[e]}for(const w of o){u&&or(w,p,u),m+=xr(w,i);const e=(null==(n=w.instance)?void 0:n.normalizedInjections[i])||{};for(const t in e){const n=/^(v|f)s:#([\w-]+)$/.exec(t);if(n){const r="decl"===n[2]?v:y;r[t]=r[t]||[],r[t].push(e[t])}else b[t]=b[t]||[],b[t].push(e[t])}}return m+="// ----- MAIN SHADER SOURCE -------------------------",m+=br,m=ir(m,i,v),m+=pr(_[i],b),m+=p,m=ir(m,i,y),"glsl"===s&&h!==d&&(m=function(e,t){var n;if(300!==Number((null==(n=e.match(/^#version[ \t]+(\d+)/m))?void 0:n[1])||100))throw new Error("luma.gl v9 only supports GLSL 3.00 shader sources");switch(t){case"vertex":return dr(e,ur);case"fragment":return dr(e,hr);default:throw new Error(t)}}(m,i)),m.trim()}function wr(e){return function(t){var n;const r={};for(const i of e){const e=null==(n=i.getUniforms)?void 0:n.call(i,t,r);Object.assign(r,e)}return r}}function xr(e,t){let n;switch(t){case"vertex":n=e.vs||"";break;case"fragment":n=e.fs||"";break;case"wgsl":n=e.source||"";break;default:Xn(!1)}if(!e.name)throw new Error("Shader module must have a name");const r=e.name.toUpperCase().replace(/[^0-9a-z]/gi,"_");let i=`// ----- MODULE ${e.name} ---------------\n\n`;return"wgsl"!==t&&(i+=`#define MODULE_${r}\n`),i+=`${n}\n`,i}const Er=/^\s*\#\s*ifdef\s*([a-zA-Z_]+)\s*$/,Tr=/^\s*\#\s*endif\s*$/,Sr=class e{constructor(){r(this,"_hookFunctions",[]),r(this,"_defaultModules",[])}static getDefaultShaderAssembler(){return e.defaultShaderAssembler=e.defaultShaderAssembler||new e,e.defaultShaderAssembler}addDefaultModule(e){this._defaultModules.find(t=>t.name===("string"==typeof e?e:e.name))||this._defaultModules.push(e)}removeDefaultModule(e){const t="string"==typeof e?e:e.name;this._defaultModules=this._defaultModules.filter(e=>e.name!==t)}addShaderHook(e,t){t&&(e=Object.assign(t,{hook:e})),this._hookFunctions.push(e)}assembleWGSLShader(e){const t=this._getModuleList(e.modules),n=this._hookFunctions,{source:r,getUniforms:i}=function(e){const t=Ar(e.modules||[]);return{source:vr(e.platformInfo,{...e,source:e.source,stage:"vertex",modules:t}),getUniforms:wr(t)}}({...e,source:e.source,modules:t,hookFunctions:n}),s="wgsl"===e.platformInfo.shaderLanguage?function(e){const t=e.split("\n"),n=[];let r=!0,i=null;for(const s of t){const e=s.match(Er),t=s.match(Tr);e?(i=e[1],r=Boolean(null==void 0?void 0:undefined[i])):t?r=!0:r&&n.push(s)}return n.join("\n")}(r):r;return{source:s,getUniforms:i,modules:t}}assembleGLSLShaderPair(e){const t=this._getModuleList(e.modules),n=this._hookFunctions,r=function(e){const{vs:t,fs:n}=e,r=Ar(e.modules||[]);return{vs:yr(e.platformInfo,{...e,source:t,stage:"vertex",modules:r}),fs:yr(e.platformInfo,{...e,source:n,stage:"fragment",modules:r}),getUniforms:wr(r)}}({...e,vs:e.vs,fs:e.fs,modules:t,hookFunctions:n});return{...r,modules:t}}_getModuleList(e=[]){const t=new Array(this._defaultModules.length+e.length),n={};let r=0;for(let i=0,s=this._defaultModules.length;it===e[4]);if(!n)throw new Error(t.name);return n[0]}function Ur(e){const[,,,,t]=jr[e];return t}const jr={uint8:["uint8","u32",1,!1,Uint8Array],sint8:["sint8","i32",1,!1,Int8Array],unorm8:["uint8","f32",1,!0,Uint8Array],snorm8:["sint8","f32",1,!0,Int8Array],uint16:["uint16","u32",2,!1,Uint16Array],sint16:["sint16","i32",2,!1,Int16Array],unorm16:["uint16","u32",2,!0,Uint16Array],snorm16:["sint16","i32",2,!0,Int16Array],float16:["float16","f16",2,!1,Uint16Array],float32:["float32","f32",4,!1,Float32Array],uint32:["uint32","u32",4,!1,Uint32Array],sint32:["sint32","i32",4,!1,Int32Array]};function Gr(e){let t;e.endsWith("-webgl")&&(e.replace("-webgl",""),t=!0);const[n,r]=e.split("x"),i=n,s=r?parseInt(r):1,o=Dr(i),a={type:i,components:s,byteLength:o.byteLength*s,integer:o.integer,signed:o.signed,normalized:o.normalized};return t&&(a.webglOnly=!0),a}function zr(e,t,n){if(!t||t>4)throw new Error(`size ${t}`);const r=t;return function(e,t,n){const r=n?function(e){const t=e;switch(t){case"uint8":return"unorm8";case"sint8":return"snorm8";case"uint16":return"unorm16";case"sint16":return"snorm16";default:return t}}(e):e;switch(r){case"unorm8":return 1===t?"unorm8":3===t?"unorm8x3-webgl":`${r}x${t}`;case"snorm8":case"uint8":case"sint8":case"uint16":case"sint16":case"unorm16":case"snorm16":case"float16":if(1===t||3===t)throw new Error(`size: ${t}`);return`${r}x${t}`;default:return 1===t?r:`${r}x${t}`}}(Fr(e),r,n)}const Vr="texture-compression-bc",Wr="texture-compression-astc",Hr="texture-compression-etc2",$r="texture-compression-pvrtc-webgl",Xr="texture-compression-atc-webgl",Qr="float32-renderable-webgl",Yr="float16-renderable-webgl",qr="snorm8-renderable-webgl",Kr="norm16-renderable-webgl",Zr="snorm16-renderable-webgl",Jr="float32-filterable",ei="float16-filterable-webgl";function ti(e){const t=ni[e];if(!t)throw new Error(`Unsupported texture format ${e}`);return t}const ni={r8unorm:{},rg8unorm:{},"rgb8unorm-webgl":{},rgba8unorm:{},"rgba8unorm-srgb":{},r8snorm:{render:qr},rg8snorm:{render:qr},"rgb8snorm-webgl":{},rgba8snorm:{render:qr},r8uint:{},rg8uint:{},rgba8uint:{},r8sint:{},rg8sint:{},rgba8sint:{},bgra8unorm:{},"bgra8unorm-srgb":{},r16unorm:{f:Kr},rg16unorm:{render:Kr},"rgb16unorm-webgl":{f:Kr},rgba16unorm:{render:Kr},r16snorm:{f:Zr},rg16snorm:{render:Zr},"rgb16snorm-webgl":{f:Kr},rgba16snorm:{render:Zr},r16uint:{},rg16uint:{},rgba16uint:{},r16sint:{},rg16sint:{},rgba16sint:{},r16float:{render:Yr,filter:"float16-filterable-webgl"},rg16float:{render:Yr,filter:ei},rgba16float:{render:Yr,filter:ei},r32uint:{},rg32uint:{},rgba32uint:{},r32sint:{},rg32sint:{},rgba32sint:{},r32float:{render:Qr,filter:Jr},rg32float:{render:!1,filter:Jr},"rgb32float-webgl":{render:Qr,filter:Jr},rgba32float:{render:Qr,filter:Jr},"rgba4unorm-webgl":{channels:"rgba",bitsPerChannel:[4,4,4,4],packed:!0},"rgb565unorm-webgl":{channels:"rgb",bitsPerChannel:[5,6,5,0],packed:!0},"rgb5a1unorm-webgl":{channels:"rgba",bitsPerChannel:[5,5,5,1],packed:!0},rgb9e5ufloat:{channels:"rgb",packed:!0,render:"rgb9e5ufloat-renderable-webgl"},rg11b10ufloat:{channels:"rgb",bitsPerChannel:[11,11,10,0],packed:!0,p:1,render:Qr},rgb10a2unorm:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},rgb10a2uint:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},stencil8:{attachment:"stencil",bitsPerChannel:[8,0,0,0],dataType:"uint8"},depth16unorm:{attachment:"depth",bitsPerChannel:[16,0,0,0],dataType:"uint16"},depth24plus:{attachment:"depth",bitsPerChannel:[24,0,0,0],dataType:"uint32"},depth32float:{attachment:"depth",bitsPerChannel:[32,0,0,0],dataType:"float32"},"depth24plus-stencil8":{attachment:"depth-stencil",bitsPerChannel:[24,8,0,0],packed:!0},"depth32float-stencil8":{attachment:"depth-stencil",bitsPerChannel:[32,8,0,0],packed:!0},"bc1-rgb-unorm-webgl":{f:Vr},"bc1-rgb-unorm-srgb-webgl":{f:Vr},"bc1-rgba-unorm":{f:Vr},"bc1-rgba-unorm-srgb":{f:Vr},"bc2-rgba-unorm":{f:Vr},"bc2-rgba-unorm-srgb":{f:Vr},"bc3-rgba-unorm":{f:Vr},"bc3-rgba-unorm-srgb":{f:Vr},"bc4-r-unorm":{f:Vr},"bc4-r-snorm":{f:Vr},"bc5-rg-unorm":{f:Vr},"bc5-rg-snorm":{f:Vr},"bc6h-rgb-ufloat":{f:Vr},"bc6h-rgb-float":{f:Vr},"bc7-rgba-unorm":{f:Vr},"bc7-rgba-unorm-srgb":{f:Vr},"etc2-rgb8unorm":{f:Hr},"etc2-rgb8unorm-srgb":{f:Hr},"etc2-rgb8a1unorm":{f:Hr},"etc2-rgb8a1unorm-srgb":{f:Hr},"etc2-rgba8unorm":{f:Hr},"etc2-rgba8unorm-srgb":{f:Hr},"eac-r11unorm":{f:Hr},"eac-r11snorm":{f:Hr},"eac-rg11unorm":{f:Hr},"eac-rg11snorm":{f:Hr},"astc-4x4-unorm":{f:Wr},"astc-4x4-unorm-srgb":{f:Wr},"astc-5x4-unorm":{f:Wr},"astc-5x4-unorm-srgb":{f:Wr},"astc-5x5-unorm":{f:Wr},"astc-5x5-unorm-srgb":{f:Wr},"astc-6x5-unorm":{f:Wr},"astc-6x5-unorm-srgb":{f:Wr},"astc-6x6-unorm":{f:Wr},"astc-6x6-unorm-srgb":{f:Wr},"astc-8x5-unorm":{f:Wr},"astc-8x5-unorm-srgb":{f:Wr},"astc-8x6-unorm":{f:Wr},"astc-8x6-unorm-srgb":{f:Wr},"astc-8x8-unorm":{f:Wr},"astc-8x8-unorm-srgb":{f:Wr},"astc-10x5-unorm":{f:Wr},"astc-10x5-unorm-srgb":{f:Wr},"astc-10x6-unorm":{f:Wr},"astc-10x6-unorm-srgb":{f:Wr},"astc-10x8-unorm":{f:Wr},"astc-10x8-unorm-srgb":{f:Wr},"astc-10x10-unorm":{f:Wr},"astc-10x10-unorm-srgb":{f:Wr},"astc-12x10-unorm":{f:Wr},"astc-12x10-unorm-srgb":{f:Wr},"astc-12x12-unorm":{f:Wr},"astc-12x12-unorm-srgb":{f:Wr},"pvrtc-rgb4unorm-webgl":{f:$r},"pvrtc-rgba4unorm-webgl":{f:$r},"pvrtc-rbg2unorm-webgl":{f:$r},"pvrtc-rgba2unorm-webgl":{f:$r},"etc1-rbg-unorm-webgl":{f:"texture-compression-etc1-webgl"},"atc-rgb-unorm-webgl":{f:Xr},"atc-rgba-unorm-webgl":{f:Xr},"atc-rgbai-unorm-webgl":{f:Xr}},ri=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],ii=/^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/,si=new class{getInfo(e){return oi(e)}isColor(e){return e.startsWith("rgba")||e.startsWith("bgra")||e.startsWith("rgb")}isDepthStencil(e){return e.startsWith("depth")||e.startsWith("stencil")}isCompressed(e){return ri.some(t=>e.startsWith(t))}getCapabilities(e){const t=ti(e),n={format:e,create:t.f??!0,render:t.render??!0,filter:t.filter??!0,blend:t.blend??!0,store:t.store??!0},r=oi(e),i=e.startsWith("depth")||e.startsWith("stencil"),s=null==r?void 0:r.signed,o=null==r?void 0:r.integer,a=null==r?void 0:r.webgl;return n.render&&(n.render=!s),n.filter&&(n.filter=!(i||s||o||a)),n}};function oi(e){let t=function(e){var t;const n=ti(e),r=n.bytesPerPixel||1,i=n.bitsPerChannel||[8,8,8,8];delete n.bitsPerChannel,delete n.bytesPerPixel,delete n.f,delete n.render,delete n.filter,delete n.blend,delete n.store;return{...n,format:e,attachment:n.attachment||"color",channels:n.channels||"r",components:n.components||(null==(t=n.channels)?void 0:t.length)||1,bytesPerPixel:r,bitsPerChannel:i,dataType:n.dataType||"uint8",srgb:n.srgb??!1,packed:n.packed??!1,webgl:n.webgl??!1,integer:n.integer??!1,signed:n.signed??!1,normalized:n.normalized??!1,compressed:n.compressed??!1}}(e);if(si.isCompressed(e)){t.channels="rgb",t.components=3,t.bytesPerPixel=1,t.srgb=!1,t.compressed=!0;const n=function(e){const t=/.*-(\d+)x(\d+)-.*/.exec(e);if(t){const[,e,n]=t;return{blockWidth:Number(e),blockHeight:Number(n)}}return null}(e);n&&(t.blockWidth=n.blockWidth,t.blockHeight=n.blockHeight)}const n=ii.exec(e);if(n){const[,r,i,s,o,a]=n,A=Dr(`${s}${i}`),l=8*A.byteLength,c=r.length,u=[l,c>=2?l:0,c>=3?l:0,c>=4?l:0];t={format:e,attachment:t.attachment,dataType:A.signedType,components:c,channels:r,integer:A.integer,signed:A.signed,normalized:A.normalized,bitsPerChannel:u,bytesPerPixel:A.byteLength*r.length,packed:t.packed,srgb:t.srgb},"-webgl"===a&&(t.webgl=!0),"-srgb"===o&&(t.srgb=!0)}return e.endsWith("-webgl")&&(t.webgl=!0),e.endsWith("-srgb")&&(t.srgb=!0),t}class ai{}class Ai{constructor(e=[],t){r(this,"features"),r(this,"disabledFeatures"),this.features=new Set(e),this.disabledFeatures=t||{}}*[Symbol.iterator](){yield*this.features}has(e){var t;return!(null==(t=this.disabledFeatures)?void 0:t[e])&&this.features.has(e)}}const li=class e{constructor(t){r(this,"id"),r(this,"props"),r(this,"userData",{}),r(this,"statsManager",Rr),r(this,"timestamp",0),r(this,"_reused",!1),r(this,"_lumaData",{}),r(this,"_textureCaps",{}),this.props={...e.defaultProps,...t},this.id=this.props.id||Mr(this[Symbol.toStringTag].toLowerCase())}get[Symbol.toStringTag](){return"Device"}toString(){return`Device(${this.id})`}getVertexFormatInfo(e){return Gr(e)}isVertexFormatSupported(e){return!0}getTextureFormatInfo(e){return si.getInfo(e)}getTextureFormatCapabilities(e){let t=this._textureCaps[e];if(!t){const n=this._getDeviceTextureFormatCapabilities(e);t=this._getDeviceSpecificTextureFormatCapabilities(n),this._textureCaps[e]=t}return t}getMipLevelCount(e,t,n=1){const r=Math.max(e,t,n);return 1+Math.floor(Math.log2(r))}isExternalImage(e){return function(e){return"undefined"!=typeof ImageData&&e instanceof ImageData||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas}(e)}getExternalImageSize(e){return function(e){if("undefined"!=typeof ImageData&&e instanceof ImageData||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return{width:e.width,height:e.height};if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement)return{width:e.naturalWidth,height:e.naturalHeight};if("undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement)return{width:e.videoWidth,height:e.videoHeight};if("undefined"!=typeof VideoFrame&&e instanceof VideoFrame)return{width:e.displayWidth,height:e.displayHeight};throw new Error("Unknown image type")}(e)}isTextureFormatSupported(e){return this.getTextureFormatCapabilities(e).create}isTextureFormatFilterable(e){return this.getTextureFormatCapabilities(e).filter}isTextureFormatRenderable(e){return this.getTextureFormatCapabilities(e).render}isTextureFormatCompressed(e){return si.isCompressed(e)}pushDebugGroup(e){this.commandEncoder.pushDebugGroup(e)}popDebugGroup(){var e;null==(e=this.commandEncoder)||e.popDebugGroup()}insertDebugMarker(e){var t;null==(t=this.commandEncoder)||t.insertDebugMarker(e)}loseDevice(){return!1}incrementTimestamp(){return this.timestamp++}reportError(e,t,...n){return this.props.onError(e,t)?()=>{}:Pr.error(e.message,t,...n)}debug(){if(this.props.debug);else{const e="'Type luma.log.set({debug: true}) in console to enable debug breakpoints',\nor create a device with the 'debug: true' prop.";Pr.once(0,e)()}}getDefaultCanvasContext(){if(!this.canvasContext)throw new Error("Device has no default CanvasContext. See props.createCanvasContext");return this.canvasContext}beginRenderPass(e){return this.commandEncoder.beginRenderPass(e)}beginComputePass(e){return this.commandEncoder.beginComputePass(e)}getCanvasContext(){return this.getDefaultCanvasContext()}readPixelsToArrayWebGL(e,t){throw new Error("not implemented")}readPixelsToBufferWebGL(e,t){throw new Error("not implemented")}setParametersWebGL(e){throw new Error("not implemented")}getParametersWebGL(e){throw new Error("not implemented")}withParametersWebGL(e,t){throw new Error("not implemented")}clearWebGL(e){throw new Error("not implemented")}resetWebGL(){throw new Error("not implemented")}static _getCanvasContextProps(e){return!0===e.createCanvasContext?{}:e.createCanvasContext}_getDeviceTextureFormatCapabilities(e){const t=si.getCapabilities(e),n=e=>("string"==typeof e?this.features.has(e):e)??!0,r=n(t.create);return{format:e,create:r,render:r&&n(t.render),filter:r&&n(t.filter),blend:r&&n(t.blend),store:r&&n(t.store)}}_normalizeBufferProps(e){(e instanceof ArrayBuffer||ArrayBuffer.isView(e))&&(e={data:e});const t={...e};if((e.usage||0)&Br.INDEX&&(e.indexType||(e.data instanceof Uint32Array?t.indexType="uint32":e.data instanceof Uint16Array&&(t.indexType="uint16")),!t.indexType))throw new Error("indices buffer content must be of type uint16 or uint32");return t}};r(li,"defaultProps",{id:null,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,createCanvasContext:void 0,webgl:{},onError:(e,t)=>{},onResize:(e,t)=>{const[n,r]=e.getDevicePixelSize();Pr.log(1,`${e} resized => ${n}x${r}px`)()},onPositionChange:(e,t)=>{const[n,r]=e.getPosition();Pr.log(1,`${e} repositioned => ${n},${r}`)()},onVisibilityChange:e=>Pr.log(1,`${e} Visibility changed ${e.isVisible}`)(),onDevicePixelRatioChange:(e,t)=>Pr.log(1,`${e} DPR changed ${t.oldRatio} => ${e.devicePixelRatio}`)(),debug:Pr.get("debug")||void 0,debugShaders:Pr.get("debug-shaders")||void 0,debugFramebuffers:Boolean(Pr.get("debug-framebuffers")),debugFactories:Boolean(Pr.get("debug-factories")),debugWebGL:Boolean(Pr.get("debug-webgl")),debugSpectorJS:void 0,debugSpectorJSUrl:void 0,_reuseDevices:!1,_requestMaxLimits:!0,_cacheShaders:!1,_cachePipelines:!1,_cacheDestroyPolicy:"unused",_initializeFeatures:!0,_disabledFeatures:{"compilation-status-async-webgl":!0},_handle:void 0});let ci=li;const ui="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.",hi=class e{constructor(){if(r(this,"stats",Rr),r(this,"log",Pr),r(this,"VERSION","9.2.5"),r(this,"spector"),r(this,"preregisteredAdapters",new Map),globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw Pr.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),Pr.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");Pr.error("This version of luma.gl has already been initialized")()}Pr.log(1,`${this.VERSION} - set luma.log.level=1 (or higher) to trace rendering`)(),globalThis.luma=this}async createDevice(t={}){const n={...e.defaultProps,...t},r=this.selectAdapter(n.type,n.adapters);if(!r)throw new Error(ui);return n.waitForPageLoad&&await r.pageLoaded,await r.create(n)}async attachDevice(e,t){var n;const r=this._getTypeFromHandle(e,t.adapters),i=r&&this.selectAdapter(r,t.adapters);if(!i)throw new Error(ui);return await(null==(n=null==i?void 0:i.attach)?void 0:n.call(i,e,t))}registerAdapters(e){for(const t of e)this.preregisteredAdapters.set(t.type,t)}getSupportedAdapters(e=[]){const t=this._getAdapterMap(e);return Array.from(t).map(([,e])=>e).filter(e=>{var t;return null==(t=e.isSupported)?void 0:t.call(e)}).map(e=>e.type)}getBestAvailableAdapterType(e=[]){var t,n;const r=["webgpu","webgl","null"],i=this._getAdapterMap(e);for(const s of r)if(null==(n=null==(t=i.get(s))?void 0:t.isSupported)?void 0:n.call(t))return s;return null}selectAdapter(e,t=[]){let n=e;"best-available"===e&&(n=this.getBestAvailableAdapterType(t));const r=this._getAdapterMap(t);return n&&r.get(n)||null}enforceWebGL2(e=!0,t=[]){var n;const r=this._getAdapterMap(t).get("webgl");r||Pr.warn("enforceWebGL2: webgl adapter not found")(),null==(n=null==r?void 0:r.enforceWebGL2)||n.call(r,e)}setDefaultDeviceProps(t){Object.assign(e.defaultProps,t)}_getAdapterMap(e=[]){const t=new Map(this.preregisteredAdapters);for(const n of e)t.set(n.type,n);return t}_getTypeFromHandle(e,t=[]){return e instanceof WebGL2RenderingContext?"webgl":"undefined"!=typeof GPUDevice&&e instanceof GPUDevice||(null==e?void 0:e.queue)?"webgpu":null===e?"null":(e instanceof WebGLRenderingContext?Pr.warn("WebGL1 is not supported",e)():Pr.warn("Unknown handle type",e)(),null)}};r(hi,"defaultProps",{...ci.defaultProps,type:"best-available",adapters:void 0,waitForPageLoad:!0});const di=new hi;class fi{get pageLoaded(){return mi||(mi=gi()||"undefined"==typeof window?Promise.resolve():new Promise(e=>window.addEventListener("load",()=>e()))),mi}}const pi=Ue()&&"undefined"!=typeof document,gi=()=>pi&&"complete"===document.readyState;let mi=null;const _i=class e{constructor(t){var n,i;if(r(this,"id"),r(this,"props"),r(this,"canvas"),r(this,"htmlCanvas"),r(this,"offscreenCanvas"),r(this,"type"),r(this,"initialized"),r(this,"isInitialized",!1),r(this,"isVisible",!0),r(this,"cssWidth"),r(this,"cssHeight"),r(this,"devicePixelRatio"),r(this,"devicePixelWidth"),r(this,"devicePixelHeight"),r(this,"drawingBufferWidth"),r(this,"drawingBufferHeight"),r(this,"_initializedResolvers",function(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}()),r(this,"_resizeObserver"),r(this,"_intersectionObserver"),r(this,"_position"),r(this,"destroyed",!1),this.props={...e.defaultProps,...t},t=this.props,this.initialized=this._initializedResolvers.promise,Ue()?t.canvas?"string"==typeof t.canvas?this.canvas=function(e){const t=document.getElementById(e);if(!bi.isHTMLCanvas(t))throw new Error("Object is not a canvas element");return t}(t.canvas):this.canvas=t.canvas:this.canvas=function(e){const{width:t,height:n}=e,r=document.createElement("canvas");r.id=Mr("lumagl-auto-created-canvas"),r.width=t||1,r.height=n||1,r.style.width=Number.isFinite(t)?`${t}px`:"100%",r.style.height=Number.isFinite(n)?`${n}px`:"100%",(null==e?void 0:e.visible)||(r.style.visibility="hidden");const i=function(e){if("string"==typeof e){const t=document.getElementById(e);if(!t)throw new Error(`${e} is not an HTML element`);return t}return e||document.body}((null==e?void 0:e.container)||null);return i.insertBefore(r,i.firstChild),r}(t):this.canvas={width:t.width||1,height:t.height||1},e.isHTMLCanvas(this.canvas)?(this.id=t.id||this.canvas.id,this.type="html-canvas",this.htmlCanvas=this.canvas):e.isOffscreenCanvas(this.canvas)?(this.id=t.id||"offscreen-canvas",this.type="offscreen-canvas",this.offscreenCanvas=this.canvas):(this.id=t.id||"node-canvas-context",this.type="node"),this.cssWidth=(null==(n=this.htmlCanvas)?void 0:n.clientWidth)||this.canvas.width,this.cssHeight=(null==(i=this.htmlCanvas)?void 0:i.clientHeight)||this.canvas.height,this.devicePixelWidth=this.canvas.width,this.devicePixelHeight=this.canvas.height,this.drawingBufferWidth=this.canvas.width,this.drawingBufferHeight=this.canvas.height,this.devicePixelRatio=globalThis.devicePixelRatio||1,this._position=[0,0],e.isHTMLCanvas(this.canvas)){this._intersectionObserver=new IntersectionObserver(e=>this._handleIntersection(e)),this._intersectionObserver.observe(this.canvas),this._resizeObserver=new ResizeObserver(e=>this._handleResize(e));try{this._resizeObserver.observe(this.canvas,{box:"device-pixel-content-box"})}catch{this._resizeObserver.observe(this.canvas,{box:"content-box"})}setTimeout(()=>this._observeDevicePixelRatio(),0),this.props.trackPosition&&this._trackPosition()}}static isHTMLCanvas(e){return"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement}static isOffscreenCanvas(e){return"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas}toString(){return`${this[Symbol.toStringTag]}(${this.id})`}destroy(){this.destroyed=!0}setProps(e){return"useDevicePixels"in e&&(this.props.useDevicePixels=e.useDevicePixels||!1,this._updateDrawingBufferSize()),this}getCSSSize(){return[this.cssWidth,this.cssHeight]}getPosition(){return this._position}getDevicePixelSize(){return[this.devicePixelWidth,this.devicePixelHeight]}getDrawingBufferSize(){return[this.drawingBufferWidth,this.drawingBufferHeight]}getMaxDrawingBufferSize(){const e=this.device.limits.maxTextureDimension2D;return[e,e]}setDrawingBufferSize(e,t){this.canvas.width=e,this.canvas.height=t,this.drawingBufferWidth=e,this.drawingBufferHeight=t}getDevicePixelRatio(){return"undefined"!=typeof window&&window.devicePixelRatio||1}cssToDevicePixels(e,t=!0){const n=this.cssToDeviceRatio(),[r,i]=this.getDrawingBufferSize();return function(e,t,n,r,i){const s=e,o=vi(s[0],t,n);let a=yi(s[1],t,r,i),A=vi(s[0]+1,t,n);const l=A===n-1?A:A-1;let c;return A=yi(s[1]+1,t,r,i),i?(A=0===A?A:A+1,c=a,a=A):c=A===r-1?A:A-1,{x:o,y:a,width:Math.max(l-o+1,1),height:Math.max(c-a+1,1)}}(e,n,r,i,t)}getPixelSize(){return this.getDevicePixelSize()}getAspect(){const[e,t]=this.getDevicePixelSize();return e/t}cssToDeviceRatio(){try{const[e]=this.getDrawingBufferSize(),[t]=this.getCSSSize();return t?e/t:1}catch{return 1}}resize(e){this.setDrawingBufferSize(e.width,e.height)}_setAutoCreatedCanvasId(e){var t;"lumagl-auto-created-canvas"===(null==(t=this.htmlCanvas)?void 0:t.id)&&(this.htmlCanvas.id=e)}_handleIntersection(e){const t=e.find(e=>e.target===this.canvas);if(!t)return;const n=t.isIntersecting;this.isVisible!==n&&(this.isVisible=n,this.device.props.onVisibilityChange(this))}_handleResize(e){var t,n;const r=e.find(e=>e.target===this.canvas);if(!r)return;this.cssWidth=r.contentBoxSize[0].inlineSize,this.cssHeight=r.contentBoxSize[0].blockSize;const i=this.getDevicePixelSize(),s=(null==(t=r.devicePixelContentBoxSize)?void 0:t[0].inlineSize)||r.contentBoxSize[0].inlineSize*devicePixelRatio,o=(null==(n=r.devicePixelContentBoxSize)?void 0:n[0].blockSize)||r.contentBoxSize[0].blockSize*devicePixelRatio,[a,A]=this.getMaxDrawingBufferSize();this.devicePixelWidth=Math.max(1,Math.min(s,a)),this.devicePixelHeight=Math.max(1,Math.min(o,A)),this._updateDrawingBufferSize(),this.device.props.onResize(this,{oldPixelSize:i})}_updateDrawingBufferSize(){if(this.props.autoResize){if("number"==typeof this.props.useDevicePixels){const e=this.props.useDevicePixels;this.setDrawingBufferSize(this.cssWidth*e,this.cssHeight*e)}else this.props.useDevicePixels?this.setDrawingBufferSize(this.devicePixelWidth,this.devicePixelHeight):this.setDrawingBufferSize(this.cssWidth,this.cssHeight);this._updateDevice()}this._initializedResolvers.resolve(),this.isInitialized=!0,this.updatePosition()}_observeDevicePixelRatio(){const e=this.devicePixelRatio;this.devicePixelRatio=window.devicePixelRatio,this.updatePosition(),this.device.props.onDevicePixelRatioChange(this,{oldRatio:e}),matchMedia(`(resolution: ${this.devicePixelRatio}dppx)`).addEventListener("change",()=>this._observeDevicePixelRatio(),{once:!0})}_trackPosition(e=100){const t=setInterval(()=>{this.destroyed?clearInterval(t):this.updatePosition()},e)}updatePosition(){var e,t,n;const r=null==(e=this.htmlCanvas)?void 0:e.getBoundingClientRect();if(r){const e=[r.left,r.top];if(this._position??(this._position=e),e[0]!==this._position[0]||e[1]!==this._position[1]){const r=this._position;this._position=e,null==(n=(t=this.device.props).onPositionChange)||n.call(t,this,{oldPosition:r})}}}};r(_i,"defaultProps",{id:void 0,canvas:null,width:800,height:600,useDevicePixels:!0,autoResize:!0,container:null,visible:!0,alphaMode:"opaque",colorSpace:"srgb",trackPosition:!1});let bi=_i;function vi(e,t,n){return Math.min(Math.round(e*t),n-1)}function yi(e,t,n,r){return r?Math.max(0,n-1-Math.round(e*t)):Math.min(Math.round(e*t),n-1)}const wi=class e extends Lr{get[Symbol.toStringTag](){return"Sampler"}constructor(t,n){super(t,n=e.normalizeProps(t,n),e.defaultProps)}static normalizeProps(e,t){return t}};r(wi,"defaultProps",{...Lr.defaultProps,type:"color-sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"none",lodMinClamp:0,lodMaxClamp:32,compare:"less-equal",maxAnisotropy:1});let xi=wi;const Ei={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},Ti=class e extends Lr{constructor(t,n){if(super(t,n=e.normalizeProps(t,n),e.defaultProps),r(this,"dimension"),r(this,"baseDimension"),r(this,"format"),r(this,"width"),r(this,"height"),r(this,"depth"),r(this,"mipLevels"),r(this,"updateTimestamp"),this.dimension=this.props.dimension,this.baseDimension=Ei[this.dimension],this.format=this.props.format,this.width=this.props.width,this.height=this.props.height,this.depth=this.props.depth,this.mipLevels=this.props.mipLevels,void 0===this.props.width||void 0===this.props.height)if(t.isExternalImage(n.data)){const e=t.getExternalImageSize(n.data);this.width=(null==e?void 0:e.width)||1,this.height=(null==e?void 0:e.height)||1}else this.width=1,this.height=1,void 0!==this.props.width&&void 0!==this.props.height||Pr.warn(`${this} created with undefined width or height. This is deprecated. Use AsyncTexture instead.`)();this.updateTimestamp=t.incrementTimestamp()}get[Symbol.toStringTag](){return"Texture"}toString(){return`Texture(${this.id},${this.format},${this.width}x${this.height})`}setSampler(e){this.sampler=e instanceof xi?e:this.device.createSampler(e)}clone(e){return this.device.createTexture({...this.props,...e})}static normalizeProps(e,t){const n={...t},{width:r,height:i}=n;return"number"==typeof r&&(n.width=Math.max(1,Math.ceil(r))),"number"==typeof i&&(n.height=Math.max(1,Math.ceil(i))),n}_initializeData(e){this.device.isExternalImage(e)?this.copyExternalImage({image:e,width:this.width,height:this.height,depth:this.depth,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}):e&&this.copyImageData({data:e,mipLevel:0,x:0,y:0,z:0,aspect:"all"})}_normalizeCopyImageDataOptions(t){const{width:n,height:r,depth:i}=this,s={...e.defaultCopyDataOptions,width:n,height:r,depth:i,...t},o=this.device.getTextureFormatInfo(this.format);if(!t.bytesPerRow&&!o.bytesPerPixel)throw new Error(`bytesPerRow must be provided for texture format ${this.format}`);return s.bytesPerRow=t.bytesPerRow||n*(o.bytesPerPixel||4),s.rowsPerImage=t.rowsPerImage||r,s}_normalizeCopyExternalImageOptions(t){const n=this.device.getExternalImageSize(t.image),r={...e.defaultCopyExternalImageOptions,...n,...t};return r.width=Math.min(r.width,this.width-r.x),r.height=Math.min(r.height,this.height-r.y),r}};r(Ti,"SAMPLE",4),r(Ti,"STORAGE",8),r(Ti,"RENDER",16),r(Ti,"COPY_SRC",1),r(Ti,"COPY_DST",2),r(Ti,"TEXTURE",4),r(Ti,"RENDER_ATTACHMENT",16),r(Ti,"defaultProps",{...Lr.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",usage:Ti.TEXTURE|Ti.RENDER_ATTACHMENT|Ti.COPY_DST,width:void 0,height:void 0,depth:1,mipLevels:1,samples:void 0,sampler:{},view:void 0}),r(Ti,"defaultCopyDataOptions",{data:void 0,byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,mipLevel:0,x:0,y:0,z:0,aspect:"all"}),r(Ti,"defaultCopyExternalImageOptions",{image:void 0,sourceX:0,sourceY:0,width:void 0,height:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1});let Si=Ti;const Ci=class e extends Lr{get[Symbol.toStringTag](){return"TextureView"}constructor(t,n){super(t,n,e.defaultProps)}};r(Ci,"defaultProps",{...Lr.defaultProps,format:void 0,dimension:void 0,aspect:"all",baseMipLevel:0,mipLevelCount:void 0,baseArrayLayer:0,arrayLayerCount:void 0});let ki=Ci;function Ri(e,t,n,r){if(null==r?void 0:r.inlineSource){const r=function(e,t){let n="";for(let r=t-2;r<=t;r++){const i=e[r-1];void 0!==i&&(n+=Pi(i,t,undefined))}return n}(t,n);return`\n${r}${e.linePos>0?`${" ".repeat(e.linePos+5)}^^^\n`:""}${e.type.toUpperCase()}: ${e.message}\n\n`}const i="error"===e.type?"red":"#8B4000";return(null==r?void 0:r.html)?`
${e.type.toUpperCase()}: ${e.message}
`:`${e.type.toUpperCase()}: ${e.message}`}function Pi(e,t,n){const r=(null==n?void 0:n.html)?e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'"):e;return`${function(e){let t="";for(let n=e.length;n<4;++n)t+=" ";return t+e}(String(t))}: ${r}${(null==n?void 0:n.html)?"
":"\n"}`}const Ii=class e extends Lr{constructor(t,n){super(t,{id:Li(n={...n,debugShaders:n.debugShaders||t.props.debugShaders||"errors"}),...n},e.defaultProps),r(this,"stage"),r(this,"source"),r(this,"compilationStatus","pending"),this.stage=this.props.stage,this.source=this.props.source}get[Symbol.toStringTag](){return"Shader"}getCompilationInfoSync(){return null}getTranslatedSource(){return null}async debugShader(){const e=this.props.debugShaders;switch(e){case"never":return;case"errors":if("success"===this.compilationStatus)return}const t=await this.getCompilationInfo();"warnings"===e&&0===(null==t?void 0:t.length)||this._displayShaderLog(t,this.id)}_displayShaderLog(e,t){var n;if("undefined"==typeof document||!(null==document?void 0:document.createElement))return;const r=t,i=`${this.stage} shader "${r}"`;let s=function(e,t,n){let r="";const i=t.split(/\r?\n/),s=e.slice().sort((e,t)=>e.lineNum-t.lineNum);switch((null==n?void 0:n.showSourceCode)||"no"){case"all":let t=0;for(let e=1;e<=i.length;e++)for(r+=Pi(i[e-1],e,n);s.length>t&&s[t].lineNum===e;){const e=s[t++];r+=Ri(e,i,e.lineNum,{...n,inlineSource:!1})}for(;s.length>t;)r+=Ri(s[t++],[],0,{...n,inlineSource:!1});return r;case"issues":case"no":for(const s of e)r+=Ri(s,i,s.lineNum,{inlineSource:"no"!==(null==n?void 0:n.showSourceCode)});return r}}(e,this.source,{showSourceCode:"all",html:!0});const o=this.getTranslatedSource();o&&(s+=`

Translated Source



${o}
`);const a=document.createElement("Button");a.innerHTML=`\n

Compilation error in ${i}



\n
\n${s}\n
`,a.style.top="10px",a.style.left="10px",a.style.position="absolute",a.style.zIndex="9999",a.style.width="100%",a.style.textAlign="left",document.body.appendChild(a),null==(n=document.getElementsByClassName("luma-compiler-log-error")[0])||n.scrollIntoView(),a.onclick=()=>{const e=`data:text/plain,${encodeURIComponent(this.source)}`;navigator.clipboard.writeText(e)}}};r(Ii,"defaultProps",{...Lr.defaultProps,language:"auto",stage:void 0,source:"",sourceMap:null,entryPoint:"main",debugShaders:void 0});let Mi=Ii;function Li(e){return function(e,t="unnamed"){const n=/#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/.exec(e);return n?n[1]:t}(e.source)||e.id||Mr(`unnamed ${e.stage}-shader`)}const Ni=class e extends Lr{constructor(t,n={}){super(t,n,e.defaultProps),r(this,"width"),r(this,"height"),this.width=this.props.width,this.height=this.props.height}get[Symbol.toStringTag](){return"Framebuffer"}clone(e){const t=this.colorAttachments.map(t=>t.texture.clone(e)),n=this.depthStencilAttachment&&this.depthStencilAttachment.texture.clone(e);return this.device.createFramebuffer({...this.props,colorAttachments:t,depthStencilAttachment:n})}resize(e){let t=!e;if(e){const[n,r]=Array.isArray(e)?e:[e.width,e.height];t=t||r!==this.height||n!==this.width,this.width=n,this.height=r}t&&(Pr.log(2,`Resizing framebuffer ${this.id} to ${this.width}x${this.height}`)(),this.resizeAttachments(this.width,this.height))}autoCreateAttachmentTextures(){if(0===this.props.colorAttachments.length&&!this.props.depthStencilAttachment)throw new Error("Framebuffer has noattachments");this.colorAttachments=this.props.colorAttachments.map((e,t)=>{if("string"==typeof e){const n=this.createColorTexture(e,t);return this.attachResource(n),n.view}return e instanceof Si?e.view:e});const e=this.props.depthStencilAttachment;if(e)if("string"==typeof e){const t=this.createDepthStencilTexture(e);this.attachResource(t),this.depthStencilAttachment=t.view}else this.depthStencilAttachment=e instanceof Si?e.view:e}createColorTexture(e,t){return this.device.createTexture({id:`${this.id}-color-attachment-${t}`,usage:Si.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height,sampler:{magFilter:"linear",minFilter:"linear"}})}createDepthStencilTexture(e){return this.device.createTexture({id:`${this.id}-depth-stencil-attachment`,usage:Si.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height})}resizeAttachments(e,t){for(let n=0;n":["f32",2],"vec3":["f32",3],"vec4":["f32",4],f16:["f16",1],"vec2":["f16",2],"vec3":["f16",3],"vec4":["f16",4],i32:["i32",1],"vec2":["i32",2],"vec3":["i32",3],"vec4":["i32",4],u32:["u32",1],"vec2":["u32",2],"vec3":["u32",3],"vec4":["u32",4]},Yi={f32:{type:"f32",components:1},f16:{type:"f16",components:1},i32:{type:"i32",components:1},u32:{type:"u32",components:1},"vec2":{type:"f32",components:2},"vec3":{type:"f32",components:3},"vec4":{type:"f32",components:4},"vec2":{type:"f16",components:2},"vec3":{type:"f16",components:3},"vec4":{type:"f16",components:4},"vec2":{type:"i32",components:2},"vec3":{type:"i32",components:3},"vec4":{type:"i32",components:4},"vec2":{type:"u32",components:2},"vec3":{type:"u32",components:3},"vec4":{type:"u32",components:4},"mat2x2":{type:"f32",components:4},"mat2x3":{type:"f32",components:6},"mat2x4":{type:"f32",components:8},"mat3x2":{type:"f32",components:6},"mat3x3":{type:"f32",components:9},"mat3x4":{type:"f32",components:12},"mat4x2":{type:"f32",components:8},"mat4x3":{type:"f32",components:12},"mat4x4":{type:"f32",components:16},"mat2x2":{type:"f16",components:4},"mat2x3":{type:"f16",components:6},"mat2x4":{type:"f16",components:8},"mat3x2":{type:"f16",components:6},"mat3x3":{type:"f16",components:9},"mat3x4":{type:"f16",components:12},"mat4x2":{type:"f16",components:8},"mat4x3":{type:"f16",components:12},"mat4x4":{type:"f16",components:16},"mat2x2":{type:"i32",components:4},"mat2x3":{type:"i32",components:6},"mat2x4":{type:"i32",components:8},"mat3x2":{type:"i32",components:6},"mat3x3":{type:"i32",components:9},"mat3x4":{type:"i32",components:12},"mat4x2":{type:"i32",components:8},"mat4x3":{type:"i32",components:12},"mat4x4":{type:"i32",components:16},"mat2x2":{type:"u32",components:4},"mat2x3":{type:"u32",components:6},"mat2x4":{type:"u32",components:8},"mat3x2":{type:"u32",components:6},"mat3x3":{type:"u32",components:9},"mat3x4":{type:"u32",components:12},"mat4x2":{type:"u32",components:8},"mat4x3":{type:"u32",components:12},"mat4x4":{type:"u32",components:16}};function qi(e,t){const n={};for(const r of e.attributes){const i=Ki(e,t,r.name);i&&(n[r.name]=i)}return n}function Ki(e,t,n){const r=function(e,t){const n=e.attributes.find(e=>e.name===t);return n||Pr.warn(`shader layout attribute "${t}" not present in shader`),n||null}(e,n),i=function(e,t){!function(e){for(const t of e)(t.attributes&&t.format||!t.attributes&&!t.format)&&Pr.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`)}(e);let n=function(e,t){for(const n of e)if(n.format&&n.name===t)return{attributeName:n.name,bufferName:t,stepMode:n.stepMode,vertexFormat:n.format,byteOffset:0,byteStride:n.byteStride||0};return null}(e,t);return n||(n=function(e,t){var n;for(const r of e){let e=r.byteStride;if("number"!=typeof r.byteStride)for(const t of r.attributes||[])e+=Gr(t.format).byteLength;const i=null==(n=r.attributes)?void 0:n.find(e=>e.attribute===t);if(i)return{attributeName:i.attribute,bufferName:r.name,stepMode:r.stepMode,vertexFormat:i.format,byteOffset:i.byteOffset,byteStride:e}}return null}(e,t),n||(Pr.warn(`layout for attribute "${t}" not present in buffer layout`),null))}(t,n);if(!r)return null;const s=function(e){const[t,n]=Qi[e];return{primitiveType:t,components:n,byteLength:Xi[t]*n,integer:"i32"===t||"u32"===t,signed:"u32"!==t}}(r.type),o=function(e){let t;switch(e.primitiveType){case"f32":t="float32";break;case"i32":t="sint32";break;case"u32":t="uint32";break;case"f16":return e.components<=2?"float16x2":"float16x4"}return 1===e.components?t:`${t}x${e.components}`}(s),a=(null==i?void 0:i.vertexFormat)||o,A=Gr(a);return{attributeName:(null==i?void 0:i.attributeName)||r.name,bufferName:(null==i?void 0:i.bufferName)||r.name,location:r.location,shaderType:r.type,primitiveType:s.primitiveType,shaderComponents:s.components,vertexFormat:a,bufferDataType:A.type,bufferComponents:A.components,normalized:A.normalized,integer:s.integer,stepMode:(null==i?void 0:i.stepMode)||r.stepMode||"vertex",byteOffset:(null==i?void 0:i.byteOffset)||0,byteStride:(null==i?void 0:i.byteStride)||0}}const Zi=class e extends Lr{constructor(t,n){super(t,n,e.defaultProps),r(this,"maxVertexAttributes"),r(this,"attributeInfos"),r(this,"indexBuffer",null),r(this,"attributes"),this.maxVertexAttributes=t.limits.maxVertexAttributes,this.attributes=new Array(this.maxVertexAttributes).fill(null),this.attributeInfos=function(e,t,n=16){const r=qi(e,t),i=new Array(n).fill(null);for(const s of Object.values(r))i[s.location]=s;return i}(n.shaderLayout,n.bufferLayout,this.maxVertexAttributes)}get[Symbol.toStringTag](){return"VertexArray"}setConstantWebGL(e,t){this.device.reportError(new Error("constant attributes not supported"),this)()}};r(Zi,"defaultProps",{...Lr.defaultProps,shaderLayout:void 0,bufferLayout:[]});let Ji=Zi;const es=class e extends Lr{get[Symbol.toStringTag](){return"TransformFeedback"}constructor(t,n){super(t,n,e.defaultProps)}};r(es,"defaultProps",{...Lr.defaultProps,layout:void 0,buffers:{}});let ts=es;const ns=class e extends Lr{get[Symbol.toStringTag](){return"QuerySet"}constructor(t,n){super(t,n,e.defaultProps)}};r(ns,"defaultProps",{...Lr.defaultProps,type:void 0,count:void 0});let rs,is=ns;function ss(e){return(!rs||rs.byteLength"uniform"===t.type&&t.name===(null==e?void 0:e.name));if(!n)throw new Error(null==e?void 0:e.name);const r=n;for(const e of r.uniforms||[])this.bindingLayout[e.name]=e}}setUniforms(e){for(const[t,n]of Object.entries(e))this._setUniform(t,n),this.needsRedraw||this.setNeedsRedraw(`${this.name}.${t}=${n}`)}setNeedsRedraw(e){this.needsRedraw=this.needsRedraw||e}getAllUniforms(){return this.modifiedUniforms={},this.needsRedraw=!1,this.uniforms||{}}_setUniform(e,t){var n;(function(e,t){if(e!==t)return!1;const n=e,r=t;if(!os(n))return!1;if(os(r)&&n.length===r.length)for(let i=0;i`}}class fs extends cs{constructor(e,t,n){super(e,n),this.format=t}get isPointer(){return!0}getTypeName(){return`&${this.format.getTypeName()}`}}class ps extends cs{constructor(e,t,n,r){super(e,n),this.format=t,this.access=r}get isTemplate(){return!0}getTypeName(){let e=this.name;if(null!==this.format){if("vec2"===e||"vec3"===e||"vec4"===e||"mat2x2"===e||"mat2x3"===e||"mat2x4"===e||"mat3x2"===e||"mat3x3"===e||"mat3x4"===e||"mat4x2"===e||"mat4x3"===e||"mat4x4"===e){if("f32"===this.format.name)return e+="f",e;if("i32"===this.format.name)return e+="i",e;if("u32"===this.format.name)return e+="u",e;if("bool"===this.format.name)return e+="b",e;if("f16"===this.format.name)return e+="h",e}e+=`<${this.format.name}>`}else if("vec2"===e||"vec3"===e||"vec4"===e)return e;return e}}var gs,ms;(ms=gs||(gs={}))[ms.Uniform=0]="Uniform",ms[ms.Storage=1]="Storage",ms[ms.Texture=2]="Texture",ms[ms.Sampler=3]="Sampler",ms[ms.StorageTexture=4]="StorageTexture";class _s{constructor(e,t,n,r,i,s,o){this.name=e,this.type=t,this.group=n,this.binding=r,this.attributes=i,this.resourceType=s,this.access=o}get isArray(){return this.type.isArray}get isStruct(){return this.type.isStruct}get isTemplate(){return this.type.isTemplate}get size(){return this.type.size}get align(){return this.type.isStruct?this.type.align:0}get members(){return this.type.isStruct?this.type.members:null}get format(){return this.type.isArray||this.type.isTemplate?this.type.format:null}get count(){return this.type.isArray?this.type.count:0}get stride(){return this.type.isArray?this.type.stride:this.size}}class bs{constructor(e,t){this.name=e,this.type=t}}class vs{constructor(e,t,n,r){this.name=e,this.type=t,this.locationType=n,this.location=r,this.interpolation=null}}class ys{constructor(e,t,n,r){this.name=e,this.type=t,this.locationType=n,this.location=r}}class ws{constructor(e,t,n,r){this.name=e,this.type=t,this.attributes=n,this.id=r}}class xs{constructor(e,t,n){this.name=e,this.type=t,this.attributes=n}}class Es{constructor(e,t=null,n){this.stage=null,this.inputs=[],this.outputs=[],this.arguments=[],this.returnType=null,this.resources=[],this.overrides=[],this.startLine=-1,this.endLine=-1,this.inUse=!1,this.calls=new Set,this.name=e,this.stage=t,this.attributes=n}}class Ts{constructor(){this.vertex=[],this.fragment=[],this.compute=[]}}function Ss(e){var t=(32768&e)>>15,n=(31744&e)>>10,r=1023&e;return 0==n?(t?-1:1)*Math.pow(2,-14)*(r/Math.pow(2,10)):31==n?r?NaN:1/0*(t?-1:1):(t?-1:1)*Math.pow(2,n-15)*(1+r/Math.pow(2,10))}const Cs=new Float32Array(1),ks=new Int32Array(Cs.buffer),Rs=new Uint16Array(1);function Ps(e){Cs[0]=e;const t=ks[0],n=t>>31&1;let r=t>>23&255,i=8388607&t;if(255===r)return Rs[0]=n<<15|31744|(0!==i?512:0),Rs[0];if(0===r){if(0===i)return Rs[0]=n<<15,Rs[0];i|=8388608;let e=113;for(;!(8388608&i);)i<<=1,e--;return r=127-e,i&=8388607,r>0?(i=(i>>126-r)+(i>>127-r&1),Rs[0]=n<<15|r<<10|i>>13,Rs[0]):(Rs[0]=n<<15,Rs[0])}return r=r-127+15,r>=31?(Rs[0]=n<<15|31744,Rs[0]):r<=0?r<-10?(Rs[0]=n<<15,Rs[0]):(i=(8388608|i)>>1-r,Rs[0]=n<<15|i>>13,Rs[0]):(i>>=13,Rs[0]=n<<15|r<<10|i,Rs[0])}const Is=new Uint32Array(1),Ms=new Float32Array(Is.buffer,0,1);function Ls(e){const t=112+(e>>6&31)<<23|(63&e)<<17;return Is[0]=t,Ms[0]}function Ns(e,t,n,r){const i=[0,0,0,0];for(let s=0;s{e.increment="++",e.decrement="--"})(Ks||(Ks={})),(e=>{e.parse=function(t){const n=t;if("parse"==n)throw new Error("Invalid value for IncrementOperator");return e[n]}})(Ks||(Ks={}));class to extends Gs{constructor(e,t){super(),this.operator=e,this.variable=t}get astNodeType(){return"increment"}search(e){this.variable.search(e)}}(e=>{e.assign="=",e.addAssign="+=",e.subtractAssin="-=",e.multiplyAssign="*=",e.divideAssign="/=",e.moduloAssign="%=",e.andAssign="&=",e.orAssign="|=",e.xorAssign="^=",e.shiftLeftAssign="<<=",e.shiftRightAssign=">>="})(Zs||(Zs={})),(Zs||(Zs={})).parse=function(e){const t=e;if("parse"==t)throw new Error("Invalid value for AssignOperator");return t};class no extends Gs{constructor(e,t,n){super(),this.operator=e,this.variable=t,this.value=n}get astNodeType(){return"assign"}search(e){this.variable.search(e),this.value.search(e)}}class ro extends Gs{constructor(e,t){super(),this.name=e,this.args=t}get astNodeType(){return"call"}isBuiltin(){return js.has(this.name)}search(e){for(const t of this.args)t.search(e);e(this)}}class io extends Gs{constructor(e,t){super(),this.body=e,this.continuing=t}get astNodeType(){return"loop"}search(e){var t;this.searchBlock(this.body,e),null===(t=this.continuing)||void 0===t||t.search(e)}}class so extends Gs{constructor(e,t){super(),this.condition=e,this.cases=t}get astNodeType(){return"switch"}search(e){e(this);for(const t of this.cases)t.search(e)}}class oo extends Gs{constructor(e,t,n,r){super(),this.condition=e,this.body=t,this.elseif=n,this.else=r}get astNodeType(){return"if"}search(e){this.condition.search(e),this.searchBlock(this.body,e),this.searchBlock(this.elseif,e),this.searchBlock(this.else,e)}}class ao extends Gs{constructor(e){super(),this.value=e}get astNodeType(){return"return"}search(e){var t;null===(t=this.value)||void 0===t||t.search(e)}}class Ao extends Gs{constructor(e){super(),this.name=e}get astNodeType(){return"enable"}}class lo extends Gs{constructor(e){super(),this.extensions=e}get astNodeType(){return"requires"}}class co extends Gs{constructor(e,t){super(),this.severity=e,this.rule=t}get astNodeType(){return"diagnostic"}}class uo extends Gs{constructor(e,t){super(),this.name=e,this.type=t}get astNodeType(){return"alias"}}class ho extends Gs{constructor(){super()}get astNodeType(){return"discard"}}class fo extends Gs{constructor(){super(),this.condition=null,this.loopId=-1}get astNodeType(){return"break"}}class po extends Gs{constructor(){super(),this.loopId=-1}get astNodeType(){return"continue"}}class go extends Gs{constructor(e){super(),this.attributes=null,this.name=e}get astNodeType(){return"type"}get isStruct(){return!1}get isArray(){return!1}static maxFormatType(e){let t=e[0];if("f32"===t.name)return t;for(let n=1;n`}else if("vec2"===e||"vec3"===e||"vec4"===e)return e;return e}}bo.vec2f=new bo("vec2",go.f32,null),bo.vec3f=new bo("vec3",go.f32,null),bo.vec4f=new bo("vec4",go.f32,null),bo.vec2i=new bo("vec2",go.i32,null),bo.vec3i=new bo("vec3",go.i32,null),bo.vec4i=new bo("vec4",go.i32,null),bo.vec2u=new bo("vec2",go.u32,null),bo.vec3u=new bo("vec3",go.u32,null),bo.vec4u=new bo("vec4",go.u32,null),bo.vec2h=new bo("vec2",go.f16,null),bo.vec3h=new bo("vec3",go.f16,null),bo.vec4h=new bo("vec4",go.f16,null),bo.vec2b=new bo("vec2",go.bool,null),bo.vec3b=new bo("vec3",go.bool,null),bo.vec4b=new bo("vec4",go.bool,null),bo.mat2x2f=new bo("mat2x2",go.f32,null),bo.mat2x3f=new bo("mat2x3",go.f32,null),bo.mat2x4f=new bo("mat2x4",go.f32,null),bo.mat3x2f=new bo("mat3x2",go.f32,null),bo.mat3x3f=new bo("mat3x3",go.f32,null),bo.mat3x4f=new bo("mat3x4",go.f32,null),bo.mat4x2f=new bo("mat4x2",go.f32,null),bo.mat4x3f=new bo("mat4x3",go.f32,null),bo.mat4x4f=new bo("mat4x4",go.f32,null),bo.mat2x2h=new bo("mat2x2",go.f16,null),bo.mat2x3h=new bo("mat2x3",go.f16,null),bo.mat2x4h=new bo("mat2x4",go.f16,null),bo.mat3x2h=new bo("mat3x2",go.f16,null),bo.mat3x3h=new bo("mat3x3",go.f16,null),bo.mat3x4h=new bo("mat3x4",go.f16,null),bo.mat4x2h=new bo("mat4x2",go.f16,null),bo.mat4x3h=new bo("mat4x3",go.f16,null),bo.mat4x4h=new bo("mat4x4",go.f16,null),bo.mat2x2i=new bo("mat2x2",go.i32,null),bo.mat2x3i=new bo("mat2x3",go.i32,null),bo.mat2x4i=new bo("mat2x4",go.i32,null),bo.mat3x2i=new bo("mat3x2",go.i32,null),bo.mat3x3i=new bo("mat3x3",go.i32,null),bo.mat3x4i=new bo("mat3x4",go.i32,null),bo.mat4x2i=new bo("mat4x2",go.i32,null),bo.mat4x3i=new bo("mat4x3",go.i32,null),bo.mat4x4i=new bo("mat4x4",go.i32,null),bo.mat2x2u=new bo("mat2x2",go.u32,null),bo.mat2x3u=new bo("mat2x3",go.u32,null),bo.mat2x4u=new bo("mat2x4",go.u32,null),bo.mat3x2u=new bo("mat3x2",go.u32,null),bo.mat3x3u=new bo("mat3x3",go.u32,null),bo.mat3x4u=new bo("mat3x4",go.u32,null),bo.mat4x2u=new bo("mat4x2",go.u32,null),bo.mat4x3u=new bo("mat4x3",go.u32,null),bo.mat4x4u=new bo("mat4x4",go.u32,null);class vo extends go{constructor(e,t,n,r){super(e),this.storage=t,this.type=n,this.access=r}get astNodeType(){return"pointer"}}class yo extends go{constructor(e,t,n,r){super(e),this.attributes=t,this.format=n,this.count=r}get astNodeType(){return"array"}get isArray(){return!0}}class wo extends go{constructor(e,t,n){super(e),this.format=t,this.access=n}get astNodeType(){return"sampler"}}class xo extends Os{constructor(){super(),this.postfix=null}}class Eo extends xo{constructor(e){super(),this.value=e}get astNodeType(){return"stringExpr"}toString(){return this.value}constEvaluateString(){return this.value}}class To extends xo{constructor(e,t){super(),this.type=e,this.args=t}get astNodeType(){return"createExpr"}search(e){if(e(this),this.args)for(const t of this.args)t.search(e)}constEvaluate(e,t){return t&&(t[0]=this.type),e.evalExpression(this,e.context)}}class So extends xo{constructor(e,t){super(),this.cachedReturnValue=null,this.name=e,this.args=t}get astNodeType(){return"callExpr"}setCachedReturnValue(e){this.cachedReturnValue=e}get isBuiltin(){return js.has(this.name)}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){for(const t of this.args)t.search(e);e(this)}}class Co extends xo{constructor(e){super(),this.name=e}get astNodeType(){return"varExpr"}search(e){e(this),this.postfix&&this.postfix.search(e)}constEvaluate(e,t){return e.evalExpression(this,e.context)}}class ko extends xo{constructor(e,t){super(),this.name=e,this.initializer=t}get astNodeType(){return"constExpr"}constEvaluate(e,t){if(this.initializer){const t=e.evalExpression(this.initializer,e.context);return null!==t&&this.postfix?t.getSubData(e,this.postfix,e.context):t}return null}search(e){this.initializer.search(e)}}class Ro extends xo{constructor(e,t){super(),this.value=e,this.type=t}get astNodeType(){return"literalExpr"}constEvaluate(e,t){return void 0!==t&&(t[0]=this.type),this.value}get isScalar(){return this.value instanceof $o}get isVector(){return this.value instanceof Qo||this.value instanceof Yo}get scalarValue(){return this.value instanceof $o?this.value.value:0}get vectorValue(){return this.value instanceof Qo||this.value instanceof Yo?this.value.data:new Float32Array(0)}}class Po extends xo{constructor(e,t){super(),this.type=e,this.value=t}get astNodeType(){return"bitcastExpr"}search(e){this.value.search(e)}}class Io extends xo{constructor(e){super(),this.index=e}search(e){this.index.search(e)}}class Mo extends xo{constructor(){super()}}class Lo extends Mo{constructor(e,t){super(),this.operator=e,this.right=t}get astNodeType(){return"unaryOp"}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.right.search(e)}}class No extends Mo{constructor(e,t,n){super(),this.operator=e,this.left=t,this.right=n}get astNodeType(){return"binaryOp"}_getPromotedType(e,t){return e.name===t.name?e:"f32"===e.name||"f32"===t.name?go.f32:"u32"===e.name||"u32"===t.name?go.u32:go.i32}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.left.search(e),this.right.search(e)}}class Bo extends Os{constructor(e){super(),this.body=e}search(e){e(this),this.searchBlock(this.body,e)}}class Do extends xo{constructor(){super()}get astNodeType(){return"default"}}class Oo extends Bo{constructor(e,t){super(t),this.selectors=e}get astNodeType(){return"case"}search(e){this.searchBlock(this.body,e)}}class Fo extends Bo{constructor(e){super(e)}get astNodeType(){return"default"}search(e){this.searchBlock(this.body,e)}}class Uo extends Os{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n}get astNodeType(){return"argument"}}class jo extends Os{constructor(e,t){super(),this.condition=e,this.body=t}get astNodeType(){return"elseif"}search(e){this.condition.search(e),this.searchBlock(this.body,e)}}class Go extends Os{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n}get astNodeType(){return"member"}}class zo extends Os{constructor(e,t){super(),this.name=e,this.value=t}get astNodeType(){return"attribute"}}class Vo{constructor(e,t){this.parent=null,this.typeInfo=e,this.parent=t,this.id=Vo._id++}clone(){throw`Clone: Not implemented for ${this.constructor.name}`}setDataValue(e,t,n,r){}getSubData(e,t,n){return null}toString(){return`<${this.typeInfo.getTypeName()}>`}}Vo._id=0;class Wo extends Vo{constructor(){super(new cs("void",null),null)}toString(){return"void"}}Wo.void=new Wo;class Ho extends Vo{constructor(e){super(new fs("pointer",e.typeInfo,null),null),this.reference=e}clone(){return this}setDataValue(e,t,n,r){this.reference.setDataValue(e,t,n,r)}getSubData(e,t,n){return t?this.reference.getSubData(e,t,n):this}toString(){return`&${this.reference.toString()}`}}class $o extends Vo{constructor(e,t,n=null){super(t,n),e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array?this.data=e:"x32"===this.typeInfo.name?e-Math.floor(e)!==0?this.data=new Float32Array([e]):this.data=e>=0?new Uint32Array([e]):new Int32Array([e]):"i32"===this.typeInfo.name||"bool"===this.typeInfo.name?this.data=new Int32Array([e]):"u32"===this.typeInfo.name?this.data=new Uint32Array([e]):("f32"===this.typeInfo.name||"f16"===this.typeInfo.name)&&(this.data=new Float32Array([e]))}clone(){if(this.data instanceof Float32Array)return new $o(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new $o(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new $o(new Uint32Array(this.data),this.typeInfo,null);throw"ScalarData: Invalid data type"}get value(){return this.data[0]}set value(e){this.data[0]=e}setDataValue(e,t,n,r){if(n)return;if(!(t instanceof $o))return;let i=t.data[0];"i32"===this.typeInfo.name||"u32"===this.typeInfo.name?i=Math.floor(i):"bool"===this.typeInfo.name&&(i=i?1:0),this.data[0]=i}getSubData(e,t,n){return t?null:this}toString(){return`${this.value}`}}function Xo(e,t,n){const r=t.length;return 2===r?"f32"===n?new Qo(new Float32Array(t),e.getTypeInfo("vec2f")):"i32"===n||"bool"===n?new Qo(new Int32Array(t),e.getTypeInfo("vec2i")):"u32"===n?new Qo(new Uint32Array(t),e.getTypeInfo("vec2u")):"f16"===n?new Qo(new Float32Array(t),e.getTypeInfo("vec2h")):null:3===r?"f32"===n?new Qo(new Float32Array(t),e.getTypeInfo("vec3f")):"i32"===n||"bool"===n?new Qo(new Int32Array(t),e.getTypeInfo("vec3i")):"u32"===n?new Qo(new Uint32Array(t),e.getTypeInfo("vec3u")):"f16"===n?new Qo(new Float32Array(t),e.getTypeInfo("vec3h")):null:4===r?"f32"===n?new Qo(new Float32Array(t),e.getTypeInfo("vec4f")):"i32"===n||"bool"===n?new Qo(new Int32Array(t),e.getTypeInfo("vec4i")):"u32"===n?new Qo(new Uint32Array(t),e.getTypeInfo("vec4u")):"f16"===n?new Qo(new Float32Array(t),e.getTypeInfo("vec4h")):null:null}class Qo extends Vo{constructor(e,t,n=null){if(super(t,n),e instanceof Float32Array||e instanceof Uint32Array||e instanceof Int32Array)this.data=e;else{const t=this.typeInfo.name;"vec2f"===t||"vec3f"===t||"vec4f"===t?this.data=new Float32Array(e):"vec2i"===t||"vec3i"===t||"vec4i"===t?this.data=new Int32Array(e):"vec2u"===t||"vec3u"===t||"vec4u"===t?this.data=new Uint32Array(e):"vec2h"===t||"vec3h"===t||"vec4h"===t?this.data=new Float32Array(e):"vec2b"===t||"vec3b"===t||"vec4b"===t?this.data=new Int32Array(e):("vec2"===t||"vec3"===t||"vec4"===t)&&(this.data=new Float32Array(e))}}clone(){if(this.data instanceof Float32Array)return new Qo(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Qo(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Qo(new Uint32Array(this.data),this.typeInfo,null);throw"VectorData: Invalid data type"}setDataValue(e,t,n,r){n instanceof Eo||t instanceof Qo&&(this.data=t.data)}getSubData(e,t,n){if(null===t)return this;let r=e.getTypeInfo("f32");if(this.typeInfo instanceof ps)r=this.typeInfo.format||r;else{const t=this.typeInfo.name;"vec2f"===t||"vec3f"===t||"vec4f"===t?r=e.getTypeInfo("f32"):"vec2i"===t||"vec3i"===t||"vec4i"===t?r=e.getTypeInfo("i32"):"vec2b"===t||"vec3b"===t||"vec4b"===t?r=e.getTypeInfo("bool"):"vec2u"===t||"vec3u"===t||"vec4u"===t?r=e.getTypeInfo("u32"):("vec2h"===t||"vec3h"===t||"vec4h"===t)&&(r=e.getTypeInfo("f16"))}let i=this;for(;null!==t&&null!==i;){if(t instanceof Io){const s=t.index;let o=-1;if(s instanceof Ro){if(!(s.value instanceof $o))return null;o=s.value.value}else{const t=e.evalExpression(s,n);if(!(t instanceof $o))return null;o=t.value}if(o<0||o>=i.data.length)return null;if(i.data instanceof Float32Array){const e=new Float32Array(i.data.buffer,i.data.byteOffset+4*o,1);return new $o(e,r)}if(i.data instanceof Int32Array){const e=new Int32Array(i.data.buffer,i.data.byteOffset+4*o,1);return new $o(e,r)}if(i.data instanceof Uint32Array){const e=new Uint32Array(i.data.buffer,i.data.byteOffset+4*o,1);return new $o(e,r)}throw"GetSubData: Invalid data type"}if(!(t instanceof Eo))return null;{const n=t.value.toLowerCase();if(1===n.length){let e=0;if("x"===n||"r"===n)e=0;else if("y"===n||"g"===n)e=1;else if("z"===n||"b"===n)e=2;else{if("w"!==n&&"a"!==n)return null;e=3}if(this.data instanceof Float32Array){let t=new Float32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new $o(t,r,this)}if(this.data instanceof Int32Array){let t=new Int32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new $o(t,r,this)}if(this.data instanceof Uint32Array){let t=new Uint32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new $o(t,r,this)}}const s=[];for(const e of n)"x"===e||"r"===e?s.push(this.data[0]):"y"===e||"g"===e?s.push(this.data[1]):"z"===e||"b"===e?s.push(this.data[2]):("w"===e||"a"===e)&&s.push(this.data[3]);i=Xo(e,s,r.name)}t=t.postfix}return i}toString(){let e=`${this.data[0]}`;for(let t=1;t=this.data.length)return null;const o=r.endsWith("h")?"h":"f";let a;if("mat2x2"===r||"mat2x2f"===r||"mat2x2h"===r||"mat3x2"===r||"mat3x2f"===r||"mat3x2h"===r||"mat4x2"===r||"mat4x2f"===r||"mat4x2h"===r)a=new Qo(new Float32Array(this.data.buffer,this.data.byteOffset+2*s*4,2),e.getTypeInfo(`vec2${o}`));else if("mat2x3"===r||"mat2x3f"===r||"mat2x3h"===r||"mat3x3"===r||"mat3x3f"===r||"mat3x3h"===r||"mat4x3"===r||"mat4x3f"===r||"mat4x3h"===r)a=new Qo(new Float32Array(this.data.buffer,this.data.byteOffset+3*s*4,3),e.getTypeInfo(`vec3${o}`));else{if("mat2x4"!==r&&"mat2x4f"!==r&&"mat2x4h"!==r&&"mat3x4"!==r&&"mat3x4f"!==r&&"mat3x4h"!==r&&"mat4x4"!==r&&"mat4x4f"!==r&&"mat4x4h"!==r)return null;a=new Qo(new Float32Array(this.data.buffer,this.data.byteOffset+4*s*4,4),e.getTypeInfo(`vec4${o}`))}return t.postfix?a.getSubData(e,t.postfix,n):a}return null}toString(){let e=`${this.data[0]}`;for(let t=1;t"!==s&&"x32"!==s)if("u32"!==s&&"atomic"!==s)if("bool"!==s){if("vec2f"===s||"vec2h"===s){const e=new Float32Array(this.buffer,r,2);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3f"===s||"vec3h"===s){const e=new Float32Array(this.buffer,r,3);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4f"===s||"vec4h"===s){const e=new Float32Array(this.buffer,r,4);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("vec2i"===s){const e=new Int32Array(this.buffer,r,2);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3i"===s){const e=new Int32Array(this.buffer,r,3);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4i"===s){const e=new Int32Array(this.buffer,r,4);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("vec2u"===s){const e=new Uint32Array(this.buffer,r,2);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3u"===s){const e=new Uint32Array(this.buffer,r,3);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4u"===s){const e=new Uint32Array(this.buffer,r,4);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("vec2b"===s){const e=new Uint32Array(this.buffer,r,2);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3b"===s){const e=new Uint32Array(this.buffer,r,3);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4b"===s){const e=new Uint32Array(this.buffer,r,4);return void(t instanceof Qo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("mat2x2f"===s||"mat2x2h"===s){const e=new Float32Array(this.buffer,r,4);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("mat2x3f"===s||"mat2x3h"===s){const e=new Float32Array(this.buffer,r,6);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]))}if("mat2x4f"===s||"mat2x4h"===s){const e=new Float32Array(this.buffer,r,8);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]))}if("mat3x2f"===s||"mat3x2h"===s){const e=new Float32Array(this.buffer,r,6);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]))}if("mat3x3f"===s||"mat3x3h"===s){const e=new Float32Array(this.buffer,r,9);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8]))}if("mat3x4f"===s||"mat3x4h"===s){const e=new Float32Array(this.buffer,r,12);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11]))}if("mat4x2f"===s||"mat4x2h"===s){const e=new Float32Array(this.buffer,r,8);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]))}if("mat4x3f"===s||"mat4x3h"===s){const e=new Float32Array(this.buffer,r,12);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11]))}if("mat4x4f"===s||"mat4x4h"===s){const e=new Float32Array(this.buffer,r,16);return void(t instanceof Yo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11],e[12]=t.data[12],e[13]=t.data[13],e[14]=t.data[14],e[15]=t.data[15]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]))}if(t instanceof qo&&n===t.typeInfo)return void new Uint8Array(this.buffer,r,t.buffer.byteLength).set(new Uint8Array(t.buffer))}else t instanceof $o&&(new Int32Array(this.buffer,r,1)[0]=t.value);else t instanceof $o&&(new Uint32Array(this.buffer,r,1)[0]=t.value);else t instanceof $o&&(new Int32Array(this.buffer,r,1)[0]=t.value);else t instanceof $o&&(new Float32Array(this.buffer,r,1)[0]=t.value)}getSubData(e,t,n){var r,i;if(null===t)return this;let s=this.offset,o=this.typeInfo;for(;t;){if(t instanceof Io){const r=t.index,i=r instanceof xo?e.evalExpression(r,n):r;let a=0;if(i instanceof $o?a=i.value:"number"==typeof i&&(a=i),o instanceof ds)s+=a*o.stride,o=o.format;else{const t=o.getTypeName();("mat4x4"===t||"mat4x4f"===t||"mat4x4h"===t)&&(s+=16*a,o=e.getTypeInfo("vec4f"))}}else{if(!(t instanceof Eo))return null;{const n=t.value;if(o instanceof hs){let e=!1;for(const t of o.members)if(t.name===n){s+=t.offset,o=t.type,e=!0;break}if(!e)return null}else if(o instanceof cs){const t=o.getTypeName();if("vec2f"===t||"vec3f"===t||"vec4f"===t||"vec2i"===t||"vec3i"===t||"vec4i"===t||"vec2u"===t||"vec3u"===t||"vec4u"===t||"vec2b"===t||"vec3b"===t||"vec4b"===t||"vec2h"===t||"vec3h"===t||"vec4h"===t||"vec2"===t||"vec3"===t||"vec4"===t){if(n.length>0&&n.length<5){let r="f";const i=[];for(let o=0;o=this.buffer.byteLength)return null;const e=new Float32Array(this.buffer,s,3);i.push(e[A])}else if("vec4f"===t)i.push(new Float32Array(this.buffer,s,4)[A]);else if("vec2i"===t)r="i",i.push(new Int32Array(this.buffer,s,2)[A]);else if("vec3i"===t)r="i",i.push(new Int32Array(this.buffer,s,3)[A]);else if("vec4i"===t)r="i",i.push(new Int32Array(this.buffer,s,4)[A]);else if("vec2u"===t){r="u";const e=new Uint32Array(this.buffer,s,2);i.push(e[A])}else"vec3u"===t?(r="u",i.push(new Uint32Array(this.buffer,s,3)[A])):"vec4u"===t&&(r="u",i.push(new Uint32Array(this.buffer,s,4)[A]))}return 2===i.length?o=e.getTypeInfo(`vec2${r}`):3===i.length?o=e.getTypeInfo(`vec3${r}`):4===i.length&&(o=e.getTypeInfo(`vec4${r}`)),new Qo(i,o,null)}return null}return null}}}t=t.postfix}const a=o.getTypeName();return"f32"===a?new $o(new Float32Array(this.buffer,s,1),o,this):"i32"===a?new $o(new Int32Array(this.buffer,s,1),o,this):"u32"===a?new $o(new Uint32Array(this.buffer,s,1),o,this):"vec2f"===a?new Qo(new Float32Array(this.buffer,s,2),o,this):"vec3f"===a?new Qo(new Float32Array(this.buffer,s,3),o,this):"vec4f"===a?new Qo(new Float32Array(this.buffer,s,4),o,this):"vec2i"===a?new Qo(new Int32Array(this.buffer,s,2),o,this):"vec3i"===a?new Qo(new Int32Array(this.buffer,s,3),o,this):"vec4i"===a?new Qo(new Int32Array(this.buffer,s,4),o,this):"vec2u"===a?new Qo(new Uint32Array(this.buffer,s,2),o,this):"vec3u"===a?new Qo(new Uint32Array(this.buffer,s,3),o,this):"vec4u"===a?new Qo(new Uint32Array(this.buffer,s,4),o,this):o instanceof ps&&"atomic"===o.name?"u32"===(null===(r=o.format)||void 0===r?void 0:r.name)?new $o(new Uint32Array(this.buffer,s,1)[0],o.format,this):"i32"===(null===(i=o.format)||void 0===i?void 0:i.name)?new $o(new Int32Array(this.buffer,s,1)[0],o.format,this):null:new qo(this.buffer,o,s,this)}toString(){let e="";if(this.typeInfo instanceof ds)if("f32"===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n0?null!==(e=n[0])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.width)&&void 0!==t?t:0}get height(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>1?null!==(e=n[1])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.height)&&void 0!==t?t:0}get depthOrArrayLayers(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>2?null!==(e=n[2])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.depthOrArrayLayers)&&void 0!==t?t:0}get format(){var e;return this.descriptor&&null!==(e=this.descriptor.format)&&void 0!==e?e:"rgba8unorm"}get sampleCount(){var e;return this.descriptor&&null!==(e=this.descriptor.sampleCount)&&void 0!==e?e:1}get mipLevelCount(){var e;return this.descriptor&&null!==(e=this.descriptor.mipLevelCount)&&void 0!==e?e:1}get dimension(){var e;return this.descriptor&&null!==(e=this.descriptor.dimension)&&void 0!==e?e:"2d"}getMipLevelSize(e){if(e>=this.mipLevelCount)return[0,0,0];const t=[this.width,this.height,this.depthOrArrayLayers];for(let n=0;n>e);return t}get texelByteSize(){const e=this.format,t=Ds[e];return t?t.isDepthStencil?4:t.bytesPerBlock:0}get bytesPerRow(){return this.width*this.texelByteSize}get isDepthStencil(){const e=this.format,t=Ds[e];return!!t&&t.isDepthStencil}getGpuSize(){const e=this.format,t=Ds[e],n=this.width;if(!e||n<=0||!t)return-1;const r=this.height,i=this.depthOrArrayLayers,s=this.dimension;return n/t.blockWidth*("1d"===s?1:r/t.blockHeight)*t.bytesPerBlock*i}getPixel(e,t,n=0,r=0){const i=this.texelByteSize,s=this.bytesPerRow,o=this.height,a=this.data[r];return function(e,t,n,r,i,s,o,a,A){const l=r*(o>>=i)*(s>>=i)+n*o+t*a;switch(A){case"r8unorm":return[Ns(e,l,"8unorm",1)[0]];case"r8snorm":return[Ns(e,l,"8snorm",1)[0]];case"r8uint":return[Ns(e,l,"8uint",1)[0]];case"r8sint":return[Ns(e,l,"8sint",1)[0]];case"rg8unorm":{const t=Ns(e,l,"8unorm",2);return[t[0],t[1]]}case"rg8snorm":{const t=Ns(e,l,"8snorm",2);return[t[0],t[1]]}case"rg8uint":{const t=Ns(e,l,"8uint",2);return[t[0],t[1]]}case"rg8sint":{const t=Ns(e,l,"8sint",2);return[t[0],t[1]]}case"rgba8unorm-srgb":case"rgba8unorm":{const t=Ns(e,l,"8unorm",4);return[t[0],t[1],t[2],t[3]]}case"rgba8snorm":{const t=Ns(e,l,"8snorm",4);return[t[0],t[1],t[2],t[3]]}case"rgba8uint":{const t=Ns(e,l,"8uint",4);return[t[0],t[1],t[2],t[3]]}case"rgba8sint":{const t=Ns(e,l,"8sint",4);return[t[0],t[1],t[2],t[3]]}case"bgra8unorm-srgb":case"bgra8unorm":{const t=Ns(e,l,"8unorm",4);return[t[2],t[1],t[0],t[3]]}case"r16uint":return[Ns(e,l,"16uint",1)[0]];case"r16sint":return[Ns(e,l,"16sint",1)[0]];case"r16float":return[Ns(e,l,"16float",1)[0]];case"rg16uint":{const t=Ns(e,l,"16uint",2);return[t[0],t[1]]}case"rg16sint":{const t=Ns(e,l,"16sint",2);return[t[0],t[1]]}case"rg16float":{const t=Ns(e,l,"16float",2);return[t[0],t[1]]}case"rgba16uint":{const t=Ns(e,l,"16uint",4);return[t[0],t[1],t[2],t[3]]}case"rgba16sint":{const t=Ns(e,l,"16sint",4);return[t[0],t[1],t[2],t[3]]}case"rgba16float":{const t=Ns(e,l,"16float",4);return[t[0],t[1],t[2],t[3]]}case"r32uint":return[Ns(e,l,"32uint",1)[0]];case"r32sint":return[Ns(e,l,"32sint",1)[0]];case"depth16unorm":case"depth24plus":case"depth24plus-stencil8":case"depth32float":case"depth32float-stencil8":case"r32float":return[Ns(e,l,"32float",1)[0]];case"rg32uint":{const t=Ns(e,l,"32uint",2);return[t[0],t[1]]}case"rg32sint":{const t=Ns(e,l,"32sint",2);return[t[0],t[1]]}case"rg32float":{const t=Ns(e,l,"32float",2);return[t[0],t[1]]}case"rgba32uint":{const t=Ns(e,l,"32uint",4);return[t[0],t[1],t[2],t[3]]}case"rgba32sint":{const t=Ns(e,l,"32sint",4);return[t[0],t[1],t[2],t[3]]}case"rgba32float":{const t=Ns(e,l,"32float",4);return[t[0],t[1],t[2],t[3]]}case"rg11b10ufloat":{const t=new Uint32Array(e.buffer,l,1)[0],n=(4192256&t)>>11,r=(4290772992&t)>>22;return[Ls(2047&t),Ls(n),function(e){const t=112+(e>>5&31)<<23|(31&e)<<18;return Is[0]=t,Ms[0]}(r),1]}}return null}(new Uint8Array(a),e,t,n,r,o,s,i,this.format)}setPixel(e,t,n,r,i){const s=this.texelByteSize,o=this.bytesPerRow,a=this.height,A=this.data[r];!function(e,t,n,r,i,s,o,a,A,l){const c=r*(o>>=i)*(s>>=i)+n*o+t*a;switch(A){case"r8unorm":return void Bs(e,c,"8unorm",1,l);case"r8snorm":return void Bs(e,c,"8snorm",1,l);case"r8uint":return void Bs(e,c,"8uint",1,l);case"r8sint":return void Bs(e,c,"8sint",1,l);case"rg8unorm":return void Bs(e,c,"8unorm",2,l);case"rg8snorm":return void Bs(e,c,"8snorm",2,l);case"rg8uint":return void Bs(e,c,"8uint",2,l);case"rg8sint":return void Bs(e,c,"8sint",2,l);case"rgba8unorm-srgb":case"rgba8unorm":case"bgra8unorm-srgb":case"bgra8unorm":return void Bs(e,c,"8unorm",4,l);case"rgba8snorm":return void Bs(e,c,"8snorm",4,l);case"rgba8uint":return void Bs(e,c,"8uint",4,l);case"rgba8sint":return void Bs(e,c,"8sint",4,l);case"r16uint":return void Bs(e,c,"16uint",1,l);case"r16sint":return void Bs(e,c,"16sint",1,l);case"r16float":return void Bs(e,c,"16float",1,l);case"rg16uint":return void Bs(e,c,"16uint",2,l);case"rg16sint":return void Bs(e,c,"16sint",2,l);case"rg16float":return void Bs(e,c,"16float",2,l);case"rgba16uint":return void Bs(e,c,"16uint",4,l);case"rgba16sint":return void Bs(e,c,"16sint",4,l);case"rgba16float":return void Bs(e,c,"16float",4,l);case"r32uint":return void Bs(e,c,"32uint",1,l);case"r32sint":return void Bs(e,c,"32sint",1,l);case"depth16unorm":case"depth24plus":case"depth24plus-stencil8":case"depth32float":case"depth32float-stencil8":case"r32float":return void Bs(e,c,"32float",1,l);case"rg32uint":return void Bs(e,c,"32uint",2,l);case"rg32sint":return void Bs(e,c,"32sint",2,l);case"rg32float":return void Bs(e,c,"32float",2,l);case"rgba32uint":return void Bs(e,c,"32uint",4,l);case"rgba32sint":return void Bs(e,c,"32sint",4,l);case"rgba32float":Bs(e,c,"32float",4,l)}}(new Uint8Array(A),e,t,n,r,a,o,s,this.format,i)}}(e=>{e[e.token=0]="token",e[e.keyword=1]="keyword",e[e.reserved=2]="reserved"})(eo||(eo={}));class Zo{constructor(e,t,n){this.name=e,this.type=t,this.rule=n}toString(){return this.name}}class Jo{}Js=Jo,Jo.none=new Zo("",eo.reserved,""),Jo.eof=new Zo("EOF",eo.token,""),Jo.reserved={asm:new Zo("asm",eo.reserved,"asm"),bf16:new Zo("bf16",eo.reserved,"bf16"),do:new Zo("do",eo.reserved,"do"),enum:new Zo("enum",eo.reserved,"enum"),f16:new Zo("f16",eo.reserved,"f16"),f64:new Zo("f64",eo.reserved,"f64"),handle:new Zo("handle",eo.reserved,"handle"),i8:new Zo("i8",eo.reserved,"i8"),i16:new Zo("i16",eo.reserved,"i16"),i64:new Zo("i64",eo.reserved,"i64"),mat:new Zo("mat",eo.reserved,"mat"),premerge:new Zo("premerge",eo.reserved,"premerge"),regardless:new Zo("regardless",eo.reserved,"regardless"),typedef:new Zo("typedef",eo.reserved,"typedef"),u8:new Zo("u8",eo.reserved,"u8"),u16:new Zo("u16",eo.reserved,"u16"),u64:new Zo("u64",eo.reserved,"u64"),unless:new Zo("unless",eo.reserved,"unless"),using:new Zo("using",eo.reserved,"using"),vec:new Zo("vec",eo.reserved,"vec"),void:new Zo("void",eo.reserved,"void")},Jo.keywords={array:new Zo("array",eo.keyword,"array"),atomic:new Zo("atomic",eo.keyword,"atomic"),bool:new Zo("bool",eo.keyword,"bool"),f32:new Zo("f32",eo.keyword,"f32"),i32:new Zo("i32",eo.keyword,"i32"),mat2x2:new Zo("mat2x2",eo.keyword,"mat2x2"),mat2x3:new Zo("mat2x3",eo.keyword,"mat2x3"),mat2x4:new Zo("mat2x4",eo.keyword,"mat2x4"),mat3x2:new Zo("mat3x2",eo.keyword,"mat3x2"),mat3x3:new Zo("mat3x3",eo.keyword,"mat3x3"),mat3x4:new Zo("mat3x4",eo.keyword,"mat3x4"),mat4x2:new Zo("mat4x2",eo.keyword,"mat4x2"),mat4x3:new Zo("mat4x3",eo.keyword,"mat4x3"),mat4x4:new Zo("mat4x4",eo.keyword,"mat4x4"),ptr:new Zo("ptr",eo.keyword,"ptr"),sampler:new Zo("sampler",eo.keyword,"sampler"),sampler_comparison:new Zo("sampler_comparison",eo.keyword,"sampler_comparison"),struct:new Zo("struct",eo.keyword,"struct"),texture_1d:new Zo("texture_1d",eo.keyword,"texture_1d"),texture_2d:new Zo("texture_2d",eo.keyword,"texture_2d"),texture_2d_array:new Zo("texture_2d_array",eo.keyword,"texture_2d_array"),texture_3d:new Zo("texture_3d",eo.keyword,"texture_3d"),texture_cube:new Zo("texture_cube",eo.keyword,"texture_cube"),texture_cube_array:new Zo("texture_cube_array",eo.keyword,"texture_cube_array"),texture_multisampled_2d:new Zo("texture_multisampled_2d",eo.keyword,"texture_multisampled_2d"),texture_storage_1d:new Zo("texture_storage_1d",eo.keyword,"texture_storage_1d"),texture_storage_2d:new Zo("texture_storage_2d",eo.keyword,"texture_storage_2d"),texture_storage_2d_array:new Zo("texture_storage_2d_array",eo.keyword,"texture_storage_2d_array"),texture_storage_3d:new Zo("texture_storage_3d",eo.keyword,"texture_storage_3d"),texture_depth_2d:new Zo("texture_depth_2d",eo.keyword,"texture_depth_2d"),texture_depth_2d_array:new Zo("texture_depth_2d_array",eo.keyword,"texture_depth_2d_array"),texture_depth_cube:new Zo("texture_depth_cube",eo.keyword,"texture_depth_cube"),texture_depth_cube_array:new Zo("texture_depth_cube_array",eo.keyword,"texture_depth_cube_array"),texture_depth_multisampled_2d:new Zo("texture_depth_multisampled_2d",eo.keyword,"texture_depth_multisampled_2d"),texture_external:new Zo("texture_external",eo.keyword,"texture_external"),u32:new Zo("u32",eo.keyword,"u32"),vec2:new Zo("vec2",eo.keyword,"vec2"),vec3:new Zo("vec3",eo.keyword,"vec3"),vec4:new Zo("vec4",eo.keyword,"vec4"),bitcast:new Zo("bitcast",eo.keyword,"bitcast"),block:new Zo("block",eo.keyword,"block"),break:new Zo("break",eo.keyword,"break"),case:new Zo("case",eo.keyword,"case"),continue:new Zo("continue",eo.keyword,"continue"),continuing:new Zo("continuing",eo.keyword,"continuing"),default:new Zo("default",eo.keyword,"default"),diagnostic:new Zo("diagnostic",eo.keyword,"diagnostic"),discard:new Zo("discard",eo.keyword,"discard"),else:new Zo("else",eo.keyword,"else"),enable:new Zo("enable",eo.keyword,"enable"),fallthrough:new Zo("fallthrough",eo.keyword,"fallthrough"),false:new Zo("false",eo.keyword,"false"),fn:new Zo("fn",eo.keyword,"fn"),for:new Zo("for",eo.keyword,"for"),function:new Zo("function",eo.keyword,"function"),if:new Zo("if",eo.keyword,"if"),let:new Zo("let",eo.keyword,"let"),const:new Zo("const",eo.keyword,"const"),loop:new Zo("loop",eo.keyword,"loop"),while:new Zo("while",eo.keyword,"while"),private:new Zo("private",eo.keyword,"private"),read:new Zo("read",eo.keyword,"read"),read_write:new Zo("read_write",eo.keyword,"read_write"),return:new Zo("return",eo.keyword,"return"),requires:new Zo("requires",eo.keyword,"requires"),storage:new Zo("storage",eo.keyword,"storage"),switch:new Zo("switch",eo.keyword,"switch"),true:new Zo("true",eo.keyword,"true"),alias:new Zo("alias",eo.keyword,"alias"),type:new Zo("type",eo.keyword,"type"),uniform:new Zo("uniform",eo.keyword,"uniform"),var:new Zo("var",eo.keyword,"var"),override:new Zo("override",eo.keyword,"override"),workgroup:new Zo("workgroup",eo.keyword,"workgroup"),write:new Zo("write",eo.keyword,"write"),r8unorm:new Zo("r8unorm",eo.keyword,"r8unorm"),r8snorm:new Zo("r8snorm",eo.keyword,"r8snorm"),r8uint:new Zo("r8uint",eo.keyword,"r8uint"),r8sint:new Zo("r8sint",eo.keyword,"r8sint"),r16uint:new Zo("r16uint",eo.keyword,"r16uint"),r16sint:new Zo("r16sint",eo.keyword,"r16sint"),r16float:new Zo("r16float",eo.keyword,"r16float"),rg8unorm:new Zo("rg8unorm",eo.keyword,"rg8unorm"),rg8snorm:new Zo("rg8snorm",eo.keyword,"rg8snorm"),rg8uint:new Zo("rg8uint",eo.keyword,"rg8uint"),rg8sint:new Zo("rg8sint",eo.keyword,"rg8sint"),r32uint:new Zo("r32uint",eo.keyword,"r32uint"),r32sint:new Zo("r32sint",eo.keyword,"r32sint"),r32float:new Zo("r32float",eo.keyword,"r32float"),rg16uint:new Zo("rg16uint",eo.keyword,"rg16uint"),rg16sint:new Zo("rg16sint",eo.keyword,"rg16sint"),rg16float:new Zo("rg16float",eo.keyword,"rg16float"),rgba8unorm:new Zo("rgba8unorm",eo.keyword,"rgba8unorm"),rgba8unorm_srgb:new Zo("rgba8unorm_srgb",eo.keyword,"rgba8unorm_srgb"),rgba8snorm:new Zo("rgba8snorm",eo.keyword,"rgba8snorm"),rgba8uint:new Zo("rgba8uint",eo.keyword,"rgba8uint"),rgba8sint:new Zo("rgba8sint",eo.keyword,"rgba8sint"),bgra8unorm:new Zo("bgra8unorm",eo.keyword,"bgra8unorm"),bgra8unorm_srgb:new Zo("bgra8unorm_srgb",eo.keyword,"bgra8unorm_srgb"),rgb10a2unorm:new Zo("rgb10a2unorm",eo.keyword,"rgb10a2unorm"),rg11b10float:new Zo("rg11b10float",eo.keyword,"rg11b10float"),rg32uint:new Zo("rg32uint",eo.keyword,"rg32uint"),rg32sint:new Zo("rg32sint",eo.keyword,"rg32sint"),rg32float:new Zo("rg32float",eo.keyword,"rg32float"),rgba16uint:new Zo("rgba16uint",eo.keyword,"rgba16uint"),rgba16sint:new Zo("rgba16sint",eo.keyword,"rgba16sint"),rgba16float:new Zo("rgba16float",eo.keyword,"rgba16float"),rgba32uint:new Zo("rgba32uint",eo.keyword,"rgba32uint"),rgba32sint:new Zo("rgba32sint",eo.keyword,"rgba32sint"),rgba32float:new Zo("rgba32float",eo.keyword,"rgba32float"),static_assert:new Zo("static_assert",eo.keyword,"static_assert")},Jo.tokens={decimal_float_literal:new Zo("decimal_float_literal",eo.token,/((-?[0-9]*\.[0-9]+|-?[0-9]+\.[0-9]*)((e|E)(\+|-)?[0-9]+)?[fh]?)|(-?[0-9]+(e|E)(\+|-)?[0-9]+[fh]?)|(-?[0-9]+[fh])/),hex_float_literal:new Zo("hex_float_literal",eo.token,/-?0x((([0-9a-fA-F]*\.[0-9a-fA-F]+|[0-9a-fA-F]+\.[0-9a-fA-F]*)((p|P)(\+|-)?[0-9]+[fh]?)?)|([0-9a-fA-F]+(p|P)(\+|-)?[0-9]+[fh]?))/),int_literal:new Zo("int_literal",eo.token,/-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/),uint_literal:new Zo("uint_literal",eo.token,/0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/),name:new Zo("name",eo.token,/([_\p{XID_Start}][\p{XID_Continue}]+)|([\p{XID_Start}])/u),ident:new Zo("ident",eo.token,/[_a-zA-Z][0-9a-zA-Z_]*/),and:new Zo("and",eo.token,"&"),and_and:new Zo("and_and",eo.token,"&&"),arrow:new Zo("arrow ",eo.token,"->"),attr:new Zo("attr",eo.token,"@"),forward_slash:new Zo("forward_slash",eo.token,"/"),bang:new Zo("bang",eo.token,"!"),bracket_left:new Zo("bracket_left",eo.token,"["),bracket_right:new Zo("bracket_right",eo.token,"]"),brace_left:new Zo("brace_left",eo.token,"{"),brace_right:new Zo("brace_right",eo.token,"}"),colon:new Zo("colon",eo.token,":"),comma:new Zo("comma",eo.token,","),equal:new Zo("equal",eo.token,"="),equal_equal:new Zo("equal_equal",eo.token,"=="),not_equal:new Zo("not_equal",eo.token,"!="),greater_than:new Zo("greater_than",eo.token,">"),greater_than_equal:new Zo("greater_than_equal",eo.token,">="),shift_right:new Zo("shift_right",eo.token,">>"),less_than:new Zo("less_than",eo.token,"<"),less_than_equal:new Zo("less_than_equal",eo.token,"<="),shift_left:new Zo("shift_left",eo.token,"<<"),modulo:new Zo("modulo",eo.token,"%"),minus:new Zo("minus",eo.token,"-"),minus_minus:new Zo("minus_minus",eo.token,"--"),period:new Zo("period",eo.token,"."),plus:new Zo("plus",eo.token,"+"),plus_plus:new Zo("plus_plus",eo.token,"++"),or:new Zo("or",eo.token,"|"),or_or:new Zo("or_or",eo.token,"||"),paren_left:new Zo("paren_left",eo.token,"("),paren_right:new Zo("paren_right",eo.token,")"),semicolon:new Zo("semicolon",eo.token,";"),star:new Zo("star",eo.token,"*"),tilde:new Zo("tilde",eo.token,"~"),underscore:new Zo("underscore",eo.token,"_"),xor:new Zo("xor",eo.token,"^"),plus_equal:new Zo("plus_equal",eo.token,"+="),minus_equal:new Zo("minus_equal",eo.token,"-="),times_equal:new Zo("times_equal",eo.token,"*="),division_equal:new Zo("division_equal",eo.token,"/="),modulo_equal:new Zo("modulo_equal",eo.token,"%="),and_equal:new Zo("and_equal",eo.token,"&="),or_equal:new Zo("or_equal",eo.token,"|="),xor_equal:new Zo("xor_equal",eo.token,"^="),shift_right_equal:new Zo("shift_right_equal",eo.token,">>="),shift_left_equal:new Zo("shift_left_equal",eo.token,"<<=")},Jo.simpleTokens={"@":Js.tokens.attr,"{":Js.tokens.brace_left,"}":Js.tokens.brace_right,":":Js.tokens.colon,",":Js.tokens.comma,"(":Js.tokens.paren_left,")":Js.tokens.paren_right,";":Js.tokens.semicolon},Jo.literalTokens={"&":Js.tokens.and,"&&":Js.tokens.and_and,"->":Js.tokens.arrow,"/":Js.tokens.forward_slash,"!":Js.tokens.bang,"[":Js.tokens.bracket_left,"]":Js.tokens.bracket_right,"=":Js.tokens.equal,"==":Js.tokens.equal_equal,"!=":Js.tokens.not_equal,">":Js.tokens.greater_than,">=":Js.tokens.greater_than_equal,">>":Js.tokens.shift_right,"<":Js.tokens.less_than,"<=":Js.tokens.less_than_equal,"<<":Js.tokens.shift_left,"%":Js.tokens.modulo,"-":Js.tokens.minus,"--":Js.tokens.minus_minus,".":Js.tokens.period,"+":Js.tokens.plus,"++":Js.tokens.plus_plus,"|":Js.tokens.or,"||":Js.tokens.or_or,"*":Js.tokens.star,"~":Js.tokens.tilde,_:Js.tokens.underscore,"^":Js.tokens.xor,"+=":Js.tokens.plus_equal,"-=":Js.tokens.minus_equal,"*=":Js.tokens.times_equal,"/=":Js.tokens.division_equal,"%=":Js.tokens.modulo_equal,"&=":Js.tokens.and_equal,"|=":Js.tokens.or_equal,"^=":Js.tokens.xor_equal,">>=":Js.tokens.shift_right_equal,"<<=":Js.tokens.shift_left_equal},Jo.regexTokens={decimal_float_literal:Js.tokens.decimal_float_literal,hex_float_literal:Js.tokens.hex_float_literal,int_literal:Js.tokens.int_literal,uint_literal:Js.tokens.uint_literal,ident:Js.tokens.ident},Jo.storage_class=[Js.keywords.function,Js.keywords.private,Js.keywords.workgroup,Js.keywords.uniform,Js.keywords.storage],Jo.access_mode=[Js.keywords.read,Js.keywords.write,Js.keywords.read_write],Jo.sampler_type=[Js.keywords.sampler,Js.keywords.sampler_comparison],Jo.sampled_texture_type=[Js.keywords.texture_1d,Js.keywords.texture_2d,Js.keywords.texture_2d_array,Js.keywords.texture_3d,Js.keywords.texture_cube,Js.keywords.texture_cube_array],Jo.multisampled_texture_type=[Js.keywords.texture_multisampled_2d],Jo.storage_texture_type=[Js.keywords.texture_storage_1d,Js.keywords.texture_storage_2d,Js.keywords.texture_storage_2d_array,Js.keywords.texture_storage_3d],Jo.depth_texture_type=[Js.keywords.texture_depth_2d,Js.keywords.texture_depth_2d_array,Js.keywords.texture_depth_cube,Js.keywords.texture_depth_cube_array,Js.keywords.texture_depth_multisampled_2d],Jo.texture_external_type=[Js.keywords.texture_external],Jo.any_texture_type=[...Js.sampled_texture_type,...Js.multisampled_texture_type,...Js.storage_texture_type,...Js.depth_texture_type,...Js.texture_external_type],Jo.texel_format=[Js.keywords.r8unorm,Js.keywords.r8snorm,Js.keywords.r8uint,Js.keywords.r8sint,Js.keywords.r16uint,Js.keywords.r16sint,Js.keywords.r16float,Js.keywords.rg8unorm,Js.keywords.rg8snorm,Js.keywords.rg8uint,Js.keywords.rg8sint,Js.keywords.r32uint,Js.keywords.r32sint,Js.keywords.r32float,Js.keywords.rg16uint,Js.keywords.rg16sint,Js.keywords.rg16float,Js.keywords.rgba8unorm,Js.keywords.rgba8unorm_srgb,Js.keywords.rgba8snorm,Js.keywords.rgba8uint,Js.keywords.rgba8sint,Js.keywords.bgra8unorm,Js.keywords.bgra8unorm_srgb,Js.keywords.rgb10a2unorm,Js.keywords.rg11b10float,Js.keywords.rg32uint,Js.keywords.rg32sint,Js.keywords.rg32float,Js.keywords.rgba16uint,Js.keywords.rgba16sint,Js.keywords.rgba16float,Js.keywords.rgba32uint,Js.keywords.rgba32sint,Js.keywords.rgba32float],Jo.const_literal=[Js.tokens.int_literal,Js.tokens.uint_literal,Js.tokens.decimal_float_literal,Js.tokens.hex_float_literal,Js.keywords.true,Js.keywords.false],Jo.literal_or_ident=[Js.tokens.ident,Js.tokens.int_literal,Js.tokens.uint_literal,Js.tokens.decimal_float_literal,Js.tokens.hex_float_literal,Js.tokens.name],Jo.element_count_expression=[Js.tokens.int_literal,Js.tokens.uint_literal,Js.tokens.ident],Jo.template_types=[Js.keywords.vec2,Js.keywords.vec3,Js.keywords.vec4,Js.keywords.mat2x2,Js.keywords.mat2x3,Js.keywords.mat2x4,Js.keywords.mat3x2,Js.keywords.mat3x3,Js.keywords.mat3x4,Js.keywords.mat4x2,Js.keywords.mat4x3,Js.keywords.mat4x4,Js.keywords.atomic,Js.keywords.bitcast,...Js.any_texture_type],Jo.attribute_name=[Js.tokens.ident,Js.keywords.block,Js.keywords.diagnostic],Jo.assignment_operators=[Js.tokens.equal,Js.tokens.plus_equal,Js.tokens.minus_equal,Js.tokens.times_equal,Js.tokens.division_equal,Js.tokens.modulo_equal,Js.tokens.and_equal,Js.tokens.or_equal,Js.tokens.xor_equal,Js.tokens.shift_right_equal,Js.tokens.shift_left_equal],Jo.increment_operators=[Js.tokens.plus_plus,Js.tokens.minus_minus];class ea{constructor(e,t,n,r,i){this.type=e,this.lexeme=t,this.line=n,this.start=r,this.end=i}toString(){return this.lexeme}isTemplateType(){return-1!=Jo.template_types.indexOf(this.type)}isArrayType(){return this.type==Jo.keywords.array}isArrayOrTemplateType(){return this.isArrayType()||this.isTemplateType()}}class ta{constructor(e){this._tokens=[],this._start=0,this._current=0,this._line=1,this._source=null!=e?e:""}scanTokens(){for(;!this._isAtEnd();)if(this._start=this._current,!this.scanToken())throw`Invalid syntax at line ${this._line}`;return this._tokens.push(new ea(Jo.eof,"",this._line,this._current,this._current)),this._tokens}scanToken(){let e=this._advance();if("\n"==e)return this._line++,!0;if(this._isWhitespace(e))return!0;if("/"==e){if("/"==this._peekAhead()){for(;"\n"!=e;){if(this._isAtEnd())return!0;e=this._advance()}return this._line++,!0}if("*"==this._peekAhead()){this._advance();let t=1;for(;t>0;){if(this._isAtEnd())return!0;if(e=this._advance(),"\n"==e)this._line++;else if("*"==e){if("/"==this._peekAhead()&&(this._advance(),t--,0==t))return!0}else"/"==e&&"*"==this._peekAhead()&&(this._advance(),t++)}return!0}}const t=Jo.simpleTokens[e];if(t)return this._addToken(t),!0;let n=Jo.none;const r=this._isAlpha(e),i="_"===e;if(this._isAlphaNumeric(e)){let t=this._peekAhead();for(;this._isAlphaNumeric(t);)e+=this._advance(),t=this._peekAhead()}if(r){const t=Jo.keywords[e];if(t)return this._addToken(t),!0}if(r||i)return this._addToken(Jo.tokens.ident),!0;for(;;){let t=this._findType(e);const r=this._peekAhead();if("-"==e&&this._tokens.length>0){if("="==r)return this._current++,e+=r,this._addToken(Jo.tokens.minus_equal),!0;if("-"==r)return this._current++,e+=r,this._addToken(Jo.tokens.minus_minus),!0;const n=this._tokens.length-1;if((-1!=Jo.literal_or_ident.indexOf(this._tokens[n].type)||this._tokens[n].type==Jo.tokens.paren_right)&&">"!=r)return this._addToken(t),!0}if(">"==e&&(">"==r||"="==r)){let e=!1,n=this._tokens.length-1;for(let t=0;t<5&&n>=0&&-1===Jo.assignment_operators.indexOf(this._tokens[n].type);++t,--n)if(this._tokens[n].type===Jo.tokens.less_than){n>0&&this._tokens[n-1].isArrayOrTemplateType()&&(e=!0);break}if(e)return this._addToken(t),!0}if(t===Jo.none){let r=e,i=0;const s=2;for(let e=0;e=this._source.length}_isAlpha(e){return!this._isNumeric(e)&&!this._isWhitespace(e)&&"_"!==e&&"."!==e&&"("!==e&&")"!==e&&"["!==e&&"]"!==e&&"{"!==e&&"}"!==e&&","!==e&&";"!==e&&":"!==e&&"="!==e&&"!"!==e&&"<"!==e&&">"!==e&&"+"!==e&&"-"!==e&&"*"!==e&&"/"!==e&&"%"!==e&&"&"!==e&&"|"!==e&&"^"!==e&&"~"!==e&&"@"!==e&&"#"!==e&&"?"!==e&&"'"!==e&&"`"!==e&&'"'!==e&&"\\"!==e&&"\n"!==e&&"\r"!==e&&"\t"!==e&&"\0"!==e}_isNumeric(e){return e>="0"&&e<="9"}_isAlphaNumeric(e){return this._isAlpha(e)||this._isNumeric(e)||"_"===e}_isWhitespace(e){return" "==e||"\t"==e||"\r"==e}_advance(e=0){let t=this._source[this._current];return e=e||0,e++,this._current+=e,t}_peekAhead(e=0){return e=e||0,this._current+e>=this._source.length?"\0":this._source[this._current+e]}_addToken(e){const t=this._source.substring(this._start,this._current);this._tokens.push(new ea(e,t,this._line,this._start,this._current))}}function na(e){return Array.isArray(e)||(null==e?void 0:e.buffer)instanceof ArrayBuffer}const ra=new Float32Array(1),ia=new Uint32Array(ra.buffer),sa=new Uint32Array(ra.buffer),oa=new Int32Array(1),aa=new Float32Array(oa.buffer),Aa=new Uint32Array(oa.buffer),la=new Uint32Array(1),ca=new Float32Array(la.buffer),ua=new Int32Array(la.buffer);function ha(e,t,n){if(t===n)return e;if("f32"===t){if("i32"===n||"x32"===n)return ra[0]=e,ia[0];if("u32"===n)return ra[0]=e,sa[0]}else if("i32"===t||"x32"===t){if("f32"===n)return oa[0]=e,aa[0];if("u32"===n)return oa[0]=e,Aa[0]}else if("u32"===t){if("f32"===n)return la[0]=e,ca[0];if("i32"===n||"x32"===n)return la[0]=e,ua[0]}return e}class da{constructor(e){this.resources=null,this.inUse=!1,this.info=null,this.node=e}}class fa{constructor(e,t){this.align=e,this.size=t}}class pa{constructor(){this.uniforms=[],this.storage=[],this.textures=[],this.samplers=[],this.aliases=[],this.overrides=[],this.structs=[],this.entry=new Ts,this.functions=[],this._types=new Map,this._functions=new Map}_isStorageTexture(e){return"texture_storage_1d"==e.name||"texture_storage_2d"==e.name||"texture_storage_2d_array"==e.name||"texture_storage_3d"==e.name}updateAST(e){for(const t of e)t instanceof zs&&this._functions.set(t.name,new da(t));for(const t of e)if(t instanceof _o){const e=this.getTypeInfo(t,null);e instanceof hs&&this.structs.push(e)}for(const t of e)if(t instanceof uo)this.aliases.push(this._getAliasInfo(t));else{if(t instanceof Qs){const e=t,n=this._getAttributeNum(e.attributes,"id",0),r=null!=e.type?this.getTypeInfo(e.type,e.attributes):null;this.overrides.push(new ws(e.name,r,e.attributes,n));continue}if(this._isUniformVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),i=this.getTypeInfo(e.type,e.attributes),s=new _s(e.name,i,n,r,e.attributes,gs.Uniform,e.access);s.access||(s.access="read"),this.uniforms.push(s);continue}if(this._isStorageVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),i=this.getTypeInfo(e.type,e.attributes),s=this._isStorageTexture(i),o=new _s(e.name,i,n,r,e.attributes,s?gs.StorageTexture:gs.Storage,e.access);o.access||(o.access="read"),this.storage.push(o);continue}if(this._isTextureVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),i=this.getTypeInfo(e.type,e.attributes),s=this._isStorageTexture(i),o=new _s(e.name,i,n,r,e.attributes,s?gs.StorageTexture:gs.Texture,e.access);o.access||(o.access="read"),s?this.storage.push(o):this.textures.push(o);continue}if(this._isSamplerVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),i=this.getTypeInfo(e.type,e.attributes),s=new _s(e.name,i,n,r,e.attributes,gs.Sampler,e.access);this.samplers.push(s);continue}}for(const t of e)if(t instanceof zs){const e=this._getAttribute(t,"vertex"),n=this._getAttribute(t,"fragment"),r=this._getAttribute(t,"compute"),i=e||n||r,s=new Es(t.name,null==i?void 0:i.name,t.attributes);s.attributes=t.attributes,s.startLine=t.startLine,s.endLine=t.endLine,this.functions.push(s),this._functions.get(t.name).info=s,i&&(this._functions.get(t.name).inUse=!0,s.inUse=!0,s.resources=this._findResources(t,!!i),s.inputs=this._getInputs(t.args),s.outputs=this._getOutputs(t.returnType),this.entry[i.name].push(s)),s.arguments=t.args.map(e=>new xs(e.name,this.getTypeInfo(e.type,e.attributes),e.attributes)),s.returnType=t.returnType?this.getTypeInfo(t.returnType,t.attributes):null;continue}for(const t of this._functions.values())t.info&&(t.info.inUse=t.inUse,this._addCalls(t.node,t.info.calls));for(const t of this._functions.values())t.node.search(e=>{var n,r,i;if(e instanceof zo){if(e.value)if(na(e.value))for(const s of e.value)for(const e of this.overrides)s===e.name&&(null===(n=t.info)||void 0===n||n.overrides.push(e));else for(const s of this.overrides)e.value===s.name&&(null===(r=t.info)||void 0===r||r.overrides.push(s))}else if(e instanceof Co)for(const s of this.overrides)e.name===s.name&&(null===(i=t.info)||void 0===i||i.overrides.push(s))});for(const t of this.uniforms)this._markStructsInUse(t.type);for(const t of this.storage)this._markStructsInUse(t.type)}getFunctionInfo(e){for(const t of this.functions)if(t.name==e)return t;return null}getStructInfo(e){for(const t of this.structs)if(t.name==e)return t;return null}getOverrideInfo(e){for(const t of this.overrides)if(t.name==e)return t;return null}_markStructsInUse(e){if(e)if(e.isStruct){if(e.inUse=!0,e.members)for(const t of e.members)this._markStructsInUse(t.type)}else if(e.isArray)this._markStructsInUse(e.format);else if(e.isTemplate)e.format&&this._markStructsInUse(e.format);else{const t=this._getAlias(e.name);t&&this._markStructsInUse(t)}}_addCalls(e,t){var n;for(const r of e.calls){const e=null===(n=this._functions.get(r.name))||void 0===n?void 0:n.info;e&&t.add(e)}}findResource(e,t,n){if(n){for(const r of this.entry.compute)if(r.name===n)for(const n of r.resources)if(n.group==e&&n.binding==t)return n;for(const r of this.entry.vertex)if(r.name===n)for(const n of r.resources)if(n.group==e&&n.binding==t)return n;for(const r of this.entry.fragment)if(r.name===n)for(const n of r.resources)if(n.group==e&&n.binding==t)return n}for(const r of this.uniforms)if(r.group==e&&r.binding==t)return r;for(const r of this.storage)if(r.group==e&&r.binding==t)return r;for(const r of this.textures)if(r.group==e&&r.binding==t)return r;for(const r of this.samplers)if(r.group==e&&r.binding==t)return r;return null}_findResource(e){for(const t of this.uniforms)if(t.name==e)return t;for(const t of this.storage)if(t.name==e)return t;for(const t of this.textures)if(t.name==e)return t;for(const t of this.samplers)if(t.name==e)return t;return null}_markStructsFromAST(e){const t=this.getTypeInfo(e,null);this._markStructsInUse(t)}_findResources(e,t){const n=[],r=this,i=[];return e.search(s=>{if(s instanceof Fs)i.push({});else if(s instanceof Us)i.pop();else if(s instanceof Xs){const e=s;t&&null!==e.type&&this._markStructsFromAST(e.type),i.length>0&&(i[i.length-1][e.name]=e)}else if(s instanceof To){const e=s;t&&null!==e.type&&this._markStructsFromAST(e.type)}else if(s instanceof Ys){const e=s;t&&null!==e.type&&this._markStructsFromAST(e.type),i.length>0&&(i[i.length-1][e.name]=e)}else if(s instanceof Co){const e=s;if(i.length>0&&i[i.length-1][e.name])return;const t=r._findResource(e.name);t&&n.push(t)}else if(s instanceof So){const i=s,o=r._functions.get(i.name);o&&(t&&(o.inUse=!0),e.calls.add(o.node),null===o.resources&&(o.resources=r._findResources(o.node,t)),n.push(...o.resources))}else if(s instanceof ro){const i=s,o=r._functions.get(i.name);o&&(t&&(o.inUse=!0),e.calls.add(o.node),null===o.resources&&(o.resources=r._findResources(o.node,t)),n.push(...o.resources))}}),[...new Map(n.map(e=>[e.name,e])).values()]}getBindGroups(){const e=[];function t(t,n){t>=e.length&&(e.length=t+1),void 0===e[t]&&(e[t]=[]),n>=e[t].length&&(e[t].length=n+1)}for(const n of this.uniforms)t(n.group,n.binding),e[n.group][n.binding]=n;for(const n of this.storage)t(n.group,n.binding),e[n.group][n.binding]=n;for(const n of this.textures)t(n.group,n.binding),e[n.group][n.binding]=n;for(const n of this.samplers)t(n.group,n.binding),e[n.group][n.binding]=n;return e}_getOutputs(e,t=void 0){if(void 0===t&&(t=[]),e instanceof _o)this._getStructOutputs(e,t);else{const n=this._getOutputInfo(e);null!==n&&t.push(n)}return t}_getStructOutputs(e,t){for(const n of e.members)if(n.type instanceof _o)this._getStructOutputs(n.type,t);else{const e=this._getAttribute(n,"location")||this._getAttribute(n,"builtin");if(null!==e){const r=this.getTypeInfo(n.type,n.type.attributes),i=this._parseInt(e.value),s=new ys(n.name,r,e.name,i);t.push(s)}}}_getOutputInfo(e){const t=this._getAttribute(e,"location")||this._getAttribute(e,"builtin");if(null!==t){const n=this.getTypeInfo(e,e.attributes),r=this._parseInt(t.value);return new ys("",n,t.name,r)}return null}_getInputs(e,t=void 0){void 0===t&&(t=[]);for(const n of e)if(n.type instanceof _o)this._getStructInputs(n.type,t);else{const e=this._getInputInfo(n);null!==e&&t.push(e)}return t}_getStructInputs(e,t){for(const n of e.members)if(n.type instanceof _o)this._getStructInputs(n.type,t);else{const e=this._getInputInfo(n);null!==e&&t.push(e)}}_getInputInfo(e){const t=this._getAttribute(e,"location")||this._getAttribute(e,"builtin");if(null!==t){const n=this._getAttribute(e,"interpolation"),r=this.getTypeInfo(e.type,e.attributes),i=this._parseInt(t.value),s=new vs(e.name,r,t.name,i);return null!==n&&(s.interpolation=this._parseString(n.value)),s}return null}_parseString(e){return e instanceof Array&&(e=e[0]),e}_parseInt(e){e instanceof Array&&(e=e[0]);const t=parseInt(e);return isNaN(t)?e:t}_getAlias(e){for(const t of this.aliases)if(t.name==e)return t.type;return null}_getAliasInfo(e){return new bs(e.name,this.getTypeInfo(e.type,null))}getTypeInfoByName(e){for(const t of this.structs)if(t.name==e)return t;for(const t of this.aliases)if(t.name==e)return t.type;return null}getTypeInfo(e,t=null){if(this._types.has(e))return this._types.get(e);if(e instanceof vo){const n=e.type?this.getTypeInfo(e.type,e.attributes):null,r=new fs(e.name,n,t);return this._types.set(e,r),this._updateTypeInfo(r),r}if(e instanceof yo){const n=e,r=n.format?this.getTypeInfo(n.format,n.attributes):null,i=new ds(n.name,t);return i.format=r,i.count=n.count,this._types.set(e,i),this._updateTypeInfo(i),i}if(e instanceof _o){const n=e,r=new hs(n.name,t);r.startLine=n.startLine,r.endLine=n.endLine;for(const e of n.members){const t=this.getTypeInfo(e.type,e.attributes);r.members.push(new us(e.name,t,e.attributes))}return this._types.set(e,r),this._updateTypeInfo(r),r}if(e instanceof wo){const n=e,r=n.format instanceof go,i=n.format?r?this.getTypeInfo(n.format,null):new cs(n.format,null):null,s=new ps(n.name,i,t,n.access);return this._types.set(e,s),this._updateTypeInfo(s),s}if(e instanceof bo){const n=e,r=n.format?this.getTypeInfo(n.format,null):null,i=new ps(n.name,r,t,n.access);return this._types.set(e,i),this._updateTypeInfo(i),i}const n=new cs(e.name,t);return this._types.set(e,n),this._updateTypeInfo(n),n}_updateTypeInfo(e){var t,n,r;const i=this._getTypeSize(e);if(e.size=null!==(t=null==i?void 0:i.size)&&void 0!==t?t:0,e instanceof ds&&e.format){const t=this._getTypeSize(e.format);e.stride=Math.max(null!==(n=null==t?void 0:t.size)&&void 0!==n?n:0,null!==(r=null==t?void 0:t.align)&&void 0!==r?r:0),this._updateTypeInfo(e.format)}e instanceof fs&&this._updateTypeInfo(e.format),e instanceof hs&&this._updateStructInfo(e)}_updateStructInfo(e){var t;let n=0,r=0,i=0,s=0;for(let o=0,a=e.members.length;oe.name),pa._samplerTypes=Jo.sampler_type.map(e=>e.name);let ga=0;class ma{constructor(e,t,n){this.id=ga++,this.name=e,this.value=t,this.node=n}clone(){return new ma(this.name,this.value,this.node)}}class _a{constructor(e){this.id=ga++,this.name=e.name,this.node=e}clone(){return new _a(this.node)}}class ba{constructor(e){this.parent=null,this.variables=new Map,this.functions=new Map,this.currentFunctionName="",this.id=ga++,e&&(this.parent=e,this.currentFunctionName=e.currentFunctionName)}getVariable(e){var t;return this.variables.has(e)?null!==(t=this.variables.get(e))&&void 0!==t?t:null:this.parent?this.parent.getVariable(e):null}getFunction(e){var t;return this.functions.has(e)?null!==(t=this.functions.get(e))&&void 0!==t?t:null:this.parent?this.parent.getFunction(e):null}createVariable(e,t,n){this.variables.set(e,new ma(e,t,null!=n?n:null))}setVariable(e,t,n){const r=this.getVariable(e);null!==r?r.value=t:this.createVariable(e,t,n)}getVariableValue(e){var t;const n=this.getVariable(e);return null!==(t=null==n?void 0:n.value)&&void 0!==t?t:null}clone(){return new ba(this)}}class va{evalExpression(e,t){return null}getTypeInfo(e){return null}getVariableName(e,t){return""}}class ya{constructor(e){this.exec=e}getTypeInfo(e){return this.exec.getTypeInfo(e)}All(e,t){const n=this.exec.evalExpression(e.args[0],t);let r=!0;if(n instanceof Qo)return n.data.forEach(e=>{e||(r=!1)}),new $o(r?1:0,this.getTypeInfo("bool"));throw new Error(`All() expects a vector argument. Line ${e.line}`)}Any(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo){const e=n.data.some(e=>e);return new $o(e?1:0,this.getTypeInfo("bool"))}throw new Error(`Any() expects a vector argument. Line ${e.line}`)}Select(e,t){const n=this.exec.evalExpression(e.args[2],t);if(!(n instanceof $o))throw new Error(`Select() expects a bool condition. Line ${e.line}`);return n.value?this.exec.evalExpression(e.args[1],t):this.exec.evalExpression(e.args[0],t)}ArrayLength(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.evalExpression(n,t);if(r instanceof qo&&0===r.typeInfo.size){const e=r.typeInfo,t=r.buffer.byteLength/e.stride;return new $o(t,this.getTypeInfo("u32"))}return new $o(r.typeInfo.size,this.getTypeInfo("u32"))}Abs(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.abs(e)),n.typeInfo);const r=n;return new $o(Math.abs(r.value),r.typeInfo)}Acos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.acos(e)),n.typeInfo);const r=n;return new $o(Math.acos(r.value),n.typeInfo)}Acosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.acosh(e)),n.typeInfo);const r=n;return new $o(Math.acosh(r.value),n.typeInfo)}Asin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.asin(e)),n.typeInfo);const r=n;return new $o(Math.asin(r.value),n.typeInfo)}Asinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.asinh(e)),n.typeInfo);const r=n;return new $o(Math.asinh(r.value),n.typeInfo)}Atan(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.atan(e)),n.typeInfo);const r=n;return new $o(Math.atan(r.value),n.typeInfo)}Atanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.atanh(e)),n.typeInfo);const r=n;return new $o(Math.atanh(r.value),n.typeInfo)}Atan2(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo)return new Qo(n.data.map((e,t)=>Math.atan2(e,r.data[t])),n.typeInfo);const i=n,s=r;return new $o(Math.atan2(i.value,s.value),n.typeInfo)}Ceil(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.ceil(e)),n.typeInfo);const r=n;return new $o(Math.ceil(r.value),n.typeInfo)}_clamp(e,t,n){return Math.min(Math.max(e,t),n)}Clamp(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t);if(n instanceof Qo&&r instanceof Qo&&i instanceof Qo)return new Qo(n.data.map((e,t)=>this._clamp(e,r.data[t],i.data[t])),n.typeInfo);const s=n,o=r,a=i;return new $o(this._clamp(s.value,o.value,a.value),n.typeInfo)}Cos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.cos(e)),n.typeInfo);const r=n;return new $o(Math.cos(r.value),n.typeInfo)}Cosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.cosh(e)),n.typeInfo);const r=n;return new $o(Math.cos(r.value),n.typeInfo)}CountLeadingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.clz32(e)),n.typeInfo);const r=n;return new $o(Math.clz32(r.value),n.typeInfo)}_countOneBits(e){let t=0;for(;0!==e;)1&e&&t++,e>>=1;return t}CountOneBits(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>this._countOneBits(e)),n.typeInfo);const r=n;return new $o(this._countOneBits(r.value),n.typeInfo)}_countTrailingZeros(e){if(0===e)return 32;let t=0;for(;!(1&e);)e>>=1,t++;return t}CountTrailingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>this._countTrailingZeros(e)),n.typeInfo);const r=n;return new $o(this._countTrailingZeros(r.value),n.typeInfo)}Cross(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo){if(3!==n.data.length||3!==r.data.length)return null;const e=n.data,t=r.data;return new Qo([e[1]*t[2]-t[1]*e[2],e[2]*t[0]-t[2]*e[0],e[0]*t[1]-t[0]*e[1]],n.typeInfo)}return null}Degrees(e,t){const n=this.exec.evalExpression(e.args[0],t),r=180/Math.PI;return n instanceof Qo?new Qo(n.data.map(e=>e*r),n.typeInfo):new $o(n.value*r,this.getTypeInfo("f32"))}Determinant(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Yo){const e=n.data,t=n.typeInfo.getTypeName(),r=t.endsWith("h")?this.getTypeInfo("f16"):this.getTypeInfo("f32");if("mat2x2"===t||"mat2x2f"===t||"mat2x2h"===t)return new $o(e[0]*e[3]-e[1]*e[2],r);if("mat2x3"===t||"mat2x3f"===t||"mat2x3h"===t)return new $o(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),r);if("mat2x4"===t||"mat2x4f"===t||"mat2x4h"===t);else if("mat3x2"===t||"mat3x2f"===t||"mat3x2h"===t);else if("mat3x3"===t||"mat3x3f"===t||"mat3x3h"===t)return new $o(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),r)}return null}Distance(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo){let e=0;for(let t=0;tMath.exp(e)),n.typeInfo);const r=n;return new $o(Math.exp(r.value),n.typeInfo)}Exp2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.pow(2,e)),n.typeInfo);const r=n;return new $o(Math.pow(2,r.value),n.typeInfo)}ExtractBits(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t);if("u32"!==r.typeInfo.name&&"x32"!==r.typeInfo.name)return null;if("u32"!==i.typeInfo.name&&"x32"!==i.typeInfo.name)return null;const s=r.value,o=i.value;if(n instanceof Qo)return new Qo(n.data.map(e=>e>>s&(1<>s&(1<-e),n.typeInfo)}return null}_firstLeadingBit(e){return 0===e?-1:31-Math.clz32(e)}FirstLeadingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>this._firstLeadingBit(e)),n.typeInfo);const r=n;return new $o(this._firstLeadingBit(r.value),n.typeInfo)}_firstTrailingBit(e){return 0===e?-1:Math.log2(e&-e)}FirstTrailingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>this._firstTrailingBit(e)),n.typeInfo);const r=n;return new $o(this._firstTrailingBit(r.value),n.typeInfo)}Floor(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.floor(e)),n.typeInfo);const r=n;return new $o(Math.floor(r.value),n.typeInfo)}Fma(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t);if(n instanceof Qo&&r instanceof Qo&&i instanceof Qo)return n.data.length!==r.data.length||n.data.length!==i.data.length?null:new Qo(n.data.map((e,t)=>e*r.data[t]+i.data[t]),n.typeInfo);const s=n,o=r,a=i;return new $o(s.value*o.value+a.value,s.typeInfo)}Fract(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>e-Math.floor(e)),n.typeInfo);const r=n;return new $o(r.value-Math.floor(r.value),n.typeInfo)}Frexp(e,t){return null}InsertBits(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t),s=this.exec.evalExpression(e.args[3],t);if("u32"!==i.typeInfo.name&&"x32"!==i.typeInfo.name)return null;const o=i.value,a=(1<e&A|r.data[t]<1/Math.sqrt(e)),n.typeInfo);const r=n;return new $o(1/Math.sqrt(r.value),n.typeInfo)}Ldexp(e,t){return null}Length(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo){let e=0;return n.data.forEach(t=>{e+=t*t}),new $o(Math.sqrt(e),this.getTypeInfo("f32"))}const r=n;return new $o(Math.abs(r.value),n.typeInfo)}Log(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.log(e)),n.typeInfo);const r=n;return new $o(Math.log(r.value),n.typeInfo)}Log2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.log2(e)),n.typeInfo);const r=n;return new $o(Math.log2(r.value),n.typeInfo)}Max(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo)return new Qo(n.data.map((e,t)=>Math.max(e,r.data[t])),n.typeInfo);const i=n,s=r;return new $o(Math.max(i.value,s.value),n.typeInfo)}Min(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo)return new Qo(n.data.map((e,t)=>Math.min(e,r.data[t])),n.typeInfo);const i=n,s=r;return new $o(Math.min(i.value,s.value),n.typeInfo)}Mix(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t);if(n instanceof Qo&&r instanceof Qo&&i instanceof Qo)return new Qo(n.data.map((e,t)=>n.data[t]*(1-i.data[t])+r.data[t]*i.data[t]),n.typeInfo);const s=r,o=i;return new $o(n.value*(1-o.value)+s.value*o.value,n.typeInfo)}Modf(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo)return new Qo(n.data.map((e,t)=>e%r.data[t]),n.typeInfo);const i=r;return new $o(n.value%i.value,n.typeInfo)}Normalize(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo){const r=this.Length(e,t).value;return new Qo(n.data.map(e=>e/r),n.typeInfo)}return null}Pow(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo)return new Qo(n.data.map((e,t)=>Math.pow(e,r.data[t])),n.typeInfo);const i=n,s=r;return new $o(Math.pow(i.value,s.value),n.typeInfo)}QuantizeToF16(e,t){const n=this.exec.evalExpression(e.args[0],t);return n instanceof Qo?new Qo(n.data.map(e=>e),n.typeInfo):new $o(n.value,n.typeInfo)}Radians(e,t){const n=this.exec.evalExpression(e.args[0],t);return n instanceof Qo?new Qo(n.data.map(e=>e*Math.PI/180),n.typeInfo):new $o(n.value*Math.PI/180,this.getTypeInfo("f32"))}Reflect(e,t){let n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Qo&&r instanceof Qo){const e=this._dot(n.data,r.data);return new Qo(n.data.map((t,n)=>t-2*e*r.data[n]),n.typeInfo)}return null}Refract(e,t){let n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t);if(n instanceof Qo&&r instanceof Qo&&i instanceof $o){const e=this._dot(r.data,n.data);return new Qo(n.data.map((t,n)=>{const s=1-i.value*i.value*(1-e*e);if(s<0)return 0;const o=Math.sqrt(s);return i.value*t-(i.value*e+o)*r.data[n]}),n.typeInfo)}return null}ReverseBits(e,t){return null}Round(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.round(e)),n.typeInfo);const r=n;return new $o(Math.round(r.value),n.typeInfo)}Saturate(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.min(Math.max(e,0),1)),n.typeInfo);const r=n;return new $o(Math.min(Math.max(r.value,0),1),n.typeInfo)}Sign(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.sign(e)),n.typeInfo);const r=n;return new $o(Math.sign(r.value),n.typeInfo)}Sin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.sin(e)),n.typeInfo);const r=n;return new $o(Math.sin(r.value),n.typeInfo)}Sinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.sinh(e)),n.typeInfo);const r=n;return new $o(Math.sinh(r.value),n.typeInfo)}_smoothstep(e,t,n){const r=Math.min(Math.max((n-e)/(t-e),0),1);return r*r*(3-2*r)}SmoothStep(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),i=this.exec.evalExpression(e.args[2],t);if(i instanceof Qo&&n instanceof Qo&&r instanceof Qo)return new Qo(i.data.map((e,t)=>this._smoothstep(n.data[t],r.data[t],e)),i.typeInfo);const s=n,o=r,a=i;return new $o(this._smoothstep(s.value,o.value,a.value),i.typeInfo)}Sqrt(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.sqrt(e)),n.typeInfo);const r=n;return new $o(Math.sqrt(r.value),n.typeInfo)}Step(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(r instanceof Qo&&n instanceof Qo)return new Qo(r.data.map((e,t)=>eMath.tan(e)),n.typeInfo);const r=n;return new $o(Math.tan(r.value),n.typeInfo)}Tanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.tanh(e)),n.typeInfo);const r=n;return new $o(Math.tanh(r.value),n.typeInfo)}_getTransposeType(e){const t=e.getTypeName();return"mat2x2f"===t||"mat2x2h"===t?e:"mat2x3f"===t?this.getTypeInfo("mat3x2f"):"mat2x3h"===t?this.getTypeInfo("mat3x2h"):"mat2x4f"===t?this.getTypeInfo("mat4x2f"):"mat2x4h"===t?this.getTypeInfo("mat4x2h"):"mat3x2f"===t?this.getTypeInfo("mat2x3f"):"mat3x2h"===t?this.getTypeInfo("mat2x3h"):"mat3x3f"===t||"mat3x3h"===t?e:"mat3x4f"===t?this.getTypeInfo("mat4x3f"):"mat3x4h"===t?this.getTypeInfo("mat4x3h"):"mat4x2f"===t?this.getTypeInfo("mat2x4f"):"mat4x2h"===t?this.getTypeInfo("mat2x4h"):"mat4x3f"===t?this.getTypeInfo("mat3x4f"):"mat4x3h"===t?this.getTypeInfo("mat3x4h"):e}Transpose(e,t){const n=this.exec.evalExpression(e.args[0],t);if(!(n instanceof Yo))return null;const r=this._getTransposeType(n.typeInfo);if("mat2x2"===n.typeInfo.name||"mat2x2f"===n.typeInfo.name||"mat2x2h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[2],e[1],e[3]],r)}if("mat2x3"===n.typeInfo.name||"mat2x3f"===n.typeInfo.name||"mat2x3h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[3],e[6],e[1],e[4],e[7]],r)}if("mat2x4"===n.typeInfo.name||"mat2x4f"===n.typeInfo.name||"mat2x4h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13]],r)}if("mat3x2"===n.typeInfo.name||"mat3x2f"===n.typeInfo.name||"mat3x2h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[3],e[1],e[4],e[2],e[5]],r)}if("mat3x3"===n.typeInfo.name||"mat3x3f"===n.typeInfo.name||"mat3x3h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]],r)}if("mat3x4"===n.typeInfo.name||"mat3x4f"===n.typeInfo.name||"mat3x4h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14]],r)}if("mat4x2"===n.typeInfo.name||"mat4x2f"===n.typeInfo.name||"mat4x2h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[4],e[1],e[5],e[2],e[6]],r)}if("mat4x3"===n.typeInfo.name||"mat4x3f"===n.typeInfo.name||"mat4x3h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]],r)}if("mat4x4"===n.typeInfo.name||"mat4x4f"===n.typeInfo.name||"mat4x4h"===n.typeInfo.name){const e=n.data;return new Yo([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]],r)}return null}Trunc(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Qo)return new Qo(n.data.map(e=>Math.trunc(e)),n.typeInfo);const r=n;return new $o(Math.trunc(r.value),n.typeInfo)}Dpdx(e,t){return null}DpdxCoarse(e,t){return null}DpdxFine(e,t){return null}Dpdy(e,t){return null}DpdyCoarse(e,t){return null}DpdyFine(e,t){return null}Fwidth(e,t){return null}FwidthCoarse(e,t){return null}FwidthFine(e,t){return null}TextureDimensions(e,t){const n=e.args[0],r=e.args.length>1?this.exec.evalExpression(e.args[1],t).value:0;if(n instanceof Co){const e=n.name,i=t.getVariableValue(e);if(i instanceof Ko){if(r<0||r>=i.mipLevelCount)return null;const e=i.getMipLevelSize(r),t=i.dimension;return"1d"===t?new $o(e[0],this.getTypeInfo("u32")):"3d"===t?new Qo(e,this.getTypeInfo("vec3u")):"2d"===t?new Qo(e.slice(0,2),this.getTypeInfo("vec2u")):null}return null}return null}TextureGather(e,t){return null}TextureGatherCompare(e,t){return null}TextureLoad(e,t){const n=e.args[0],r=this.exec.evalExpression(e.args[1],t),i=e.args.length>2?this.exec.evalExpression(e.args[2],t).value:0;if(!(r instanceof Qo)||2!==r.data.length)return null;if(n instanceof Co){const e=n.name,s=t.getVariableValue(e);if(s instanceof Ko){const e=Math.floor(r.data[0]),t=Math.floor(r.data[1]);if(e<0||e>=s.width||t<0||t>=s.height)return null;const n=s.getPixel(e,t,0,i);return null===n?null:new Qo(n,this.getTypeInfo("vec4f"))}return null}return null}TextureNumLayers(e,t){const n=e.args[0];if(n instanceof Co){const e=n.name,r=t.getVariableValue(e);return r instanceof Ko?new $o(r.depthOrArrayLayers,this.getTypeInfo("u32")):null}return null}TextureNumLevels(e,t){const n=e.args[0];if(n instanceof Co){const e=n.name,r=t.getVariableValue(e);return r instanceof Ko?new $o(r.mipLevelCount,this.getTypeInfo("u32")):null}return null}TextureNumSamples(e,t){const n=e.args[0];if(n instanceof Co){const e=n.name,r=t.getVariableValue(e);return r instanceof Ko?new $o(r.sampleCount,this.getTypeInfo("u32")):null}return null}TextureSample(e,t){return null}TextureSampleBias(e,t){return null}TextureSampleCompare(e,t){return null}TextureSampleCompareLevel(e,t){return null}TextureSampleGrad(e,t){return null}TextureSampleLevel(e,t){return null}TextureSampleBaseClampToEdge(e,t){return null}TextureStore(e,t){const n=e.args[0],r=this.exec.evalExpression(e.args[1],t),i=4===e.args.length?this.exec.evalExpression(e.args[2],t).value:0,s=4===e.args.length?this.exec.evalExpression(e.args[3],t).data:this.exec.evalExpression(e.args[2],t).data;if(4!==s.length)return null;if(!(r instanceof Qo)||2!==r.data.length)return null;if(n instanceof Co){const e=n.name,o=t.getVariableValue(e);if(o instanceof Ko){const e=o.getMipLevelSize(0),t=Math.floor(r.data[0]),n=Math.floor(r.data[1]);return t<0||t>=e[0]||n<0||n>=e[1]||o.setPixel(t,n,0,i,Array.from(s)),null}return null}return null}AtomicLoad(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t);return t.getVariable(r).value.getSubData(this.exec,n.postfix,t)}AtomicStore(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t);return a instanceof $o&&o instanceof $o&&(a.value=o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),null}AtomicAdd(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value+=o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicSub(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value-=o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicMax(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value=Math.max(a.value,o.value)),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicMin(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value=Math.min(a.value,o.value)),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicAnd(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value=a.value&o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicOr(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value=a.value|o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicXor(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value=a.value^o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicExchange(e,t){let n=e.args[0];n instanceof Lo&&(n=n.right);const r=this.exec.getVariableName(n,t),i=t.getVariable(r);let s=e.args[1];const o=this.exec.evalExpression(s,t),a=i.value.getSubData(this.exec,n.postfix,t),A=new $o(a.value,a.typeInfo);return a instanceof $o&&o instanceof $o&&(a.value=o.value),i.value instanceof qo&&i.value.setDataValue(this.exec,a,n.postfix,t),A}AtomicCompareExchangeWeak(e,t){return null}Pack4x8snorm(e,t){return null}Pack4x8unorm(e,t){return null}Pack4xI8(e,t){return null}Pack4xU8(e,t){return null}Pack4x8Clamp(e,t){return null}Pack4xU8Clamp(e,t){return null}Pack2x16snorm(e,t){return null}Pack2x16unorm(e,t){return null}Pack2x16float(e,t){return null}Unpack4x8snorm(e,t){return null}Unpack4x8unorm(e,t){return null}Unpack4xI8(e,t){return null}Unpack4xU8(e,t){return null}Unpack2x16snorm(e,t){return null}Unpack2x16unorm(e,t){return null}Unpack2x16float(e,t){return null}StorageBarrier(e,t){return null}TextureBarrier(e,t){return null}WorkgroupBarrier(e,t){return null}WorkgroupUniformLoad(e,t){return null}SubgroupAdd(e,t){return null}SubgroupExclusiveAdd(e,t){return null}SubgroupInclusiveAdd(e,t){return null}SubgroupAll(e,t){return null}SubgroupAnd(e,t){return null}SubgroupAny(e,t){return null}SubgroupBallot(e,t){return null}SubgroupBroadcast(e,t){return null}SubgroupBroadcastFirst(e,t){return null}SubgroupElect(e,t){return null}SubgroupMax(e,t){return null}SubgroupMin(e,t){return null}SubgroupMul(e,t){return null}SubgroupExclusiveMul(e,t){return null}SubgroupInclusiveMul(e,t){return null}SubgroupOr(e,t){return null}SubgroupShuffle(e,t){return null}SubgroupShuffleDown(e,t){return null}SubgroupShuffleUp(e,t){return null}SubgroupShuffleXor(e,t){return null}SubgroupXor(e,t){return null}QuadBroadcast(e,t){return null}QuadSwapDiagonal(e,t){return null}QuadSwapX(e,t){return null}QuadSwapY(e,t){return null}}const wa={vec2:2,vec2f:2,vec2i:2,vec2u:2,vec2b:2,vec2h:2,vec3:3,vec3f:3,vec3i:3,vec3u:3,vec3b:3,vec3h:3,vec4:4,vec4f:4,vec4i:4,vec4u:4,vec4b:4,vec4h:4},xa={mat2x2:[2,2,4],mat2x2f:[2,2,4],mat2x2h:[2,2,4],mat2x3:[2,3,6],mat2x3f:[2,3,6],mat2x3h:[2,3,6],mat2x4:[2,4,8],mat2x4f:[2,4,8],mat2x4h:[2,4,8],mat3x2:[3,2,6],mat3x2f:[3,2,6],mat3x2h:[3,2,6],mat3x3:[3,3,9],mat3x3f:[3,3,9],mat3x3h:[3,3,9],mat3x4:[3,4,12],mat3x4f:[3,4,12],mat3x4h:[3,4,12],mat4x2:[4,2,8],mat4x2f:[4,2,8],mat4x2h:[4,2,8],mat4x3:[4,3,12],mat4x3f:[4,3,12],mat4x3h:[4,3,12],mat4x4:[4,4,16],mat4x4f:[4,4,16],mat4x4h:[4,4,16]};class Ea extends va{constructor(e,t){var n;super(),this.ast=null!=e?e:[],this.reflection=new pa,this.reflection.updateAST(this.ast),this.context=null!==(n=null==t?void 0:t.clone())&&void 0!==n?n:new ba,this.builtins=new ya(this),this.typeInfo={bool:this.getTypeInfo(go.bool),i32:this.getTypeInfo(go.i32),u32:this.getTypeInfo(go.u32),f32:this.getTypeInfo(go.f32),f16:this.getTypeInfo(go.f16),vec2f:this.getTypeInfo(bo.vec2f),vec2u:this.getTypeInfo(bo.vec2u),vec2i:this.getTypeInfo(bo.vec2i),vec2h:this.getTypeInfo(bo.vec2h),vec3f:this.getTypeInfo(bo.vec3f),vec3u:this.getTypeInfo(bo.vec3u),vec3i:this.getTypeInfo(bo.vec3i),vec3h:this.getTypeInfo(bo.vec3h),vec4f:this.getTypeInfo(bo.vec4f),vec4u:this.getTypeInfo(bo.vec4u),vec4i:this.getTypeInfo(bo.vec4i),vec4h:this.getTypeInfo(bo.vec4h),mat2x2f:this.getTypeInfo(bo.mat2x2f),mat2x3f:this.getTypeInfo(bo.mat2x3f),mat2x4f:this.getTypeInfo(bo.mat2x4f),mat3x2f:this.getTypeInfo(bo.mat3x2f),mat3x3f:this.getTypeInfo(bo.mat3x3f),mat3x4f:this.getTypeInfo(bo.mat3x4f),mat4x2f:this.getTypeInfo(bo.mat4x2f),mat4x3f:this.getTypeInfo(bo.mat4x3f),mat4x4f:this.getTypeInfo(bo.mat4x4f)}}getVariableValue(e){var t,n;const r=null!==(n=null===(t=this.context.getVariable(e))||void 0===t?void 0:t.value)&&void 0!==n?n:null;if(null===r)return null;if(r instanceof $o)return r.value;if(r instanceof Qo)return Array.from(r.data);if(r instanceof Yo)return Array.from(r.data);if(r instanceof qo&&r.typeInfo instanceof ds){if("u32"===r.typeInfo.format.name)return Array.from(new Uint32Array(r.buffer,r.offset,r.typeInfo.count));if("i32"===r.typeInfo.format.name)return Array.from(new Int32Array(r.buffer,r.offset,r.typeInfo.count));if("f32"===r.typeInfo.format.name)return Array.from(new Float32Array(r.buffer,r.offset,r.typeInfo.count))}return null}execute(e){(e=null!=e?e:{}).constants&&this._setOverrides(e.constants,this.context),this._execStatements(this.ast,this.context)}dispatchWorkgroups(e,t,n,r){const i=this.context.clone();(r=null!=r?r:{}).constants&&this._setOverrides(r.constants,i),this._execStatements(this.ast,i);const s=i.getFunction(e);if(!s)return;if("number"==typeof t)t=[t,1,1];else{if(0===t.length)return;1===t.length?t=[t[0],1,1]:2===t.length?t=[t[0],t[1],1]:t.length>3&&(t=[t[0],t[1],t[2]])}const o=t[0],a=t[1],A=t[2],l=this.getTypeInfo("vec3u");i.setVariable("@num_workgroups",new Qo(t,l));const c=this.reflection.getFunctionInfo(e);for(const u in n)for(const e in n[u]){const t=n[u][e];i.variables.forEach(n=>{var r;const i=n.node;if(null==i?void 0:i.attributes){let s=null,o=null;for(const e of i.attributes)"binding"===e.name?s=e.value:"group"===e.name&&(o=e.value);if(e==s&&u==o){let s=!1;for(const t of c.resources)if(t.name===n.name&&t.group===parseInt(u)&&t.binding===parseInt(e)){s=!0;break}if(s)if(void 0!==t.texture&&void 0!==t.descriptor){const e=new Ko(t.texture,this.getTypeInfo(i.type),t.descriptor,null!==(r=t.texture.view)&&void 0!==r?r:null);n.value=e}else void 0!==t.uniform?n.value=new qo(t.uniform,this.getTypeInfo(i.type)):n.value=new qo(t,this.getTypeInfo(i.type))}}})}for(let u=0;u0){const e=n.getVariableValue(l.value[0]);r[0]=e instanceof $o?e.value:parseInt(l.value[0])}if(l.value.length>1){const e=n.getVariableValue(l.value[1]);r[1]=e instanceof $o?e.value:parseInt(l.value[1])}if(l.value.length>2){const e=n.getVariableValue(l.value[2]);r[2]=e instanceof $o?e.value:parseInt(l.value[2])}}const i=this.getTypeInfo("vec3u"),s=this.getTypeInfo("u32");n.setVariable("@workgroup_size",new Qo(r,i));const o=r[0],a=r[1],A=r[2];for(let l=0,c=0;l",i=null;if(e.variable instanceof Lo){const n=this._getVariableData(e.variable,t),r=this.evalExpression(e.value,t),i=e.operator;if("="===i){if(n instanceof $o||n instanceof Qo||n instanceof Yo){if(r instanceof $o||r instanceof Qo||r instanceof Yo&&n.data.length===r.data.length)return void n.data.set(r.data)}else if(n instanceof qo&&r instanceof qo&&n.buffer.byteLength-n.offset>=r.buffer.byteLength-r.offset)return void(n.buffer.byteLength%4==0?new Uint32Array(n.buffer,n.offset,n.typeInfo.size/4).set(new Uint32Array(r.buffer,r.offset,r.typeInfo.size/4)):new Uint8Array(n.buffer,n.offset,n.typeInfo.size).set(new Uint8Array(r.buffer,r.offset,r.typeInfo.size)));return null}if("+="===i)return(n instanceof $o||n instanceof Qo||n instanceof Yo)&&(r instanceof $o||r instanceof Qo||r instanceof Yo)?void n.data.set(r.data.map((e,t)=>n.data[t]+e)):void 0;if("-="===i)return(n instanceof $o||n instanceof Qo||n instanceof Yo)&&(r instanceof $o||r instanceof Qo||r instanceof Yo)?void n.data.set(r.data.map((e,t)=>n.data[t]-e)):void 0}if(e.variable instanceof Lo){if("*"===e.variable.operator){r=this.getVariableName(e.variable.right,t);const i=t.getVariable(r);if(!(i&&i.value instanceof Ho))return;n=i.value.reference;let s=e.variable.postfix;if(!s){let t=e.variable.right;for(;t instanceof Lo;){if(t.postfix){s=t.postfix;break}t=t.right}}s&&(n=n.getSubData(this,s,t))}}else{i=e.variable.postfix,r=this.getVariableName(e.variable,t);const s=t.getVariable(r);if(null===s)return;n=s.value}if(n instanceof Ho&&(n=n.reference),null===n)return;const s=this.evalExpression(e.value,t),o=e.operator;if("="!==o){const e=n.getSubData(this,i,t);if(e instanceof Qo&&s instanceof $o){const t=e.data,n=s.value;if("+="===o)for(let e=0;e>="===o)for(let e=0;e>=n}else if(e instanceof Qo&&s instanceof Qo){const t=e.data,n=s.data;if(t.length!==n.length)return;if("+="===o)for(let e=0;e>="===o)for(let e=0;e>=n[e]}else{if(!(e instanceof $o&&s instanceof $o))return;"+="===o?e.value+=s.value:"-="===o?e.value-=s.value:"*="===o?e.value*=s.value:"/="===o?e.value/=s.value:"%="===o?e.value%=s.value:"&="===o?e.value&=s.value:"|="===o?e.value|=s.value:"^="===o?e.value^=s.value:"<<="===o?e.value<<=s.value:">>="===o&&(e.value>>=s.value)}return void(n instanceof qo&&n.setDataValue(this,e,i,t))}if(n instanceof qo)n.setDataValue(this,s,i,t);else if(i){if(!(n instanceof Qo||n instanceof Yo))return;if(i instanceof Io){const e=this.evalExpression(i.index,t).value;if(n instanceof Qo){if(!(s instanceof $o))return;n.data[e]=s.value}else{if(!(n instanceof Yo))return;{const e=this.evalExpression(i.index,t).value;if(e<0)return;if(!(s instanceof Qo))return;{const t=n.typeInfo.getTypeName();if("mat2x2"===t||"mat2x2f"===t||"mat2x2h"===t){if(!(e<2&&2===s.data.length))return;n.data[2*e]=s.data[0],n.data[2*e+1]=s.data[1]}else if("mat2x3"===t||"mat2x3f"===t||"mat2x3h"===t){if(!(e<2&&3===s.data.length))return;n.data[3*e]=s.data[0],n.data[3*e+1]=s.data[1],n.data[3*e+2]=s.data[2]}else if("mat2x4"===t||"mat2x4f"===t||"mat2x4h"===t){if(!(e<2&&4===s.data.length))return;n.data[4*e]=s.data[0],n.data[4*e+1]=s.data[1],n.data[4*e+2]=s.data[2],n.data[4*e+3]=s.data[3]}else if("mat3x2"===t||"mat3x2f"===t||"mat3x2h"===t){if(!(e<3&&2===s.data.length))return;n.data[2*e]=s.data[0],n.data[2*e+1]=s.data[1]}else if("mat3x3"===t||"mat3x3f"===t||"mat3x3h"===t){if(!(e<3&&3===s.data.length))return;n.data[3*e]=s.data[0],n.data[3*e+1]=s.data[1],n.data[3*e+2]=s.data[2]}else if("mat3x4"===t||"mat3x4f"===t||"mat3x4h"===t){if(!(e<3&&4===s.data.length))return;n.data[4*e]=s.data[0],n.data[4*e+1]=s.data[1],n.data[4*e+2]=s.data[2],n.data[4*e+3]=s.data[3]}else if("mat4x2"===t||"mat4x2f"===t||"mat4x2h"===t){if(!(e<4&&2===s.data.length))return;n.data[2*e]=s.data[0],n.data[2*e+1]=s.data[1]}else if("mat4x3"===t||"mat4x3f"===t||"mat4x3h"===t){if(!(e<4&&3===s.data.length))return;n.data[3*e]=s.data[0],n.data[3*e+1]=s.data[1],n.data[3*e+2]=s.data[2]}else{if("mat4x4"!==t&&"mat4x4f"!==t&&"mat4x4h"!==t)return;if(!(e<4&&4===s.data.length))return;n.data[4*e]=s.data[0],n.data[4*e+1]=s.data[1],n.data[4*e+2]=s.data[2],n.data[4*e+3]=s.data[3]}}}}}else if(i instanceof Eo){const e=i.value;if(!(n instanceof Qo))return;if(s instanceof $o){if(e.length>1)return;if("x"===e)n.data[0]=s.value;else if("y"===e){if(n.data.length<2)return;n.data[1]=s.value}else if("z"===e){if(n.data.length<3)return;n.data[2]=s.value}else if("w"===e){if(n.data.length<4)return;n.data[3]=s.value}}else{if(!(s instanceof Qo))return;if(e.length!==s.data.length)return;for(let t=0;t+e);return new Qo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new $o(+e,t)}case"-":{if(na(r)){const e=r.map((e,t)=>-e);return new Qo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new $o(-e,t)}case"!":{if(na(r)){const e=r.map((e,t)=>e?0:1);return new Qo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new $o(e?0:1,t)}case"~":{if(na(r)){const e=r.map((e,t)=>~e);return new Qo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new $o(~e,t)}}return null}_evalBinaryOp(e,t){const n=this.evalExpression(e.left,t),r=this.evalExpression(e.right,t),i=n instanceof $o?n.value:n instanceof Qo||n instanceof Yo?Array.from(n.data):null,s=r instanceof $o?r.value:r instanceof Qo||r instanceof Yo?Array.from(r.data):null;switch(e.operator){case"+":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e+t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t+e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e+t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e+t,o)}case"-":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e-t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t-e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e-t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e-t,o)}case"*":{if(na(i)&&na(s)){const e=i,t=s;if(n instanceof Yo&&r instanceof Yo){const i=function(e,t,n,r){if(void 0===xa[t.name]||void 0===xa[r.name])return null;const i=xa[t.name][0],s=xa[t.name][1],o=xa[r.name][0];if(i!==xa[r.name][1])return null;const a=new Array(o*s);for(let A=0;Ae*t[n]);return new Qo(r,n.typeInfo)}}if(na(i)){const e=s,t=i.map((t,n)=>t*e);return n instanceof Yo?new Yo(t,n.typeInfo):new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e*t);return r instanceof Yo?new Yo(t,r.typeInfo):new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e*t,o)}case"%":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e%t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t%e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e%t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e%t,o)}case"/":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e/t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t/e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e/t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e/t,o)}case"&":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e&t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t&e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e&t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e&t,o)}case"|":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e|t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t|e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e|t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e|t,o)}case"^":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e^t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t^e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e^t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e^t,o)}case"<<":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e<t<e<>":{if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e>>t[n]);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t>>e);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e>>t);return new Qo(t,r.typeInfo)}const e=i,t=s,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new $o(e>>t,o)}case">":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e>t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t>e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e>t?1:0);return new Qo(t,r.typeInfo)}return new $o(i>s?1:0,this.getTypeInfo("bool"));case"<":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>etee===t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t==e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e==t?1:0);return new Qo(t,r.typeInfo)}return new $o(i===s?1:0,this.getTypeInfo("bool"));case"!=":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e!==t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t!==e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e!==t?1:0);return new Qo(t,r.typeInfo)}return new $o(i!==s?1:0,this.getTypeInfo("bool"));case">=":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e>=t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t>=e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e>=t?1:0);return new Qo(t,r.typeInfo)}return new $o(i>=s?1:0,this.getTypeInfo("bool"));case"<=":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e<=t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t<=e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e<=t?1:0);return new Qo(t,r.typeInfo)}return new $o(i<=s?1:0,this.getTypeInfo("bool"));case"&&":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e&&t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t&&e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e&&t?1:0);return new Qo(t,r.typeInfo)}return new $o(i&&s?1:0,this.getTypeInfo("bool"));case"||":if(na(i)&&na(s)){const e=i,t=s;if(e.length!==t.length)return null;const r=e.map((e,n)=>e||t[n]?1:0);return new Qo(r,n.typeInfo)}if(na(i)){const e=s,t=i.map((t,n)=>t||e?1:0);return new Qo(t,n.typeInfo)}if(na(s)){const e=i,t=s.map((t,n)=>e||t?1:0);return new Qo(t,r.typeInfo)}return new $o(i||s?1:0,this.getTypeInfo("bool"))}return null}_evalCall(e,t){if(null!==e.cachedReturnValue)return e.cachedReturnValue;const n=t.clone();n.currentFunctionName=e.name;const r=t.getFunction(e.name);if(!r)return e.isBuiltin?this._callBuiltinFunction(e,n):this.getTypeInfo(e.name)?this._evalCreate(e,t):null;for(let i=0;ii?s.slice(0,i):s,n).getSubData(this,e.postfix,t)}_callConstructorMatrix(e,t){const n=this.getTypeInfo(e.type),r=e.type.getTypeName(),i=xa[r];if(void 0===i)return null;const s=[];if(e instanceof Ro)if(e.isVector){const t=e.vectorValue;for(const e of t)s.push(e)}else s.push(e.scalarValue);else if(e.args)for(const o of e.args){const e=this.evalExpression(o,t);e instanceof Qo?s.push(...e.data):e instanceof $o?s.push(e.value):e instanceof Yo&&s.push(...e.data)}if(n instanceof ps&&null===n.format&&(n.format=this.getTypeInfo("f32")),0===s.length){const r=new Array(i[2]).fill(0);return new Yo(r,n).getSubData(this,e.postfix,t)}return s.length!==i[2]?null:new Yo(s,n).getSubData(this,e.postfix,t)}}Ea._breakObj=new Vo(new cs("BREAK",null),null),Ea._continueObj=new Vo(new cs("CONTINUE",null),null),Ea._priority=new Map([["f32",0],["f16",1],["u32",2],["i32",3],["x32",3]]);class Ta{constructor(){this.constants=new Map,this.aliases=new Map,this.structs=new Map}}class Sa{constructor(){this._tokens=[],this._current=0,this._currentLine=1,this._deferArrayCountEval=[],this._currentLoop=[],this._context=new Ta,this._exec=new Ea,this._forwardTypeCount=0}parse(e){this._initialize(e),this._deferArrayCountEval.length=0;const t=[];for(;!this._isAtEnd();){const e=this._global_decl_or_directive();if(!e)break;t.push(e)}if(this._deferArrayCountEval.length>0){for(const e of this._deferArrayCountEval){const t=e.arrayType,r=e.countNode;if(r instanceof Co){const e=r.name,i=this._context.constants.get(e);if(i)try{const e=i.constEvaluate(this._exec);t.count=e}catch(n){}}}this._deferArrayCountEval.length=0}if(this._forwardTypeCount>0)for(const r of t)r.search(e=>{e instanceof Go||e instanceof vo?e.type=this._forwardType(e.type):e instanceof yo?e.format=this._forwardType(e.format):e instanceof Xs||e instanceof Ys||e instanceof qs?e.type=this._forwardType(e.type):e instanceof zs?e.returnType=this._forwardType(e.returnType):e instanceof Uo&&(e.type=this._forwardType(e.type))});return t}_forwardType(e){if(e instanceof mo){const t=this._getType(e.name);if(t)return t}else e instanceof vo?e.type=this._forwardType(e.type):e instanceof yo&&(e.format=this._forwardType(e.format));return e}_initialize(e){if(e)if("string"==typeof e){const t=new ta(e);this._tokens=t.scanTokens()}else this._tokens=e;else this._tokens=[];this._current=0}_updateNode(e,t){return e.line=null!=t?t:this._currentLine,e}_error(e,t){return{token:e,message:t,toString:()=>`${t}`}}_isAtEnd(){return this._current>=this._tokens.length||this._peek().type==Jo.eof}_match(e){if(e instanceof Zo)return!!this._check(e)&&(this._advance(),!0);for(let t=0,n=e.length;t0){const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id}e=t,this._check(Jo.keywords.if)&&(this._advance(),t.condition=this._optional_paren_expression())}else if(this._match(Jo.keywords.continue)){const t=this._updateNode(new po);if(!(this._currentLoop.length>0))throw this._error(this._peek(),`Continue statement must be inside a loop. Line: ${t.line}`);{const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id}e=t}else e=this._increment_decrement_statement()||this._func_call_statement()||this._assignment_statement();return null!=e&&this._consume(Jo.tokens.semicolon,"Expected ';' after statement."),e}_static_assert_statement(){if(!this._match(Jo.keywords.static_assert))return null;const e=this._currentLine,t=this._optional_paren_expression();return this._updateNode(new Vs(t),e)}_while_statement(){if(!this._match(Jo.keywords.while))return null;const e=this._updateNode(new Ws(null,null));return this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(Jo.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_continuing_statement(){const e=this._currentLoop.length>0?this._currentLoop[this._currentLoop.length-1].id:-1;if(!this._match(Jo.keywords.continuing))return null;const t=this._currentLine,n=this._compound_statement();return this._updateNode(new Hs(n,e),t)}_for_statement(){if(!this._match(Jo.keywords.for))return null;this._consume(Jo.tokens.paren_left,"Expected '('.");const e=this._updateNode(new $s(null,null,null,null));return this._currentLoop.push(e),e.init=this._check(Jo.tokens.semicolon)?null:this._for_init(),this._consume(Jo.tokens.semicolon,"Expected ';'."),e.condition=this._check(Jo.tokens.semicolon)?null:this._short_circuit_or_expression(),this._consume(Jo.tokens.semicolon,"Expected ';'."),e.increment=this._check(Jo.tokens.paren_right)?null:this._for_increment(),this._consume(Jo.tokens.paren_right,"Expected ')'."),this._check(Jo.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_for_init(){return this._variable_statement()||this._func_call_statement()||this._assignment_statement()}_for_increment(){return this._func_call_statement()||this._increment_decrement_statement()||this._assignment_statement()}_variable_statement(){if(this._check(Jo.keywords.var)){const e=this._variable_decl();if(null===e)throw this._error(this._peek(),"Variable declaration expected.");let t=null;return this._match(Jo.tokens.equal)&&(t=this._short_circuit_or_expression()),this._updateNode(new Xs(e.name,e.type,e.storage,e.access,t),e.line)}if(this._match(Jo.keywords.let)){const e=this._currentLine,t=this._consume(Jo.tokens.name,"Expected name for let.").toString();let n=null;if(this._match(Jo.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}this._consume(Jo.tokens.equal,"Expected '=' for let.");const r=this._short_circuit_or_expression();return this._updateNode(new Ys(t,n,null,null,r),e)}if(this._match(Jo.keywords.const)){const e=this._currentLine,t=this._consume(Jo.tokens.name,"Expected name for const.").toString();let n=null;if(this._match(Jo.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}this._consume(Jo.tokens.equal,"Expected '=' for const.");const r=this._short_circuit_or_expression();return null===n&&r instanceof Ro&&(n=r.type),this._updateNode(new qs(t,n,null,null,r),e)}return null}_increment_decrement_statement(){const e=this._current,t=this._unary_expression();if(null==t)return null;if(!this._check(Jo.increment_operators))return this._current=e,null;const n=this._consume(Jo.increment_operators,"Expected increment operator");return this._updateNode(new to(n.type===Jo.tokens.plus_plus?Ks.increment:Ks.decrement,t))}_assignment_statement(){let e=null;const t=this._currentLine;if(this._check(Jo.tokens.brace_right))return null;let n=this._match(Jo.tokens.underscore);if(n||(e=this._unary_expression()),!n&&null==e)return null;const r=this._consume(Jo.assignment_operators,"Expected assignment operator."),i=this._short_circuit_or_expression();return this._updateNode(new no(Zs.parse(r.lexeme),e,i),t)}_func_call_statement(){if(!this._check(Jo.tokens.ident))return null;const e=this._currentLine,t=this._current,n=this._consume(Jo.tokens.ident,"Expected function name."),r=this._argument_expression_list();return null===r?(this._current=t,null):this._updateNode(new ro(n.lexeme,r),e)}_loop_statement(){if(!this._match(Jo.keywords.loop))return null;this._check(Jo.tokens.attr)&&this._attribute(),this._consume(Jo.tokens.brace_left,"Expected '{' for loop.");const e=this._updateNode(new io([],null));this._currentLoop.push(e);let t=this._statement();for(;null!==t;){if(Array.isArray(t))for(let n of t)e.body.push(n);else e.body.push(t);if(t instanceof Hs){e.continuing=t;break}t=this._statement()}return this._currentLoop.pop(),this._consume(Jo.tokens.brace_right,"Expected '}' for loop."),e}_switch_statement(){if(!this._match(Jo.keywords.switch))return null;const e=this._updateNode(new so(null,[]));if(this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(Jo.tokens.attr)&&this._attribute(),this._consume(Jo.tokens.brace_left,"Expected '{' for switch."),e.cases=this._switch_body(),null==e.cases||0==e.cases.length)throw this._error(this._previous(),"Expected 'case' or 'default'.");return this._consume(Jo.tokens.brace_right,"Expected '}' for switch."),this._currentLoop.pop(),e}_switch_body(){const e=[];let t=!1;for(;this._check([Jo.keywords.default,Jo.keywords.case]);){if(this._match(Jo.keywords.case)){const n=this._case_selectors();for(const e of n)if(e instanceof Do){if(t)throw this._error(this._previous(),"Multiple default cases in switch statement.");t=!0;break}this._match(Jo.tokens.colon),this._check(Jo.tokens.attr)&&this._attribute(),this._consume(Jo.tokens.brace_left,"Exected '{' for switch case.");const r=this._case_body();this._consume(Jo.tokens.brace_right,"Exected '}' for switch case."),e.push(this._updateNode(new Oo(n,r)))}if(this._match(Jo.keywords.default)){if(t)throw this._error(this._previous(),"Multiple default cases in switch statement.");this._match(Jo.tokens.colon),this._check(Jo.tokens.attr)&&this._attribute(),this._consume(Jo.tokens.brace_left,"Exected '{' for switch default.");const n=this._case_body();this._consume(Jo.tokens.brace_right,"Exected '}' for switch default."),e.push(this._updateNode(new Fo(n)))}}return e}_case_selectors(){const e=[];for(this._match(Jo.keywords.default)?e.push(this._updateNode(new Do)):e.push(this._shift_expression());this._match(Jo.tokens.comma);)this._match(Jo.keywords.default)?e.push(this._updateNode(new Do)):e.push(this._shift_expression());return e}_case_body(){if(this._match(Jo.keywords.fallthrough))return this._consume(Jo.tokens.semicolon,"Expected ';'"),[];let e=this._statement();if(null==e)return[];e instanceof Array||(e=[e]);const t=this._case_body();return 0==t.length?e:[...e,t[0]]}_if_statement(){if(!this._match(Jo.keywords.if))return null;const e=this._currentLine,t=this._optional_paren_expression();this._check(Jo.tokens.attr)&&this._attribute();const n=this._compound_statement();let r=[];this._match_elseif()&&(this._check(Jo.tokens.attr)&&this._attribute(),r=this._elseif_statement(r));let i=null;return this._match(Jo.keywords.else)&&(this._check(Jo.tokens.attr)&&this._attribute(),i=this._compound_statement()),this._updateNode(new oo(t,n,r,i),e)}_match_elseif(){return this._tokens[this._current].type===Jo.keywords.else&&this._tokens[this._current+1].type===Jo.keywords.if&&(this._advance(),this._advance(),!0)}_elseif_statement(e=[]){const t=this._optional_paren_expression(),n=this._compound_statement();return e.push(this._updateNode(new jo(t,n))),this._match_elseif()&&(this._check(Jo.tokens.attr)&&this._attribute(),this._elseif_statement(e)),e}_return_statement(){if(!this._match(Jo.keywords.return))return null;const e=this._short_circuit_or_expression();return this._updateNode(new ao(e))}_short_circuit_or_expression(){let e=this._short_circuit_and_expr();for(;this._match(Jo.tokens.or_or);)e=this._updateNode(new No(this._previous().toString(),e,this._short_circuit_and_expr()));return e}_short_circuit_and_expr(){let e=this._inclusive_or_expression();for(;this._match(Jo.tokens.and_and);)e=this._updateNode(new No(this._previous().toString(),e,this._inclusive_or_expression()));return e}_inclusive_or_expression(){let e=this._exclusive_or_expression();for(;this._match(Jo.tokens.or);)e=this._updateNode(new No(this._previous().toString(),e,this._exclusive_or_expression()));return e}_exclusive_or_expression(){let e=this._and_expression();for(;this._match(Jo.tokens.xor);)e=this._updateNode(new No(this._previous().toString(),e,this._and_expression()));return e}_and_expression(){let e=this._equality_expression();for(;this._match(Jo.tokens.and);)e=this._updateNode(new No(this._previous().toString(),e,this._equality_expression()));return e}_equality_expression(){const e=this._relational_expression();return this._match([Jo.tokens.equal_equal,Jo.tokens.not_equal])?this._updateNode(new No(this._previous().toString(),e,this._relational_expression())):e}_relational_expression(){let e=this._shift_expression();for(;this._match([Jo.tokens.less_than,Jo.tokens.greater_than,Jo.tokens.less_than_equal,Jo.tokens.greater_than_equal]);)e=this._updateNode(new No(this._previous().toString(),e,this._shift_expression()));return e}_shift_expression(){let e=this._additive_expression();for(;this._match([Jo.tokens.shift_left,Jo.tokens.shift_right]);)e=this._updateNode(new No(this._previous().toString(),e,this._additive_expression()));return e}_additive_expression(){let e=this._multiplicative_expression();for(;this._match([Jo.tokens.plus,Jo.tokens.minus]);)e=this._updateNode(new No(this._previous().toString(),e,this._multiplicative_expression()));return e}_multiplicative_expression(){let e=this._unary_expression();for(;this._match([Jo.tokens.star,Jo.tokens.forward_slash,Jo.tokens.modulo]);)e=this._updateNode(new No(this._previous().toString(),e,this._unary_expression()));return e}_unary_expression(){return this._match([Jo.tokens.minus,Jo.tokens.bang,Jo.tokens.tilde,Jo.tokens.star,Jo.tokens.and])?this._updateNode(new Lo(this._previous().toString(),this._unary_expression())):this._singular_expression()}_singular_expression(){const e=this._primary_expression(),t=this._postfix_expression();return t&&(e.postfix=t),e}_postfix_expression(){if(this._match(Jo.tokens.bracket_left)){const e=this._short_circuit_or_expression();this._consume(Jo.tokens.bracket_right,"Expected ']'.");const t=this._updateNode(new Io(e)),n=this._postfix_expression();return n&&(t.postfix=n),t}if(this._match(Jo.tokens.period)){const e=this._consume(Jo.tokens.name,"Expected member name."),t=this._postfix_expression(),n=this._updateNode(new Eo(e.lexeme));return t&&(n.postfix=t),n}return null}_getStruct(e){return this._context.aliases.has(e)?this._context.aliases.get(e).type:this._context.structs.has(e)?this._context.structs.get(e):null}_getType(e){const t=this._getStruct(e);if(null!==t)return t;switch(e){case"void":return go.void;case"bool":return go.bool;case"i32":return go.i32;case"u32":return go.u32;case"f32":return go.f32;case"f16":return go.f16;case"vec2f":return bo.vec2f;case"vec3f":return bo.vec3f;case"vec4f":return bo.vec4f;case"vec2i":return bo.vec2i;case"vec3i":return bo.vec3i;case"vec4i":return bo.vec4i;case"vec2u":return bo.vec2u;case"vec3u":return bo.vec3u;case"vec4u":return bo.vec4u;case"vec2h":return bo.vec2h;case"vec3h":return bo.vec3h;case"vec4h":return bo.vec4h;case"mat2x2f":return bo.mat2x2f;case"mat2x3f":return bo.mat2x3f;case"mat2x4f":return bo.mat2x4f;case"mat3x2f":return bo.mat3x2f;case"mat3x3f":return bo.mat3x3f;case"mat3x4f":return bo.mat3x4f;case"mat4x2f":return bo.mat4x2f;case"mat4x3f":return bo.mat4x3f;case"mat4x4f":return bo.mat4x4f;case"mat2x2h":return bo.mat2x2h;case"mat2x3h":return bo.mat2x3h;case"mat2x4h":return bo.mat2x4h;case"mat3x2h":return bo.mat3x2h;case"mat3x3h":return bo.mat3x3h;case"mat3x4h":return bo.mat3x4h;case"mat4x2h":return bo.mat4x2h;case"mat4x3h":return bo.mat4x3h;case"mat4x4h":return bo.mat4x4h;case"mat2x2i":return bo.mat2x2i;case"mat2x3i":return bo.mat2x3i;case"mat2x4i":return bo.mat2x4i;case"mat3x2i":return bo.mat3x2i;case"mat3x3i":return bo.mat3x3i;case"mat3x4i":return bo.mat3x4i;case"mat4x2i":return bo.mat4x2i;case"mat4x3i":return bo.mat4x3i;case"mat4x4i":return bo.mat4x4i;case"mat2x2u":return bo.mat2x2u;case"mat2x3u":return bo.mat2x3u;case"mat2x4u":return bo.mat2x4u;case"mat3x2u":return bo.mat3x2u;case"mat3x3u":return bo.mat3x3u;case"mat3x4u":return bo.mat3x4u;case"mat4x2u":return bo.mat4x2u;case"mat4x3u":return bo.mat4x3u;case"mat4x4u":return bo.mat4x4u}return null}_validateTypeRange(e,t){if("i32"===t.name){if(e<-2147483648||e>2147483647)throw this._error(this._previous(),`Value out of range for i32: ${e}. Line: ${this._currentLine}.`)}else if("u32"===t.name&&(e<0||e>4294967295))throw this._error(this._previous(),`Value out of range for u32: ${e}. Line: ${this._currentLine}.`)}_primary_expression(){if(this._match(Jo.tokens.ident)){const e=this._previous().toString();if(this._check(Jo.tokens.paren_left)){const t=this._argument_expression_list(),n=this._getType(e);return null!==n?this._updateNode(new To(n,t)):this._updateNode(new So(e,t))}if(this._context.constants.has(e)){const t=this._context.constants.get(e);return this._updateNode(new ko(e,t.value))}return this._updateNode(new Co(e))}if(this._match(Jo.tokens.int_literal)){const e=this._previous().toString();let t=e.endsWith("i")||e.endsWith("i")?go.i32:e.endsWith("u")||e.endsWith("U")?go.u32:go.x32;const n=parseInt(e);return this._validateTypeRange(n,t),this._updateNode(new Ro(new $o(n,this._exec.getTypeInfo(t)),t))}if(this._match(Jo.tokens.uint_literal)){const e=parseInt(this._previous().toString());return this._validateTypeRange(e,go.u32),this._updateNode(new Ro(new $o(e,this._exec.getTypeInfo(go.u32)),go.u32))}if(this._match([Jo.tokens.decimal_float_literal,Jo.tokens.hex_float_literal])){let e=this._previous().toString(),t=e.endsWith("h");t&&(e=e.substring(0,e.length-1));const n=parseFloat(e);this._validateTypeRange(n,t?go.f16:go.f32);const r=t?go.f16:go.f32;return this._updateNode(new Ro(new $o(n,this._exec.getTypeInfo(r)),r))}if(this._match([Jo.keywords.true,Jo.keywords.false])){let e=this._previous().toString()===Jo.keywords.true.rule;return this._updateNode(new Ro(new $o(e?1:0,this._exec.getTypeInfo(go.bool)),go.bool))}if(this._check(Jo.tokens.paren_left))return this._paren_expression();if(this._match(Jo.keywords.bitcast)){this._consume(Jo.tokens.less_than,"Expected '<'.");const e=this._type_decl();this._consume(Jo.tokens.greater_than,"Expected '>'.");const t=this._paren_expression();return this._updateNode(new Po(e,t))}const e=this._type_decl(),t=this._argument_expression_list();return this._updateNode(new To(e,t))}_argument_expression_list(){if(!this._match(Jo.tokens.paren_left))return null;const e=[];do{if(this._check(Jo.tokens.paren_right))break;const t=this._short_circuit_or_expression();e.push(t)}while(this._match(Jo.tokens.comma));return this._consume(Jo.tokens.paren_right,"Expected ')' for agument list"),e}_optional_paren_expression(){this._match(Jo.tokens.paren_left);const e=this._short_circuit_or_expression();return this._match(Jo.tokens.paren_right),e}_paren_expression(){this._consume(Jo.tokens.paren_left,"Expected '('.");const e=this._short_circuit_or_expression();return this._consume(Jo.tokens.paren_right,"Expected ')'."),e}_struct_decl(){if(!this._match(Jo.keywords.struct))return null;const e=this._currentLine,t=this._consume(Jo.tokens.ident,"Expected name for struct.").toString();this._consume(Jo.tokens.brace_left,"Expected '{' for struct body.");const n=[];for(;!this._check(Jo.tokens.brace_right);){const e=this._attribute(),t=this._consume(Jo.tokens.name,"Expected variable name.").toString();this._consume(Jo.tokens.colon,"Expected ':' for struct member type.");const r=this._attribute(),i=this._type_decl();null!=i&&(i.attributes=r),this._check(Jo.tokens.brace_right)?this._match(Jo.tokens.comma):this._consume(Jo.tokens.comma,"Expected ',' for struct member."),n.push(this._updateNode(new Go(t,i,e)))}this._consume(Jo.tokens.brace_right,"Expected '}' after struct body.");const r=this._currentLine,i=this._updateNode(new _o(t,n,e,r),e);return this._context.structs.set(t,i),i}_global_variable_decl(){const e=this._variable_decl();if(!e)return null;if(this._match(Jo.tokens.equal)){const t=this._const_expression();e.value=t}if(null!==e.type&&e.value instanceof Ro){if("x32"!==e.value.type.name&&e.type.getTypeName()!==e.value.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${e.value.type.name} to ${e.type.name}. Line:${this._currentLine}`);e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type),e.value.type=e.type}else null===e.type&&e.value instanceof Ro&&(e.type="x32"===e.value.type.name?go.i32:e.value.type,e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type));return e}_override_variable_decl(){const e=this._override_decl();return e&&this._match(Jo.tokens.equal)&&(e.value=this._const_expression()),e}_global_const_decl(){var e;if(!this._match(Jo.keywords.const))return null;const t=this._consume(Jo.tokens.name,"Expected variable name"),n=this._currentLine;let r=null;if(this._match(Jo.tokens.colon)){const e=this._attribute();r=this._type_decl(),null!=r&&(r.attributes=e)}let i=null;this._consume(Jo.tokens.equal,"const declarations require an assignment");const s=this._short_circuit_or_expression();try{let e=[go.f32],n=s.constEvaluate(this._exec,e);n instanceof $o&&this._validateTypeRange(n.value,e[0]),e[0]instanceof bo&&null===e[0].format&&n.typeInfo instanceof ps&&null!==n.typeInfo.format&&("f16"===n.typeInfo.format.name?e[0].format=go.f16:"f32"===n.typeInfo.format.name?e[0].format=go.f32:"i32"===n.typeInfo.format.name?e[0].format=go.i32:"u32"===n.typeInfo.format.name?e[0].format=go.u32:"bool"===n.typeInfo.format.name&&(e[0].format=go.bool)),i=this._updateNode(new Ro(n,e[0])),this._exec.context.setVariable(t.toString(),n)}catch(a){i=s}if(null!==r&&i instanceof Ro){if("x32"!==i.type.name&&r.getTypeName()!==i.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${i.type.name} to ${r.name}. Line:${this._currentLine}`);i.type=r,i.isScalar&&this._validateTypeRange(i.scalarValue,i.type)}else null===r&&i instanceof Ro&&(r=null!==(e=null==i?void 0:i.type)&&void 0!==e?e:go.f32,r===go.x32&&(r=go.i32));const o=this._updateNode(new qs(t.toString(),r,"","",i),n);return this._context.constants.set(o.name,o),o}_global_let_decl(){if(!this._match(Jo.keywords.let))return null;const e=this._currentLine,t=this._consume(Jo.tokens.name,"Expected variable name");let n=null;if(this._match(Jo.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}let r=null;if(this._match(Jo.tokens.equal)&&(r=this._const_expression()),null!==n&&r instanceof Ro){if("x32"!==r.type.name&&n.getTypeName()!==r.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${r.type.name} to ${n.name}. Line:${this._currentLine}`);r.type=n}else null===n&&r instanceof Ro&&(n="x32"===r.type.name?go.i32:r.type);return r instanceof Ro&&r.isScalar&&this._validateTypeRange(r.scalarValue,n),this._updateNode(new Ys(t.toString(),n,"","",r),e)}_const_expression(){return this._short_circuit_or_expression()}_variable_decl(){if(!this._match(Jo.keywords.var))return null;const e=this._currentLine;let t="",n="";this._match(Jo.tokens.less_than)&&(t=this._consume(Jo.storage_class,"Expected storage_class.").toString(),this._match(Jo.tokens.comma)&&(n=this._consume(Jo.access_mode,"Expected access_mode.").toString()),this._consume(Jo.tokens.greater_than,"Expected '>'."));const r=this._consume(Jo.tokens.name,"Expected variable name");let i=null;if(this._match(Jo.tokens.colon)){const e=this._attribute();i=this._type_decl(),null!=i&&(i.attributes=e)}return this._updateNode(new Xs(r.toString(),i,t,n,null),e)}_override_decl(){if(!this._match(Jo.keywords.override))return null;const e=this._consume(Jo.tokens.name,"Expected variable name");let t=null;if(this._match(Jo.tokens.colon)){const e=this._attribute();t=this._type_decl(),null!=t&&(t.attributes=e)}return this._updateNode(new Qs(e.toString(),t,null))}_diagnostic(){this._consume(Jo.tokens.paren_left,"Expected '('");const e=this._consume(Jo.tokens.ident,"Expected severity control name.");this._consume(Jo.tokens.comma,"Expected ','");let t=this._consume(Jo.tokens.ident,"Expected diagnostic rule name.").toString();return this._match(Jo.tokens.period)&&(t+=`.${this._consume(Jo.tokens.ident,"Expected diagnostic message.").toString()}`),this._consume(Jo.tokens.paren_right,"Expected ')'"),this._updateNode(new co(e.toString(),t))}_enable_directive(){const e=this._consume(Jo.tokens.ident,"identity expected.");return this._updateNode(new Ao(e.toString()))}_requires_directive(){const e=[this._consume(Jo.tokens.ident,"identity expected.").toString()];for(;this._match(Jo.tokens.comma);){const t=this._consume(Jo.tokens.ident,"identity expected.");e.push(t.toString())}return this._updateNode(new lo(e))}_type_alias(){const e=this._consume(Jo.tokens.ident,"identity expected.");this._consume(Jo.tokens.equal,"Expected '=' for type alias.");let t=this._type_decl();if(null===t)throw this._error(this._peek(),"Expected Type for Alias.");this._context.aliases.has(t.name)&&(t=this._context.aliases.get(t.name).type);const n=this._updateNode(new uo(e.toString(),t));return this._context.aliases.set(n.name,n),n}_type_decl(){if(this._check([Jo.tokens.ident,...Jo.texel_format,Jo.keywords.bool,Jo.keywords.f32,Jo.keywords.i32,Jo.keywords.u32])){const e=this._advance().toString();if(this._context.structs.has(e))return this._context.structs.get(e);if(this._context.aliases.has(e))return this._context.aliases.get(e).type;if(!this._getType(e)){const t=this._updateNode(new mo(e));return this._forwardTypeCount++,t}return this._updateNode(new go(e))}let e=this._texture_sampler_types();if(e)return e;if(this._check(Jo.template_types)){let e=this._advance().toString(),t=null,n=null;return this._match(Jo.tokens.less_than)&&(t=this._type_decl(),n=null,this._match(Jo.tokens.comma)&&(n=this._consume(Jo.access_mode,"Expected access_mode for pointer").toString()),this._consume(Jo.tokens.greater_than,"Expected '>' for type.")),this._updateNode(new bo(e,t,n))}if(this._match(Jo.keywords.ptr)){let e=this._previous().toString();this._consume(Jo.tokens.less_than,"Expected '<' for pointer.");const t=this._consume(Jo.storage_class,"Expected storage_class for pointer");this._consume(Jo.tokens.comma,"Expected ',' for pointer.");const n=this._type_decl();let r=null;return this._match(Jo.tokens.comma)&&(r=this._consume(Jo.access_mode,"Expected access_mode for pointer").toString()),this._consume(Jo.tokens.greater_than,"Expected '>' for pointer."),this._updateNode(new vo(e,t.toString(),n,r))}const t=this._attribute();if(this._match(Jo.keywords.array)){let e=null,r=-1;const i=this._previous();let s=null;if(this._match(Jo.tokens.less_than)){e=this._type_decl(),this._context.aliases.has(e.name)&&(e=this._context.aliases.get(e.name).type);let t="";if(this._match(Jo.tokens.comma)){s=this._shift_expression();try{t=s.constEvaluate(this._exec).toString(),s=null}catch(n){t="1"}}this._consume(Jo.tokens.greater_than,"Expected '>' for array."),r=t?parseInt(t):0}const o=this._updateNode(new yo(i.toString(),t,e,r));return s&&this._deferArrayCountEval.push({arrayType:o,countNode:s}),o}return null}_texture_sampler_types(){if(this._match(Jo.sampler_type))return this._updateNode(new wo(this._previous().toString(),null,null));if(this._match(Jo.depth_texture_type))return this._updateNode(new wo(this._previous().toString(),null,null));if(this._match(Jo.sampled_texture_type)||this._match(Jo.multisampled_texture_type)){const e=this._previous();this._consume(Jo.tokens.less_than,"Expected '<' for sampler type.");const t=this._type_decl();return this._consume(Jo.tokens.greater_than,"Expected '>' for sampler type."),this._updateNode(new wo(e.toString(),t,null))}if(this._match(Jo.storage_texture_type)){const e=this._previous();this._consume(Jo.tokens.less_than,"Expected '<' for sampler type.");const t=this._consume(Jo.texel_format,"Invalid texel format.").toString();this._consume(Jo.tokens.comma,"Expected ',' after texel format.");const n=this._consume(Jo.access_mode,"Expected access mode for storage texture type.").toString();return this._consume(Jo.tokens.greater_than,"Expected '>' for sampler type."),this._updateNode(new wo(e.toString(),t,n))}return null}_attribute(){let e=[];for(;this._match(Jo.tokens.attr);){const t=this._consume(Jo.attribute_name,"Expected attribute name"),n=this._updateNode(new zo(t.toString(),null));if(this._match(Jo.tokens.paren_left)){if(n.value=this._consume(Jo.literal_or_ident,"Expected attribute value").toString(),this._check(Jo.tokens.comma)){this._advance();do{const e=this._consume(Jo.literal_or_ident,"Expected attribute value").toString();n.value instanceof Array||(n.value=[n.value]),n.value.push(e)}while(this._match(Jo.tokens.comma))}this._consume(Jo.tokens.paren_right,"Expected ')'")}e.push(n)}return 0==e.length?null:e}}class Ca extends pa{constructor(e){super(),e&&this.update(e)}update(e){const t=(new Sa).parse(e);this.updateAST(t)}}function ka(e){return(null==e?void 0:e.format)?`${e.name}<${e.format.name}>`:e.name}globalThis.mathgl=globalThis.mathgl||{config:{EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1}};const Ra=globalThis.mathgl.config;function Pa(e,{precision:t=Ra.precision}={}){return e=function(e){return Math.round(e/Ra.EPSILON)*Ra.EPSILON}(e),`${parseFloat(e.toPrecision(t))}`}function Ia(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ma(e,t,n){return function(e,t,n){if(Ia(e)){const r=e;n=n||function(e){return e.clone?e.clone():new Array(e.length)}(r);for(let i=0;iMath.max(t,Math.min(n,e)))}function La(e,t,n){return Ia(e)?e.map((e,r)=>La(e,t[r],n)):n*t+(1-n)*e}function Na(e,t,n){const r=Ra.EPSILON;try{if(e===t)return!0;if(Ia(e)&&Ia(t)){if(e.length!==t.length)return!1;for(let n=0;n0?", ":"")+Pa(this[n],e);return`${e.printTypes?this.constructor.name:""}[${t}]`}equals(e){if(!e||this.length!==e.length)return!1;for(let t=0;t=0&&e=0&&e2*Math.PI)throw Error("expected radians")}function mA(e,t=[],n=0){const r=Math.fround(e),i=e-r;return t[n]=r,t[n+1]=i,t}const _A={name:"fp64arithmetic",vs:"\nuniform fp64arithmeticUniforms {\n uniform float ONE;\n} fp64;\n\n/*\nAbout LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n\nThe purpose of this workaround is to prevent shader compilers from\noptimizing away necessary arithmetic operations by swapping their sequences\nor transform the equation to some 'equivalent' form.\n\nThe method is to multiply an artifical variable, ONE, which will be known to\nthe compiler to be 1 only at runtime. The whole expression is then represented\nas a polynomial with respective to ONE. In the coefficients of all terms, only one a\nand one b should appear\n\nerr = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE\n*/\n\n// Divide float number to high and low floats to extend fraction bits\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * fp64.ONE - (t - a);\n float a_lo = a * fp64.ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\n\n// Divide float number again when high float uses too many fraction bits\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\n\n// Special sum operation when a > b\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * fp64.ONE;\n float err = b - (sum - a) * fp64.ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\n\n// General sum operation\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * fp64.ONE + 2.0 * a_fp64.x *\n a_fp64.y * fp64.ONE * fp64.ONE) + a_fp64.y * a_fp64.y * fp64.ONE * fp64.ONE * fp64.ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n // y component is for the error\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * fp64.ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n",defaultUniforms:{ONE:1},uniformTypes:{ONE:"f32"},fp64ify:mA,fp64LowPart:function(e){return e-Math.fround(e)},fp64ifyMatrix4:function(e){const t=new Float32Array(32);for(let n=0;n<4;++n)for(let r=0;r<4;++r){const i=4*n+r;mA(e[4*r+n],t,2*i)}return t}},bA={props:{},uniforms:{},name:"picking",uniformTypes:{isActive:"f32",isAttribute:"f32",isHighlightActive:"f32",useFloatColors:"f32",highlightedObjectColor:"vec3",highlightColor:"vec4"},defaultUniforms:{isActive:!1,isAttribute:!1,isHighlightActive:!1,useFloatColors:!0,highlightedObjectColor:[0,0,0],highlightColor:[0,1,1,1]},vs:"uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nout vec4 picking_vRGBcolor_Avalid;\n\n// Normalize unsigned byte color to 0-1 range\nvec3 picking_normalizeColor(vec3 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\n// Normalize unsigned byte color to 0-1 range\nvec4 picking_normalizeColor(vec4 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\nbool picking_isColorZero(vec3 color) {\n return dot(color, vec3(1.0)) < 0.00001;\n}\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.00001;\n}\n\n// Check if this vertex is highlighted \nbool isVertexHighlighted(vec3 vertexColor) {\n vec3 highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor);\n return\n bool(picking.isHighlightActive) && picking_isColorZero(abs(vertexColor - highlightedObjectColor));\n}\n\n// Set the current picking color\nvoid picking_setPickingColor(vec3 pickingColor) {\n pickingColor = picking_normalizeColor(pickingColor);\n\n if (bool(picking.isActive)) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!bool(picking.isAttribute)) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexHighlighted(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec2 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec3 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n",fs:"uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n // If we are still picking, we don't highlight\n if (picking.isActive > 0.5) {\n return color;\n }\n\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n // Blend in highlight color based on its alpha value\n float highLightAlpha = picking.highlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (bool(picking.isActive)) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highlightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highlightColor);\n}\n",getUniforms:function(e={},t){const n={};if(void 0===e.highlightedObjectColor);else if(null===e.highlightedObjectColor)n.isHighlightActive=!1;else{n.isHighlightActive=!0;const t=e.highlightedObjectColor.slice(0,3);n.highlightedObjectColor=t}if(e.highlightColor){const t=Array.from(e.highlightColor,e=>e/255);Number.isFinite(t[3])||(t[3]=1),n.highlightColor=t}return void 0!==e.isActive&&(n.isActive=Boolean(e.isActive),n.isAttribute=Boolean(e.isAttribute)),void 0!==e.useFloatColors&&(n.useFloatColors=Boolean(e.useFloatColors)),n}},vA="precision highp int;\n\n// #if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))\nstruct AmbientLight {\n vec3 color;\n};\n\nstruct PointLight {\n vec3 color;\n vec3 position;\n vec3 attenuation; // 2nd order x:Constant-y:Linear-z:Exponential\n};\n\nstruct DirectionalLight {\n vec3 color;\n vec3 direction;\n};\n\nuniform lightingUniforms {\n int enabled;\n int lightType;\n\n int directionalLightCount;\n int pointLightCount;\n\n vec3 ambientColor;\n\n vec3 lightColor0;\n vec3 lightPosition0;\n vec3 lightDirection0;\n vec3 lightAttenuation0;\n\n vec3 lightColor1;\n vec3 lightPosition1;\n vec3 lightDirection1;\n vec3 lightAttenuation1;\n\n vec3 lightColor2;\n vec3 lightPosition2;\n vec3 lightDirection2;\n vec3 lightAttenuation2;\n} lighting;\n\nPointLight lighting_getPointLight(int index) {\n switch (index) {\n case 0:\n return PointLight(lighting.lightColor0, lighting.lightPosition0, lighting.lightAttenuation0);\n case 1:\n return PointLight(lighting.lightColor1, lighting.lightPosition1, lighting.lightAttenuation1);\n case 2:\n default: \n return PointLight(lighting.lightColor2, lighting.lightPosition2, lighting.lightAttenuation2);\n }\n}\n\nDirectionalLight lighting_getDirectionalLight(int index) {\n switch (index) {\n case 0:\n return DirectionalLight(lighting.lightColor0, lighting.lightDirection0);\n case 1:\n return DirectionalLight(lighting.lightColor1, lighting.lightDirection1);\n case 2:\n default: \n return DirectionalLight(lighting.lightColor2, lighting.lightDirection2);\n }\n} \n\nfloat getPointLightAttenuation(PointLight pointLight, float distance) {\n return pointLight.attenuation.x\n + pointLight.attenuation.y * distance\n + pointLight.attenuation.z * distance * distance;\n}\n\n// #endif\n";var yA,wA;(wA=yA||(yA={}))[wA.POINT=0]="POINT",wA[wA.DIRECTIONAL=1]="DIRECTIONAL";const xA={props:{},uniforms:{},name:"lighting",defines:{},uniformTypes:{enabled:"i32",lightType:"i32",directionalLightCount:"i32",pointLightCount:"i32",ambientColor:"vec3",lightColor0:"vec3",lightPosition0:"vec3",lightDirection0:"vec3",lightAttenuation0:"vec3",lightColor1:"vec3",lightPosition1:"vec3",lightDirection1:"vec3",lightAttenuation1:"vec3",lightColor2:"vec3",lightPosition2:"vec3",lightDirection2:"vec3",lightAttenuation2:"vec3"},defaultUniforms:{enabled:1,lightType:yA.POINT,directionalLightCount:0,pointLightCount:0,ambientColor:[.1,.1,.1],lightColor0:[1,1,1],lightPosition0:[1,1,2],lightDirection0:[1,1,1],lightAttenuation0:[1,0,0],lightColor1:[1,1,1],lightPosition1:[1,1,2],lightDirection1:[1,1,1],lightAttenuation1:[1,0,0],lightColor2:[1,1,1],lightPosition2:[1,1,2],lightDirection2:[1,1,1],lightAttenuation2:[1,0,0]},source:"// #if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))\nstruct AmbientLight {\n color: vec3,\n};\n\nstruct PointLight {\n color: vec3,\n position: vec3,\n attenuation: vec3, // 2nd order x:Constant-y:Linear-z:Exponential\n};\n\nstruct DirectionalLight {\n color: vec3,\n direction: vec3,\n};\n\nstruct lightingUniforms {\n enabled: i32,\n pointLightCount: i32,\n directionalLightCount: i32,\n\n ambientColor: vec3,\n\n // TODO - support multiple lights by uncommenting arrays below\n lightType: i32,\n lightColor: vec3,\n lightDirection: vec3,\n lightPosition: vec3,\n lightAttenuation: vec3,\n\n // AmbientLight ambientLight;\n // PointLight pointLight[MAX_LIGHTS];\n // DirectionalLight directionalLight[MAX_LIGHTS];\n};\n\n// Binding 0:1 is reserved for lighting (Note: could go into separate bind group as it is stable across draw calls)\n@binding(1) @group(0) var lighting : lightingUniforms;\n\nfn lighting_getPointLight(index: i32) -> PointLight {\n return PointLight(lighting.lightColor, lighting.lightPosition, lighting.lightAttenuation);\n}\n\nfn lighting_getDirectionalLight(index: i32) -> DirectionalLight {\n return DirectionalLight(lighting.lightColor, lighting.lightDirection);\n} \n\nfn getPointLightAttenuation(pointLight: PointLight, distance: f32) -> f32 {\n return pointLight.attenuation.x\n + pointLight.attenuation.y * distance\n + pointLight.attenuation.z * distance * distance;\n}\n",vs:vA,fs:vA,getUniforms:function(e,t={}){if(!(e=e?{...e}:e))return{...xA.defaultUniforms};e.lights&&(e={...e,...TA(e.lights),lights:void 0});const{ambientLight:n,pointLights:r,directionalLights:i}=e||{};if(!(n||r&&r.length>0||i&&i.length>0))return{...xA.defaultUniforms,enabled:0};const s={...xA.defaultUniforms,...t,...EA({ambientLight:n,pointLights:r,directionalLights:i})};return void 0!==e.enabled&&(s.enabled=e.enabled?1:0),s}};function EA({ambientLight:e,pointLights:t=[],directionalLights:n=[]}){const r={};r.ambientColor=SA(e);let i=0;for(const s of t){r.lightType=yA.POINT;const e=i;r[`lightColor${e}`]=SA(s),r[`lightPosition${e}`]=s.position,r[`lightAttenuation${e}`]=s.attenuation||[1,0,0],i++}for(const s of n){r.lightType=yA.DIRECTIONAL;const e=i;r[`lightColor${e}`]=SA(s),r[`lightDirection${e}`]=s.direction,i++}return i>5&&Pr.warn("MAX_LIGHTS exceeded")(),r.directionalLightCount=n.length,r.pointLightCount=t.length,r}function TA(e){var t,n;const r={pointLights:[],directionalLights:[]};for(const i of e||[])switch(i.type){case"ambient":r.ambientLight=i;break;case"directional":null==(t=r.directionalLights)||t.push(i);break;case"point":null==(n=r.pointLights)||n.push(i)}return r}function SA(e={}){const{color:t=[0,0,0],intensity:n=1}=e;return t.map(e=>e*n/255)}const CA="uniform phongMaterialUniforms {\n uniform float ambient;\n uniform float diffuse;\n uniform float shininess;\n uniform vec3 specularColor;\n} material;\n",kA="#define MAX_LIGHTS 3\n\nuniform phongMaterialUniforms {\n uniform float ambient;\n uniform float diffuse;\n uniform float shininess;\n uniform vec3 specularColor;\n} material;\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 view_direction, vec3 normal_worldspace, vec3 color) {\n vec3 halfway_direction = normalize(light_direction + view_direction);\n float lambertian = dot(light_direction, normal_worldspace);\n float specular = 0.0;\n if (lambertian > 0.0) {\n float specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\n specular = pow(specular_angle, material.shininess);\n }\n lambertian = max(lambertian, 0.0);\n return (lambertian * material.diffuse * surfaceColor + specular * material.specularColor) * color;\n}\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = surfaceColor;\n\n if (lighting.enabled == 0) {\n return lightColor;\n }\n\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n lightColor = material.ambient * surfaceColor * lighting.ambientColor;\n\n for (int i = 0; i < lighting.pointLightCount; i++) {\n PointLight pointLight = lighting_getPointLight(i);\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n float light_attenuation = getPointLightAttenuation(pointLight, distance(light_position_worldspace, position_worldspace));\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color / light_attenuation);\n }\n\n int totalLights = min(MAX_LIGHTS, lighting.pointLightCount + lighting.directionalLightCount);\n for (int i = lighting.pointLightCount; i < totalLights; i++) {\n DirectionalLight directionalLight = lighting_getDirectionalLight(i);\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n \n return lightColor;\n}\n",RA="struct phongMaterialUniforms {\n ambient: f32,\n diffuse: f32,\n shininess: f32,\n specularColor: vec3,\n};\n\n@binding(2) @group(0) var phongMaterial : phongMaterialUniforms;\n\nfn lighting_getLightColor(surfaceColor: vec3, light_direction: vec3, view_direction: vec3, normal_worldspace: vec3, color: vec3) -> vec3 {\n let halfway_direction: vec3 = normalize(light_direction + view_direction);\n var lambertian: f32 = dot(light_direction, normal_worldspace);\n var specular: f32 = 0.0;\n if (lambertian > 0.0) {\n let specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\n specular = pow(specular_angle, phongMaterial.shininess);\n }\n lambertian = max(lambertian, 0.0);\n return (lambertian * phongMaterial.diffuse * surfaceColor + specular * phongMaterial.specularColor) * color;\n}\n\nfn lighting_getLightColor2(surfaceColor: vec3, cameraPosition: vec3, position_worldspace: vec3, normal_worldspace: vec3) -> vec3 {\n var lightColor: vec3 = surfaceColor;\n\n if (lighting.enabled == 0) {\n return lightColor;\n }\n\n let view_direction: vec3 = normalize(cameraPosition - position_worldspace);\n lightColor = phongMaterial.ambient * surfaceColor * lighting.ambientColor;\n\n if (lighting.lightType == 0) {\n let pointLight: PointLight = lighting_getPointLight(0);\n let light_position_worldspace: vec3 = pointLight.position;\n let light_direction: vec3 = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n } else if (lighting.lightType == 1) {\n var directionalLight: DirectionalLight = lighting_getDirectionalLight(0);\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n \n return lightColor;\n /*\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting.pointLightCount) {\n break;\n }\n PointLight pointLight = lighting.pointLight[i];\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n }\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting.directionalLightCount) {\n break;\n }\n DirectionalLight directionalLight = lighting.directionalLight[i];\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n */\n}\n\nfn lighting_getSpecularLightColor(cameraPosition: vec3, position_worldspace: vec3, normal_worldspace: vec3) -> vec3{\n var lightColor = vec3(0, 0, 0);\n let surfaceColor = vec3(0, 0, 0);\n\n if (lighting.enabled == 0) {\n let view_direction = normalize(cameraPosition - position_worldspace);\n\n switch (lighting.lightType) {\n case 0, default: {\n let pointLight: PointLight = lighting_getPointLight(0);\n let light_position_worldspace: vec3 = pointLight.position;\n let light_direction: vec3 = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n }\n case 1: {\n let directionalLight: DirectionalLight = lighting_getDirectionalLight(0);\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n }\n }\n return lightColor;\n}\n",PA={props:{},name:"gouraudMaterial",vs:kA.replace("phongMaterial","gouraudMaterial"),fs:CA.replace("phongMaterial","gouraudMaterial"),source:RA.replaceAll("phongMaterial","gouraudMaterial"),defines:{LIGHTING_VERTEX:!0},dependencies:[xA],uniformTypes:{ambient:"f32",diffuse:"f32",shininess:"f32",specularColor:"vec3"},defaultUniforms:{ambient:.35,diffuse:.6,shininess:32,specularColor:[.15,.15,.15]},getUniforms(e){const t={...e};return t.specularColor&&(t.specularColor=t.specularColor.map(e=>e/255)),{...PA.defaultUniforms,...t}}},IA={name:"phongMaterial",dependencies:[xA],source:RA,vs:CA,fs:kA,defines:{LIGHTING_FRAGMENT:!0},uniformTypes:{ambient:"f32",diffuse:"f32",shininess:"f32",specularColor:"vec3"},defaultUniforms:{ambient:.35,diffuse:.6,shininess:32,specularColor:[.15,.15,.15]},getUniforms(e){const t={...e};return t.specularColor&&(t.specularColor=t.specularColor.map(e=>e/255)),{...IA.defaultUniforms,...t}}},MA="uniform layerUniforms {\n uniform float opacity;\n} layer;\n",LA={name:"layer",vs:MA,fs:MA,getUniforms:e=>({opacity:Math.pow(e.opacity,1/2.2)}),uniformTypes:{opacity:"f32"}},NA="#define SMOOTH_EDGE_RADIUS 0.5",BA={name:"geometry",source:"const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4,\n worldPosition: vec3,\n worldPositionAlt: vec3,\n normal: vec3,\n uv: vec2,\n pickingColor: vec3,\n};\n\nvar geometry_: VertexGeometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0, 0.0, 0.0),\n vec3(0.0, 0.0, 0.0),\n vec3(0.0, 0.0, 0.0),\n vec2(0.0, 0.0),\n vec3(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2,\n};\n\nvar fragmentGeometry: FragmentGeometry;\n\nfn smoothedge(edge: f32, x: f32) -> f32 {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n",vs:`${NA}\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n`,fs:`${NA}\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`};var DA,OA,FA,UA,jA,GA;(OA=DA||(DA={}))[OA.Start=1]="Start",OA[OA.Move=2]="Move",OA[OA.End=4]="End",OA[OA.Cancel=8]="Cancel",(UA=FA||(FA={}))[UA.None=0]="None",UA[UA.Left=1]="Left",UA[UA.Right=2]="Right",UA[UA.Up=4]="Up",UA[UA.Down=8]="Down",UA[UA.Horizontal=3]="Horizontal",UA[UA.Vertical=12]="Vertical",UA[UA.All=15]="All",(GA=jA||(jA={}))[GA.Possible=1]="Possible",GA[GA.Began=2]="Began",GA[GA.Changed=4]="Changed",GA[GA.Ended=8]="Ended",GA[GA.Recognized=8]="Recognized",GA[GA.Cancelled=16]="Cancelled",GA[GA.Failed=32]="Failed";const zA="manipulation",VA="none",WA="pan-x",HA="pan-y";class $A{constructor(e,t){this.actions="",this.manager=e,this.set(t)}set(e){"compute"===e&&(e=this.compute()),this.manager.element&&(this.manager.element.style.touchAction=e,this.actions=e)}update(){this.set(this.manager.options.touchAction)}compute(){let e=[];for(const t of this.manager.recognizers)t.options.enable&&(e=e.concat(t.getTouchAction()));return function(e){if(e.includes(VA))return VA;const t=e.includes(WA),n=e.includes(HA);return t&&n?VA:t||n?t?WA:HA:e.includes(zA)?zA:"auto"}(e.join(" "))}}function XA(e){return e.trim().split(/\s+/g)}function QA(e,t,n){if(e)for(const r of XA(t))e.addEventListener(r,n,!1)}function YA(e,t,n){if(e)for(const r of XA(t))e.removeEventListener(r,n,!1)}function qA(e){return(e.ownerDocument||e).defaultView}function KA(e){const t=e.length;if(1===t)return{x:Math.round(e[0].clientX),y:Math.round(e[0].clientY)};let n=0,r=0,i=0;for(;i=Math.abs(t)?e<0?FA.Left:FA.Right:t<0?FA.Up:FA.Down}function rl(e,t,n){return{x:t/e||0,y:n/e||0}}let il=class{constructor(e){this.evEl="",this.evWin="",this.evTarget="",this.domHandler=e=>{this.manager.options.enable&&this.handler(e)},this.manager=e,this.element=e.element,this.target=e.options.inputTarget||e.element}callback(e,t){!function(e,t,n){const r=n.pointers.length,i=n.changedPointers.length,s=t&DA.Start&&r-i===0,o=t&(DA.End|DA.Cancel)&&r-i===0;n.isFirst=Boolean(s),n.isFinal=Boolean(o),s&&(e.session={}),n.eventType=t;const a=function(e,t){const{session:n}=e,{pointers:r}=t,{length:i}=r;n.firstInput||(n.firstInput=ZA(t)),i>1&&!n.firstMultiple?n.firstMultiple=ZA(t):1===i&&(n.firstMultiple=!1);const{firstInput:s,firstMultiple:o}=n,a=o?o.center:s.center,A=t.center=KA(r);t.timeStamp=Date.now(),t.deltaTime=t.timeStamp-s.timeStamp,t.angle=function(e,t){const n=t.x-e.x,r=t.y-e.y;return 180*Math.atan2(r,n)/Math.PI}(a,A),t.distance=JA(a,A);const{deltaX:l,deltaY:c}=function(e,t){const n=t.center;let r=e.offsetDelta,i=e.prevDelta;const s=e.prevInput;return t.eventType!==DA.Start&&(null==s?void 0:s.eventType)!==DA.End||(i=e.prevDelta={x:(null==s?void 0:s.deltaX)||0,y:(null==s?void 0:s.deltaY)||0},r=e.offsetDelta={x:n.x,y:n.y}),{deltaX:i.x+(n.x-r.x),deltaY:i.y+(n.y-r.y)}}(n,t);t.deltaX=l,t.deltaY=c,t.offsetDirection=nl(t.deltaX,t.deltaY);const u=rl(t.deltaTime,t.deltaX,t.deltaY);var h,d;t.overallVelocityX=u.x,t.overallVelocityY=u.y,t.overallVelocity=Math.abs(u.x)>Math.abs(u.y)?u.x:u.y,t.scale=o?(h=o.pointers,el((d=r)[0],d[1])/el(h[0],h[1])):1,t.rotation=o?function(e,t){return tl(t[1],t[0])-tl(e[1],e[0])}(o.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length;let f=e.element;return function(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentNode}return!1}(t.srcEvent.target,f)&&(f=t.srcEvent.target),t.target=f,function(e,t){const n=e.lastInterval||t,r=t.timeStamp-n.timeStamp;let i,s,o,a;if(t.eventType!==DA.Cancel&&(r>25||void 0===n.velocity)){const A=t.deltaX-n.deltaX,l=t.deltaY-n.deltaY,c=rl(r,A,l);s=c.x,o=c.y,i=Math.abs(c.x)>Math.abs(c.y)?c.x:c.y,a=nl(A,l),e.lastInterval=t}else i=n.velocity,s=n.velocityX,o=n.velocityY,a=n.direction;t.velocity=i,t.velocityX=s,t.velocityY=o,t.direction=a}(n,t),t}(e,n);e.emit("hammer.input",a),e.recognize(a),e.session.prevInput=a}(this.manager,e,t)}init(){QA(this.element,this.evEl,this.domHandler),QA(this.target,this.evTarget,this.domHandler),QA(qA(this.element),this.evWin,this.domHandler)}destroy(){YA(this.element,this.evEl,this.domHandler),YA(this.target,this.evTarget,this.domHandler),YA(qA(this.element),this.evWin,this.domHandler)}};const sl={pointerdown:DA.Start,pointermove:DA.Move,pointerup:DA.End,pointercancel:DA.Cancel,pointerout:DA.Cancel};class ol extends il{constructor(e){super(e),this.evEl="pointerdown",this.evWin="pointermove pointerup pointercancel",this.store=this.manager.session.pointerEvents=[],this.init()}handler(e){const{store:t}=this;let n=!1;const r=sl[e.type],i=e.pointerType,s="touch"===i;let o=t.findIndex(t=>t.pointerId===e.pointerId);r&DA.Start&&(e.buttons||s)?o<0&&(t.push(e),o=t.length-1):r&(DA.End|DA.Cancel)&&(n=!0),o<0||(t[o]=e,this.callback(r,{pointers:t,changedPointers:[e],eventType:r,pointerType:i,srcEvent:e}),n&&t.splice(o,1))}}const al=["","webkit","Moz","MS","ms","o"];function Al(e,t){const n=t[0].toUpperCase()+t.slice(1);for(const r of al){const i=r?r+n:t;if(i in e)return i}}const ll={touchAction:"compute",enable:!0,inputTarget:null,cssProps:{userSelect:"none",userDrag:"none",touchCallout:"none",tapHighlightColor:"rgba(0,0,0,0)"}};class cl{constructor(e,t){this.options={...ll,...t,cssProps:{...ll.cssProps,...t.cssProps},inputTarget:t.inputTarget||e},this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=new ol(this),this.touchAction=new $A(this,this.options.touchAction),this.toggleCssProps(!0)}set(e){return Object.assign(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this}stop(e){this.session.stopped=e?2:1}recognize(e){const{session:t}=this;if(t.stopped)return;let n;this.session.prevented&&e.srcEvent.preventDefault();const{recognizers:r}=this;let{curRecognizer:i}=t;(!i||i&&i.state&jA.Recognized)&&(i=t.curRecognizer=null);let s=0;for(;s-1&&this.requireFail.splice(e,1)}return this}hasRequireFailures(){return Boolean(this.requireFail.find(e=>e.options.enable))}canRecognizeWith(e){return Boolean(this.simultaneous[e.id])}emit(e){if(!e)return;const{state:t}=this;t=jA.Ended&&this.manager.emit(this.options.event+hl(t),e)}tryEmit(e){this.canEmit()?this.emit(e):this.state=jA.Failed}canEmit(){let e=0;for(;e{this.state=jA.Recognized,this.tryEmit(this._input)},t.interval),jA.Began):jA.Recognized}return jA.Failed}failTimeout(){return this._timer=setTimeout(()=>{this.state=jA.Failed},this.options.interval),jA.Failed}reset(){clearTimeout(this._timer)}emit(e){this.state===jA.Recognized&&(e.tapCount=this.count,this.manager.emit(this.options.event,e))}}const gl=["","start","move","end","cancel","up","down","left","right"];class ml extends fl{constructor(e={}){super({enable:!0,pointers:1,event:"pan",threshold:10,direction:FA.All,...e}),this.pX=null,this.pY=null}getTouchAction(){const{options:{direction:e}}=this,t=[];return e&FA.Horizontal&&t.push(HA),e&FA.Vertical&&t.push(WA),t}getEventNames(){return gl.map(e=>this.options.event+e)}directionTest(e){const{options:t}=this;let n=!0,{distance:r}=e,{direction:i}=e;const s=e.deltaX,o=e.deltaY;return i&t.direction||(t.direction&FA.Horizontal?(i=0===s?FA.None:s<0?FA.Left:FA.Right,n=s!==this.pX,r=Math.abs(e.deltaX)):(i=0===o?FA.None:o<0?FA.Up:FA.Down,n=o!==this.pY,r=Math.abs(e.deltaY))),e.direction=i,n&&r>t.threshold&&Boolean(i&t.direction)}attrTest(e){return super.attrTest(e)&&(Boolean(this.state&jA.Began)||!(this.state&jA.Began)&&this.directionTest(e))}emit(e){this.pX=e.deltaX,this.pY=e.deltaY;const t=FA[e.direction].toLowerCase();t&&(e.additionalEvent=this.options.event+t),super.emit(e)}}const _l=["","start","move","end","cancel","in","out"];class bl{constructor(e,t,n){this.element=e,this.callback=t,this.options=n}}const vl=-1!==("undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"").indexOf("firefox"),yl=4.000244140625;class wl extends bl{constructor(e,t,n){super(e,t,{enable:!0,...n}),this.handleEvent=e=>{if(!this.options.enable)return;let t=e.deltaY;globalThis.WheelEvent&&(vl&&e.deltaMode===globalThis.WheelEvent.DOM_DELTA_PIXEL&&(t/=globalThis.devicePixelRatio),e.deltaMode===globalThis.WheelEvent.DOM_DELTA_LINE&&(t*=40)),0!==t&&t%yl===0&&(t=Math.floor(t/yl)),e.shiftKey&&t&&(t*=.25),this.callback({type:"wheel",center:{x:e.clientX,y:e.clientY},delta:-t,srcEvent:e,pointerType:"mouse",target:e.target})},e.addEventListener("wheel",this.handleEvent,{passive:!1})}destroy(){this.element.removeEventListener("wheel",this.handleEvent)}enableEventType(e,t){"wheel"===e&&(this.options.enable=t)}}const xl=["mousedown","mousemove","mouseup","mouseover","mouseout","mouseleave"];class El extends bl{constructor(e,t,n){super(e,t,{enable:!0,...n}),this.handleEvent=e=>{this.handleOverEvent(e),this.handleOutEvent(e),this.handleEnterEvent(e),this.handleLeaveEvent(e),this.handleMoveEvent(e)},this.pressed=!1;const{enable:r}=this.options;this.enableMoveEvent=r,this.enableLeaveEvent=r,this.enableEnterEvent=r,this.enableOutEvent=r,this.enableOverEvent=r,xl.forEach(t=>e.addEventListener(t,this.handleEvent))}destroy(){xl.forEach(e=>this.element.removeEventListener(e,this.handleEvent))}enableEventType(e,t){switch(e){case"pointermove":this.enableMoveEvent=t;break;case"pointerover":this.enableOverEvent=t;break;case"pointerout":this.enableOutEvent=t;break;case"pointerenter":this.enableEnterEvent=t;break;case"pointerleave":this.enableLeaveEvent=t}}handleOverEvent(e){this.enableOverEvent&&"mouseover"===e.type&&this._emit("pointerover",e)}handleOutEvent(e){this.enableOutEvent&&"mouseout"===e.type&&this._emit("pointerout",e)}handleEnterEvent(e){this.enableEnterEvent&&"mouseenter"===e.type&&this._emit("pointerenter",e)}handleLeaveEvent(e){this.enableLeaveEvent&&"mouseleave"===e.type&&this._emit("pointerleave",e)}handleMoveEvent(e){if(this.enableMoveEvent)switch(e.type){case"mousedown":e.button>=0&&(this.pressed=!0);break;case"mousemove":0===e.buttons&&(this.pressed=!1),this.pressed||this._emit("pointermove",e);break;case"mouseup":this.pressed=!1}}_emit(e,t){this.callback({type:e,center:{x:t.clientX,y:t.clientY},srcEvent:t,pointerType:"mouse",target:t.target})}}const Tl=["keydown","keyup"];class Sl extends bl{constructor(e,t,n){super(e,t,{enable:!0,tabIndex:0,...n}),this.handleEvent=e=>{const t=e.target||e.srcElement;"INPUT"===t.tagName&&"text"===t.type||"TEXTAREA"===t.tagName||(this.enableDownEvent&&"keydown"===e.type&&this.callback({type:"keydown",srcEvent:e,key:e.key,target:e.target}),this.enableUpEvent&&"keyup"===e.type&&this.callback({type:"keyup",srcEvent:e,key:e.key,target:e.target}))},this.enableDownEvent=this.options.enable,this.enableUpEvent=this.options.enable,e.tabIndex=this.options.tabIndex,e.style.outline="none",Tl.forEach(t=>e.addEventListener(t,this.handleEvent))}destroy(){Tl.forEach(e=>this.element.removeEventListener(e,this.handleEvent))}enableEventType(e,t){"keydown"===e&&(this.enableDownEvent=t),"keyup"===e&&(this.enableUpEvent=t)}}class Cl extends bl{constructor(e,t,n){super(e,t,n),this.handleEvent=e=>{this.options.enable&&this.callback({type:"contextmenu",center:{x:e.clientX,y:e.clientY},srcEvent:e,pointerType:"mouse",target:e.target})},e.addEventListener("contextmenu",this.handleEvent)}destroy(){this.element.removeEventListener("contextmenu",this.handleEvent)}enableEventType(e,t){"contextmenu"===e&&(this.options.enable=t)}}const kl={pointerdown:1,pointermove:2,pointerup:4,mousedown:1,mousemove:2,mouseup:4};function Rl(e){const t=kl[e.srcEvent.type];if(!t)return null;const{buttons:n,button:r}=e.srcEvent;let i=!1,s=!1,o=!1;return 2===t?(i=Boolean(1&n),s=Boolean(4&n),o=Boolean(2&n)):(i=0===r,s=1===r,o=2===r),{leftButton:i,middleButton:s,rightButton:o}}function Pl(e,t){const n=e.center;if(!n)return null;const r=t.getBoundingClientRect(),i=r.width/t.offsetWidth||1,s=r.height/t.offsetHeight||1;return{center:n,offsetCenter:{x:(n.x-r.left-t.clientLeft)/i,y:(n.y-r.top-t.clientTop)/s}}}const Il={srcElement:"root",priority:0};class Ml{constructor(e,t){this.handleEvent=e=>{if(this.isEmpty())return;const t=this._normalizeEvent(e);let n=e.srcEvent.target;for(;n&&n!==t.rootElement;){if(this._emit(t,n),t.handled)return;n=n.parentNode}this._emit(t,"root")},this.eventManager=e,this.recognizerName=t,this.handlers=[],this.handlersByElement=new Map,this._active=!1}isEmpty(){return!this._active}add(e,t,n,r=!1,i=!1){const{handlers:s,handlersByElement:o}=this,a={...Il,...n};let A=o.get(a.srcElement);A||(A=[],o.set(a.srcElement,A));const l={type:e,handler:t,srcElement:a.srcElement,priority:a.priority};r&&(l.once=!0),i&&(l.passive=!0),s.push(l),this._active=this._active||!l.passive;let c=A.length-1;for(;c>=0&&!(A[c].priority>=l.priority);)c--;A.splice(c+1,0,l)}remove(e,t){const{handlers:n,handlersByElement:r}=this;for(let i=n.length-1;i>=0;i--){const s=n[i];if(s.type===e&&s.handler===t){n.splice(i,1);const e=r.get(s.srcElement);e.splice(e.indexOf(s),1),0===e.length&&r.delete(s.srcElement)}}this._active=n.some(e=>!e.passive)}_emit(e,t){const n=this.handlersByElement.get(t);if(n){let t=!1;const r=()=>{e.handled=!0},i=()=>{e.handled=!0,t=!0},s=[];for(let o=0;o{e.srcEvent.preventDefault()},stopImmediatePropagation:null,stopPropagation:null,handled:!1,rootElement:t}}}function Ll(e){if("recognizer"in e)return e;let t;const n=Array.isArray(e)?[...e]:[e];return t="function"==typeof n[0]?new(n.shift())(n.shift()||{}):n.shift(),{recognizer:t,recognizeWith:"string"==typeof n[0]?[n[0]]:n[0],requireFailure:"string"==typeof n[1]?[n[1]]:n[1]}}class Nl{constructor(e=null,t={}){if(this._onBasicInput=e=>{this.manager.emit(e.srcEvent.type,e)},this._onOtherEvent=e=>{this.manager.emit(e.type,e)},this.options={recognizers:[],events:{},touchAction:"compute",tabIndex:0,cssProps:{},...t},this.events=new Map,this.element=e,e){this.manager=new cl(e,this.options);for(const e of this.options.recognizers){const{recognizer:t,recognizeWith:n,requireFailure:r}=Ll(e);this.manager.add(t),n&&t.recognizeWith(n),r&&t.requireFailure(r)}this.manager.on("hammer.input",this._onBasicInput),this.wheelInput=new wl(e,this._onOtherEvent,{enable:!1}),this.moveInput=new El(e,this._onOtherEvent,{enable:!1}),this.keyInput=new Sl(e,this._onOtherEvent,{enable:!1,tabIndex:t.tabIndex}),this.contextmenuInput=new Cl(e,this._onOtherEvent,{enable:!1}),this.on(this.options.events)}}getElement(){return this.element}destroy(){this.element&&(this.wheelInput.destroy(),this.moveInput.destroy(),this.keyInput.destroy(),this.contextmenuInput.destroy(),this.manager.destroy())}on(e,t,n){this._addEventHandler(e,t,n,!1)}once(e,t,n){this._addEventHandler(e,t,n,!0)}watch(e,t,n){this._addEventHandler(e,t,n,!1,!0)}off(e,t){this._removeEventHandler(e,t)}_toggleRecognizer(e,t){var n,r,i,s;const{manager:o}=this;if(!o)return;const a=o.get(e);a&&(a.set({enable:t}),o.touchAction.update()),null==(n=this.wheelInput)||n.enableEventType(e,t),null==(r=this.moveInput)||r.enableEventType(e,t),null==(i=this.keyInput)||i.enableEventType(e,t),null==(s=this.contextmenuInput)||s.enableEventType(e,t)}_addEventHandler(e,t,n,r,i){if("string"!=typeof e){n=t;for(const[t,s]of Object.entries(e))this._addEventHandler(t,s,n,r,i);return}const{manager:s,events:o}=this;if(!s)return;let a=o.get(e);if(!a){const t=this._getRecognizerName(e)||e;a=new Ml(this,t),o.set(e,a),s&&s.on(e,a.handleEvent)}a.add(e,t,n,r,i),a.isEmpty()||this._toggleRecognizer(a.recognizerName,!0)}_removeEventHandler(e,t){if("string"!=typeof e){for(const[t,n]of Object.entries(e))this._removeEventHandler(t,n);return}const{events:n}=this,r=n.get(e);if(r&&(r.remove(e,t),r.isEmpty())){const{recognizerName:e}=r;let t=!1;for(const r of n.values())if(r.recognizerName===e&&!r.isEmpty()){t=!0;break}t||this._toggleRecognizer(e,!1)}}_getRecognizerName(e){var t;return null==(t=this.manager.recognizers.find(t=>t.getEventNames().includes(e)))?void 0:t.options.event}}const Bl={DEFAULT:-1,LNGLAT:1,METER_OFFSETS:2,LNGLAT_OFFSETS:3,CARTESIAN:0};Object.defineProperty(Bl,"IDENTITY",{get:()=>(Gn.deprecated("COORDINATE_SYSTEM.IDENTITY","COORDINATE_SYSTEM.CARTESIAN")(),0)});const Dl={WEB_MERCATOR:1,GLOBE:2,WEB_MERCATOR_AUTO_OFFSET:4,IDENTITY:0},Ol={common:0,meters:1,pixels:2},Fl={click:"onClick",dblclick:"onClick",panstart:"onDragStart",panmove:"onDrag",panend:"onDragEnd"},Ul={multipan:[ml,{threshold:10,direction:FA.Vertical,pointers:2}],pinch:[class extends fl{constructor(e={}){super({enable:!0,event:"pinch",threshold:0,pointers:2,...e})}getTouchAction(){return[VA]}getEventNames(){return _l.map(e=>this.options.event+e)}attrTest(e){return super.attrTest(e)&&(Math.abs(e.scale-1)>this.options.threshold||Boolean(this.state&jA.Began))}emit(e){if(1!==e.scale){const t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}super.emit(e)}},{},null,["multipan"]],pan:[ml,{threshold:1},["pinch"],["multipan"]],dblclick:[pl,{event:"dblclick",taps:2}],click:[pl,{event:"click"},null,["dblclick"]]};function jl(e,t){if(e===t)return!0;if(Array.isArray(e)){const n=e.length;if(!t||t.length!==n)return!1;for(let r=0;r{for(const i in r)if(!jl(r[i],n[i])){t=e(r),n=r;break}return t}}const zl=[0,0,0,0],Vl=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],Wl=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Hl=[0,0,0],$l=[0,0,0],Xl=Gl(function({viewport:e,devicePixelRatio:t,coordinateSystem:n,coordinateOrigin:r}){const{projectionCenter:i,viewProjectionMatrix:s,originCommon:o,cameraPosCommon:a,shaderCoordinateOrigin:A,geospatialOrigin:l}=function(e,t,n){const{viewMatrixUncentered:r,projectionMatrix:i}=e;let{viewMatrix:s,viewProjectionMatrix:o}=e,a=zl,A=zl,l=e.cameraPosition;const{geospatialOrigin:c,shaderCoordinateOrigin:u,offsetMode:h}=Ql(e,t,n);return h&&(A=e.projectPosition(c||u),l=[l[0]-A[0],l[1]-A[1],l[2]-A[2]],A[3]=1,a=sA([],A,o),s=r||s,o=Ja([],i,s),o=Ja([],o,Vl)),{viewMatrix:s,viewProjectionMatrix:o,projectionCenter:a,originCommon:A,cameraPosCommon:l,shaderCoordinateOrigin:u,geospatialOrigin:c}}(e,n,r),c=e.getDistanceScales(),u=[e.width*t,e.height*t],h=sA([],[0,0,-e.focalDistance,1],e.projectionMatrix)[3]||1,d={coordinateSystem:n,projectionMode:e.projectionMode,coordinateOrigin:A,commonOrigin:o.slice(0,3),center:i,pseudoMeters:Boolean(e._pseudoMeters),viewportSize:u,devicePixelRatio:t,focalDistance:h,commonUnitsPerMeter:c.unitsPerMeter,commonUnitsPerWorldUnit:c.unitsPerMeter,commonUnitsPerWorldUnit2:Hl,scale:e.scale,wrapLongitude:!1,viewProjectionMatrix:s,modelMatrix:Wl,cameraPosition:a};if(l){const t=e.getDistanceScales(l);switch(n){case Bl.METER_OFFSETS:d.commonUnitsPerWorldUnit=t.unitsPerMeter,d.commonUnitsPerWorldUnit2=t.unitsPerMeter2;break;case Bl.LNGLAT:case Bl.LNGLAT_OFFSETS:e._pseudoMeters||(d.commonUnitsPerMeter=t.unitsPerMeter),d.commonUnitsPerWorldUnit=t.unitsPerDegree,d.commonUnitsPerWorldUnit2=t.unitsPerDegree2;break;case Bl.CARTESIAN:d.commonUnitsPerWorldUnit=[1,1,t.unitsPerMeter[2]],d.commonUnitsPerWorldUnit2=[0,0,t.unitsPerMeter2[2]]}}return d});function Ql(e,t,n=$l){n.length<3&&(n=[n[0],n[1],0]);let r,i=n,s=!0;switch(r=t===Bl.LNGLAT_OFFSETS||t===Bl.METER_OFFSETS?n:e.isGeospatial?[Math.fround(e.longitude),Math.fround(e.latitude),0]:null,e.projectionMode){case Dl.WEB_MERCATOR:t!==Bl.LNGLAT&&t!==Bl.CARTESIAN||(r=[0,0,0],s=!1);break;case Dl.WEB_MERCATOR_AUTO_OFFSET:t===Bl.LNGLAT?i=r:t===Bl.CARTESIAN&&(i=[Math.fround(e.center[0]),Math.fround(e.center[1]),0],r=e.unprojectPosition(i),i[0]-=n[0],i[1]-=n[1],i[2]-=n[2]);break;case Dl.IDENTITY:i=e.position.map(Math.fround),i[2]=i[2]||0;break;case Dl.GLOBE:s=!1,r=null;break;default:s=!1}return{geospatialOrigin:r,shaderCoordinateOrigin:i,offsetMode:s}}const Yl=`${Object.keys(Bl).map(e=>`const COORDINATE_SYSTEM_${e}: i32 = ${Bl[e]};`).join("")}\n${Object.keys(Dl).map(e=>`const PROJECTION_MODE_${e}: i32 = ${Dl[e]};`).join("")}\n${Object.keys(Ol).map(e=>`const UNIT_${e.toUpperCase()}: i32 = ${Ol[e]};`).join("")}\n\nconst TILE_SIZE: f32 = 512.0;\nconst PI: f32 = 3.1415926536;\nconst WORLD_SCALE: f32 = TILE_SIZE / (PI * 2.0);\nconst ZERO_64_LOW: vec3 = vec3(0.0, 0.0, 0.0);\nconst EARTH_RADIUS: f32 = 6370972.0; // meters\nconst GLOBE_RADIUS: f32 = 256.0;\n\n// -----------------------------------------------------------------------------\n// Uniform block (converted from GLSL uniform block)\n// -----------------------------------------------------------------------------\nstruct ProjectUniforms {\n wrapLongitude: i32,\n coordinateSystem: i32,\n commonUnitsPerMeter: vec3,\n projectionMode: i32,\n scale: f32,\n commonUnitsPerWorldUnit: vec3,\n commonUnitsPerWorldUnit2: vec3,\n center: vec4,\n modelMatrix: mat4x4,\n viewProjectionMatrix: mat4x4,\n viewportSize: vec2,\n devicePixelRatio: f32,\n focalDistance: f32,\n cameraPosition: vec3,\n coordinateOrigin: vec3,\n commonOrigin: vec3,\n pseudoMeters: i32,\n};\n\n@group(0) @binding(0)\nvar project: ProjectUniforms;\n\n// -----------------------------------------------------------------------------\n// Geometry data\n// (In your GLSL code, "geometry" was assumed to be available globally. In WGSL,\n// you might supply this via vertex attributes or a uniform. Here we define a\n// uniform struct for demonstration.)\n// -----------------------------------------------------------------------------\n\n// Structure to carry additional geometry data used by deck.gl filters.\nstruct Geometry {\n worldPosition: vec3,\n worldPositionAlt: vec3,\n position: vec4,\n normal: vec3,\n uv: vec2,\n pickingColor: vec3,\n};\n\n// @group(0) @binding(1)\nvar geometry: Geometry;\n\n\n// -----------------------------------------------------------------------------\n// Functions\n// -----------------------------------------------------------------------------\n\n// Returns an adjustment factor for commonUnitsPerMeter\nfn _project_size_at_latitude(lat: f32) -> f32 {\n let y = clamp(lat, -89.9, 89.9);\n return 1.0 / cos(radians(y));\n}\n\n// Overloaded version: scales a value in meters at a given latitude.\nfn _project_size_at_latitude_m(meters: f32, lat: f32) -> f32 {\n return meters * project.commonUnitsPerMeter.z * _project_size_at_latitude(lat);\n}\n\n// Computes a non-linear scale factor based on geometry.\n// (Note: This function relies on "geometry" being provided.)\nfn project_size() -> f32 {\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&\n project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\n project.pseudoMeters == 0) {\n if (geometry.position.w == 0.0) {\n return _project_size_at_latitude(geometry.worldPosition.y);\n }\n let y: f32 = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\n let y2 = y * y;\n let y4 = y2 * y2;\n let y6 = y4 * y2;\n return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n }\n return 1.0;\n}\n\n// Overloads to scale offsets (meters to world units)\nfn project_size_float(meters: f32) -> f32 {\n return meters * project.commonUnitsPerMeter.z * project_size();\n}\n\nfn project_size_vec2(meters: vec2) -> vec2 {\n return meters * project.commonUnitsPerMeter.xy * project_size();\n}\n\nfn project_size_vec3(meters: vec3) -> vec3 {\n return meters * project.commonUnitsPerMeter * project_size();\n}\n\nfn project_size_vec4(meters: vec4) -> vec4 {\n return vec4(meters.xyz * project.commonUnitsPerMeter, meters.w);\n}\n\n// Returns a rotation matrix aligning the z‑axis with the given up vector.\nfn project_get_orientation_matrix(up: vec3) -> mat3x3 {\n let uz = normalize(up);\n let ux = select(\n vec3(1.0, 0.0, 0.0),\n normalize(vec3(uz.y, -uz.x, 0.0)),\n abs(uz.z) == 1.0\n );\n let uy = cross(uz, ux);\n return mat3x3(ux, uy, uz);\n}\n\n// Since WGSL does not support "out" parameters, we return a struct.\nstruct RotationResult {\n needsRotation: bool,\n transform: mat3x3,\n};\n\nfn project_needs_rotation(commonPosition: vec3) -> RotationResult {\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n return RotationResult(true, project_get_orientation_matrix(commonPosition));\n } else {\n return RotationResult(false, mat3x3()); // identity alternative if needed\n };\n}\n\n// Projects a normal vector from the current coordinate system to world space.\nfn project_normal(vector: vec3) -> vec3 {\n let normal_modelspace = project.modelMatrix * vec4(vector, 0.0);\n var n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);\n let rotResult = project_needs_rotation(geometry.position.xyz);\n if (rotResult.needsRotation) {\n n = rotResult.transform * n;\n }\n return n;\n}\n\n// Applies a scale offset based on y-offset (dy)\nfn project_offset_(offset: vec4) -> vec4 {\n let dy: f32 = offset.y;\n let commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\n return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n// Projects lng/lat coordinates to a unit tile [0,1]\nfn project_mercator_(lnglat: vec2) -> vec2 {\n var x = lnglat.x;\n if (project.wrapLongitude != 0) {\n x = ((x + 180.0) % 360.0) - 180.0;\n }\n let y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// Projects lng/lat/z coordinates for a globe projection.\nfn project_globe_(lnglatz: vec3) -> vec3 {\n let lambda = radians(lnglatz.x);\n let phi = radians(lnglatz.y);\n let cosPhi = cos(phi);\n let D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\n return vec3(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n\n// Projects positions (with an optional 64-bit low part) from the input\n// coordinate system to the common space.\nfn project_position_vec4_f64(position: vec4, position64Low: vec3) -> vec4 {\n var position_world = project.modelMatrix * position;\n\n // Work around for a Mac+NVIDIA bug:\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_mercator_(position_world.xy),\n _project_size_at_latitude_m(position_world.z, position_world.y),\n position_world.w\n );\n }\n if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\n position_world = vec4f(position_world.xyz + project.coordinateOrigin, position_world.w);\n }\n }\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_globe_(position_world.xyz),\n position_world.w\n );\n }\n }\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n if (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {\n return vec4(\n project_mercator_(position_world.xy) - project.commonOrigin.xy,\n project_size_float(position_world.z),\n position_world.w\n );\n }\n }\n }\n if (project.projectionMode == PROJECTION_MODE_IDENTITY ||\n (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\n position_world = vec4f(position_world.xyz - project.coordinateOrigin, position_world.w);\n }\n\n return project_offset_(position_world) +\n project_offset_(project.modelMatrix * vec4(position64Low, 0.0));\n}\n\n// Overloaded versions for different input types.\nfn project_position_vec4_f32(position: vec4) -> vec4 {\n return project_position_vec4_f64(position, ZERO_64_LOW);\n}\n\nfn project_position_vec3_f64(position: vec3, position64Low: vec3) -> vec3 {\n let projected_position = project_position_vec4_f64(vec4(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nfn project_position_vec3_f32(position: vec3) -> vec3 {\n let projected_position = project_position_vec4_f64(vec4(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nfn project_position_vec2_f32(position: vec2) -> vec2 {\n let projected_position = project_position_vec4_f64(vec4(position, 0.0, 1.0), ZERO_64_LOW);\n return projected_position.xy;\n}\n\n// Transforms a common space position to clip space.\nfn project_common_position_to_clipspace_with_projection(position: vec4, viewProjectionMatrix: mat4x4, center: vec4) -> vec4 {\n return viewProjectionMatrix * position + center;\n}\n\n// Uses the project viewProjectionMatrix and center.\nfn project_common_position_to_clipspace(position: vec4) -> vec4 {\n return project_common_position_to_clipspace_with_projection(position, project.viewProjectionMatrix, project.center);\n}\n\n// Returns a clip space offset corresponding to a given number of screen pixels.\nfn project_pixel_size_to_clipspace(pixels: vec2) -> vec2 {\n let offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;\n return offset * project.focalDistance;\n}\n\nfn project_meter_size_to_pixel(meters: f32) -> f32 {\n return project_size_float(meters) * project.scale;\n}\n\nfn project_unit_size_to_pixel(size: f32, unit: i32) -> f32 {\n if (unit == UNIT_METERS) {\n return project_meter_size_to_pixel(size);\n } else if (unit == UNIT_COMMON) {\n return size * project.scale;\n }\n // UNIT_PIXELS: no scaling applied.\n return size;\n}\n\nfn project_pixel_size_float(pixels: f32) -> f32 {\n return pixels / project.scale;\n}\n\nfn project_pixel_size_vec2(pixels: vec2) -> vec2 {\n return pixels / project.scale;\n}\n`,ql=Object.keys(Bl).map(e=>`const int COORDINATE_SYSTEM_${e} = ${Bl[e]};`).join(""),Kl=Object.keys(Dl).map(e=>`const int PROJECTION_MODE_${e} = ${Dl[e]};`).join(""),Zl=Object.keys(Ol).map(e=>`const int UNIT_${e.toUpperCase()} = ${Ol[e]};`).join(""),Jl={},ec={name:"project",dependencies:[{name:"fp32",vs:"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n\n// All these functions are for substituting tan() function from Intel GPU only\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\n\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\n\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\n\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01; // 1/3!\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03; // 1/5!\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04; // 1/7!\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06; // 1/9!\n\nfloat sin_taylor_fp32(float a) {\n float r, s, t, x;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n x = -a * a;\n s = a;\n r = a;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_3;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_5;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_7;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_9;\n s = s + t;\n\n return s;\n}\n\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\n if (a == 0.0) {\n sin_t = 0.0;\n cos_t = 1.0;\n }\n sin_t = sin_taylor_fp32(a);\n cos_t = sqrt(1.0 - sin_t * sin_t);\n}\n\nfloat tan_taylor_fp32(float a) {\n float sin_a;\n float cos_a;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n // 2pi range reduction\n float z = floor(a / TWO_PI);\n float r = a - TWO_PI * z;\n\n float t;\n float q = floor(r / PI_2 + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return 1.0 / 0.0;\n }\n\n t = r - PI_2 * q;\n\n q = floor(t / PI_16 + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return 1.0 / 0.0;\n } else {\n t = t - PI_16 * q;\n }\n\n float u = 0.0;\n float v = 0.0;\n\n float sin_t, cos_t;\n float s, c;\n sincos_taylor_fp32(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0;\n v = SIN_TABLE_0;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1;\n v = SIN_TABLE_1;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2;\n v = SIN_TABLE_2;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3;\n v = SIN_TABLE_3;\n }\n if (k > 0) {\n s = u * sin_t + v * cos_t;\n c = u * cos_t - v * sin_t;\n } else {\n s = u * sin_t - v * cos_t;\n c = u * cos_t + v * sin_t;\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return sin_a / cos_a;\n}\n#endif\n\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n return tan_taylor_fp32(a);\n#else\n return tan(a);\n#endif\n}\n"},BA],source:Yl,vs:`${ql}\n${Kl}\n${Zl}\nuniform projectUniforms {\nbool wrapLongitude;\nint coordinateSystem;\nvec3 commonUnitsPerMeter;\nint projectionMode;\nfloat scale;\nvec3 commonUnitsPerWorldUnit;\nvec3 commonUnitsPerWorldUnit2;\nvec4 center;\nmat4 modelMatrix;\nmat4 viewProjectionMatrix;\nvec2 viewportSize;\nfloat devicePixelRatio;\nfloat focalDistance;\nvec3 cameraPosition;\nvec3 coordinateOrigin;\nvec3 commonOrigin;\nbool pseudoMeters;\n} project;\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0;\nconst float GLOBE_RADIUS = 256.0;\nfloat project_size_at_latitude(float lat) {\nfloat y = clamp(lat, -89.9, 89.9);\nreturn 1.0 / cos(radians(y));\n}\nfloat project_size() {\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&\nproject.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\nproject.pseudoMeters == false) {\nif (geometry.position.w == 0.0) {\nreturn project_size_at_latitude(geometry.worldPosition.y);\n}\nfloat y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\nfloat y2 = y * y;\nfloat y4 = y2 * y2;\nfloat y6 = y4 * y2;\nreturn 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n}\nreturn 1.0;\n}\nfloat project_size_at_latitude(float meters, float lat) {\nreturn meters * project.commonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\nfloat project_size(float meters) {\nreturn meters * project.commonUnitsPerMeter.z * project_size();\n}\nvec2 project_size(vec2 meters) {\nreturn meters * project.commonUnitsPerMeter.xy * project_size();\n}\nvec3 project_size(vec3 meters) {\nreturn meters * project.commonUnitsPerMeter * project_size();\n}\nvec4 project_size(vec4 meters) {\nreturn vec4(meters.xyz * project.commonUnitsPerMeter, meters.w);\n}\nmat3 project_get_orientation_matrix(vec3 up) {\nvec3 uz = normalize(up);\nvec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\nvec3 uy = cross(uz, ux);\nreturn mat3(ux, uy, uz);\n}\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\ntransform = project_get_orientation_matrix(commonPosition);\nreturn true;\n}\nreturn false;\n}\nvec3 project_normal(vec3 vector) {\nvec4 normal_modelspace = project.modelMatrix * vec4(vector, 0.0);\nvec3 n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);\nmat3 rotation;\nif (project_needs_rotation(geometry.position.xyz, rotation)) {\nn = rotation * n;\n}\nreturn n;\n}\nvec4 project_offset_(vec4 offset) {\nfloat dy = offset.y;\nvec3 commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\nreturn vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\nvec2 project_mercator_(vec2 lnglat) {\nfloat x = lnglat.x;\nif (project.wrapLongitude) {\nx = mod(x + 180., 360.0) - 180.;\n}\nfloat y = clamp(lnglat.y, -89.9, 89.9);\nreturn vec2(\nradians(x) + PI,\nPI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n) * WORLD_SCALE;\n}\nvec3 project_globe_(vec3 lnglatz) {\nfloat lambda = radians(lnglatz.x);\nfloat phi = radians(lnglatz.y);\nfloat cosPhi = cos(phi);\nfloat D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\nreturn vec3(\nsin(lambda) * cosPhi,\n-cos(lambda) * cosPhi,\nsin(phi)\n) * D;\n}\nvec4 project_position(vec4 position, vec3 position64Low) {\nvec4 position_world = project.modelMatrix * position;\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_mercator_(position_world.xy),\nproject_size_at_latitude(position_world.z, position_world.y),\nposition_world.w\n);\n}\nif (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\nposition_world.xyz += project.coordinateOrigin;\n}\n}\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_globe_(position_world.xyz),\nposition_world.w\n);\n}\n}\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nif (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {\nreturn vec4(\nproject_mercator_(position_world.xy) - project.commonOrigin.xy,\nproject_size(position_world.z),\nposition_world.w\n);\n}\n}\n}\nif (project.projectionMode == PROJECTION_MODE_IDENTITY ||\n(project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n(project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\nproject.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\nposition_world.xyz -= project.coordinateOrigin;\n}\nreturn project_offset_(position_world) + project_offset_(project.modelMatrix * vec4(position64Low, 0.0));\n}\nvec4 project_position(vec4 position) {\nreturn project_position(position, ZERO_64_LOW);\n}\nvec3 project_position(vec3 position, vec3 position64Low) {\nvec4 projected_position = project_position(vec4(position, 1.0), position64Low);\nreturn projected_position.xyz;\n}\nvec3 project_position(vec3 position) {\nvec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\nreturn projected_position.xyz;\n}\nvec2 project_position(vec2 position) {\nvec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\nreturn projected_position.xy;\n}\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\nreturn viewProjectionMatrix * position + center;\n}\nvec4 project_common_position_to_clipspace(vec4 position) {\nreturn project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center);\n}\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\nvec2 offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;\nreturn offset * project.focalDistance;\n}\nfloat project_size_to_pixel(float meters) {\nreturn project_size(meters) * project.scale;\n}\nfloat project_size_to_pixel(float size, int unit) {\nif (unit == UNIT_METERS) return project_size_to_pixel(size);\nif (unit == UNIT_COMMON) return size * project.scale;\nreturn size;\n}\nfloat project_pixel_size(float pixels) {\nreturn pixels / project.scale;\n}\nvec2 project_pixel_size(vec2 pixels) {\nreturn pixels / project.scale;\n}\n`,getUniforms:function(e=Jl){return"viewport"in e?function({viewport:e,devicePixelRatio:t=1,modelMatrix:n=null,coordinateSystem:r=Bl.DEFAULT,coordinateOrigin:i=$l,autoWrapLongitude:s=!1}){r===Bl.DEFAULT&&(r=e.isGeospatial?Bl.LNGLAT:Bl.CARTESIAN);const o=Xl({viewport:e,devicePixelRatio:t,coordinateSystem:r,coordinateOrigin:i});return o.wrapLongitude=s,o.modelMatrix=n||Wl,o}(e):{}},uniformTypes:{wrapLongitude:"f32",coordinateSystem:"i32",commonUnitsPerMeter:"vec3",projectionMode:"i32",scale:"f32",commonUnitsPerWorldUnit:"vec3",commonUnitsPerWorldUnit2:"vec3",center:"vec4",modelMatrix:"mat4x4",viewProjectionMatrix:"mat4x4",viewportSize:"vec2",devicePixelRatio:"f32",focalDistance:"f32",cameraPosition:"vec3",coordinateOrigin:"vec3",commonOrigin:"vec3",pseudoMeters:"f32"}},tc={name:"project32",dependencies:[ec],source:"// Define a structure to hold both the clip-space position and the common position.\nstruct ProjectResult {\n clipPosition: vec4,\n commonPosition: vec4,\n};\n\n// This function mimics the GLSL version with the 'out' parameter by returning both values.\nfn project_position_to_clipspace_and_commonspace(\n position: vec3,\n position64Low: vec3,\n offset: vec3\n) -> ProjectResult {\n // Compute the projected position.\n let projectedPosition: vec3 = project_position_vec3_f64(position, position64Low);\n\n // Start with the provided offset.\n var finalOffset: vec3 = offset;\n\n // Get whether a rotation is needed and the rotation matrix.\n let rotationResult = project_needs_rotation(projectedPosition);\n\n // If rotation is needed, update the offset.\n if (rotationResult.needsRotation) {\n finalOffset = rotationResult.transform * offset;\n }\n\n // Compute the common position.\n let commonPosition: vec4 = vec4(projectedPosition + finalOffset, 1.0);\n\n // Convert to clip-space.\n let clipPosition: vec4 = project_common_position_to_clipspace(commonPosition);\n\n return ProjectResult(clipPosition, commonPosition);\n}\n\n// A convenience overload that returns only the clip-space position.\nfn project_position_to_clipspace(\n position: vec3,\n position64Low: vec3,\n offset: vec3\n) -> vec4 {\n return project_position_to_clipspace_and_commonspace(position, position64Low, offset).clipPosition;\n}\n",vs:"vec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition\n) {\n vec3 projectedPosition = project_position(position, position64Low);\n mat3 rotation;\n if (project_needs_rotation(projectedPosition, rotation)) {\n // offset is specified as ENU\n // when in globe projection, rotate offset so that the ground alighs with the surface of the globe\n offset = rotation * offset;\n }\n commonPosition = vec4(projectedPosition + offset, 1.0);\n return project_common_position_to_clipspace(commonPosition);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(position, position64Low, offset, commonPosition);\n}\n"};function nc(e,t){const n=sA([],t,e);return iA(n,n,1/n[3]),n}function rc(e,t){const n=e%t;return n<0?t+n:n}function ic(e,t,n){return en?n:e}const sc=Math.log2||function(e){return Math.log(e)*Math.LOG2E};function oc(e,t){if(!e)throw new Error(t||"@math.gl/web-mercator: assertion failed.")}const ac=Math.PI,Ac=ac/4,lc=ac/180,cc=180/ac,uc=512,hc=85.051129,dc=1.5;function fc(e){const[t,n]=e;oc(Number.isFinite(t)),oc(Number.isFinite(n)&&n>=-90&&n<=90,"invalid latitude");const r=n*lc;return[uc*(t*lc+ac)/(2*ac),uc*(ac+Math.log(Math.tan(Ac+.5*r)))/(2*ac)]}function pc(e){const[t,n]=e,r=t/uc*(2*ac)-ac,i=2*(Math.atan(Math.exp(n/uc*(2*ac)-ac))-Ac);return[r*cc,i*cc]}function gc(e){return 12790407194604047e-21/Math.cos(e*lc)}function mc(e){const{latitude:t,longitude:n,highPrecision:r=!1}=e;oc(Number.isFinite(t)&&Number.isFinite(n));const i=Math.cos(t*lc),s=512/360,o=s/i,a=12790407194604047e-21/i,A={unitsPerMeter:[a,a,a],metersPerUnit:[1/a,1/a,1/a],unitsPerDegree:[s,o,a],degreesPerUnit:[.703125,1/o,1/a]};if(r){const e=lc*Math.tan(t*lc)/i,n=s*e/2,r=12790407194604047e-21*e,l=r/o*a;A.unitsPerDegree2=[0,n,r],A.unitsPerMeter2=[l,0,l]}return A}function _c(e,t){const[n,r,i]=e,[s,o,a]=t,{unitsPerMeter:A,unitsPerMeter2:l}=mc({longitude:n,latitude:r,highPrecision:!0}),c=fc(e);c[0]+=s*(A[0]+l[0]*o),c[1]+=o*(A[1]+l[1]*o);const u=pc(c),h=(i||0)+(a||0);return Number.isFinite(i)||Number.isFinite(a)?[u[0],u[1],h]:u}function bc(e){return 2*Math.atan(.5/e)*cc}function vc(e){return.5/Math.tan(.5*e*lc)}function yc(e,t){const[n,r,i=0]=e;return oc(Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(i)),nc(t,[n,r,i,1])}function wc(e,t,n=0){const[r,i,s]=e;if(oc(Number.isFinite(r)&&Number.isFinite(i),"invalid pixel coordinate"),Number.isFinite(s))return nc(t,[r,i,s,1]);const o=nc(t,[r,i,0,1]),a=nc(t,[r,i,1,1]),A=o[2],l=a[2];return Va([],o,a,A===l?0:((n||0)-A)/(l-A))}const xc=Math.PI/180;function Ec(e,t,n){const{pixelUnprojectionMatrix:r}=e,i=nc(r,[t,0,1,1]),s=nc(r,[t,e.height,1,1]),o=pc(Va([],i,s,(n*e.distanceScales.unitsPerMeter[2]-i[2])/(s[2]-i[2])));return o.push(n),o}const Tc="\nuniform shadowUniforms {\n bool drawShadowMap;\n bool useShadowMap;\n vec4 color;\n highp int lightId;\n float lightCount;\n mat4 viewProjectionMatrix0;\n mat4 viewProjectionMatrix1;\n vec4 projectCenter0;\n vec4 projectCenter1;\n} shadow;\n",Sc=`\n${Tc}\n\nconst int max_lights = 2;\n\nout vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n mat4 viewProjectionMatrices[max_lights];\n viewProjectionMatrices[0] = shadow.viewProjectionMatrix0;\n viewProjectionMatrices[1] = shadow.viewProjectionMatrix1;\n vec4 projectCenters[max_lights];\n projectCenters[0] = shadow.projectCenter0;\n projectCenters[1] = shadow.projectCenter1;\n\n if (shadow.drawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[shadow.lightId], projectCenters[shadow.lightId]);\n }\n if (shadow.useShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow.lightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[i], projectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n\n`,Cc=`\n${Tc}\n\nconst int max_lights = 2;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\n\nin vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow.drawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow.useShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow.lightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow.color.a / shadow.lightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow.color.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n\n`,kc=Gl(function({viewport:e,center:t}){return new dA(e.viewProjectionMatrix).invert().transform(t)}),Rc=Gl(function({viewport:e,shadowMatrices:t}){const n=[],r=e.pixelUnprojectionMatrix,i=e.isGeospatial?void 0:1,s=[[0,0,i],[e.width,0,i],[0,e.height,i],[e.width,e.height,i],[0,0,-1],[e.width,0,-1],[0,e.height,-1],[e.width,e.height,-1]].map(e=>function(e,t){const[n,r,i]=e,s=wc([n,r,i],t);return Number.isFinite(i)?s:[s[0],s[1],0]}(e,r));for(const o of t){const t=o.clone().translate(new qa(e.center).negate()),r=s.map(e=>t.transform(e)),i=(new dA).ortho({left:Math.min(...r.map(e=>e[0])),right:Math.max(...r.map(e=>e[0])),bottom:Math.min(...r.map(e=>e[1])),top:Math.max(...r.map(e=>e[1])),near:Math.min(...r.map(e=>-e[2])),far:Math.max(...r.map(e=>-e[2]))});n.push(i.multiplyRight(o))}return n}),Pc=[0,0,0,1],Ic=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],Mc={name:"shadow",dependencies:[ec],vs:Sc,fs:Cc,inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n position = shadow_setVertexPosition(geometry.position);\n ","fs:DECKGL_FILTER_COLOR":"\n color = shadow_filterShadowColor(color);\n "},getUniforms:function(e){const{shadowEnabled:t=!0,project:n}=e;if(!(t&&n&&e.shadowMatrices&&e.shadowMatrices.length))return{drawShadowMap:!1,useShadowMap:!1,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};const r=ec.getUniforms(n),i=kc({viewport:n.viewport,center:r.center}),s=[],o=Rc({shadowMatrices:e.shadowMatrices,viewport:n.viewport}).slice();for(let A=0;A0,color:e.shadowColor||Pc,lightId:e.shadowLightId||0,lightCount:e.shadowMatrices.length,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};for(let A=0;A",lightId:"i32",lightCount:"f32",viewProjectionMatrix0:"mat4x4",viewProjectionMatrix1:"mat4x4",projectCenter0:"vec4",projectCenter1:"vec4"}},Lc={...bA,defaultUniforms:{...bA.defaultUniforms,useFloatColors:!1},inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n // for picking depth values\n picking_setPickingAttribute(position.z / position.w);\n ","vs:DECKGL_FILTER_COLOR":"\n picking_setPickingColor(geometry.pickingColor);\n ","fs:DECKGL_FILTER_COLOR":{order:99,injection:"\n // use highlight color if this fragment belongs to the selected object.\n color = picking_filterHighlightColor(color);\n\n // use picking color if rendering to picking FBO.\n color = picking_filterPickingColor(color);\n "}}},Nc=[BA],Bc=["vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)","vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)","vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)","fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)"],Dc=[];function Oc(e){const t=Cr.getDefaultShaderAssembler();for(const r of Nc)t.addDefaultModule(r);t._hookFunctions.length=0;const n="glsl"===e?Bc:Dc;for(const r of n)t.addShaderHook(r);return t}const Fc=[255,255,255],Uc=1;let jc=0;class Gc{constructor(e={}){this.type="ambient";const{color:t=Fc}=e,{intensity:n=Uc}=e;this.id=e.id||"ambient-"+jc++,this.color=t,this.intensity=n}}const zc=[255,255,255],Vc=1,Wc=[0,0,-1];let Hc=0;class $c{constructor(e={}){this.type="directional";const{color:t=zc}=e,{intensity:n=Vc}=e,{direction:r=Wc}=e,{_shadow:i=!1}=e;this.id=e.id||"directional-"+Hc++,this.color=t,this.intensity=n,this.type="directional",this.direction=new qa(r).normalize().toArray(),this.shadow=i}getProjectedLight(e){return this}}class Xc{constructor(e,t={id:"pass"}){const{id:n}=t;this.id=n,this.device=e,this.props={...t}}setProps(e){Object.assign(this.props,e)}render(e){}cleanup(){}}class Qc extends Xc{constructor(){super(...arguments),this._lastRenderIndex=-1}render(e){const[t,n]=this.device.canvasContext.getDrawingBufferSize(),r=e.clearCanvas??!0,i=e.clearColor??(!!r&&[0,0,0,0]),s=!!r&&1,o=!!r&&0,a=e.colorMask??15,A={viewport:[0,0,t,n]};e.colorMask&&(A.colorMask=a),e.scissorRect&&(A.scissorRect=e.scissorRect);const l=this.device.beginRenderPass({framebuffer:e.target,parameters:A,clearColor:i,clearDepth:s,clearStencil:o});try{return this._drawLayers(l,e)}finally{l.end(),this.device.submit()}}_drawLayers(e,t){const{target:n,shaderModuleProps:r,viewports:i,views:s,onViewportActive:o,clearStack:a=!0}=t;t.pass=t.pass||"unknown",a&&(this._lastRenderIndex=-1);const A=[];for(const l of i){const i=s&&s[l.id];null==o||o(l);const a=this._getDrawLayerParams(l,t),c=l.subViewports||[l];for(const s of c){const o=this._drawLayersInViewport(e,{target:n,shaderModuleProps:r,viewport:s,view:i,pass:t.pass,layers:t.layers},a);A.push(o)}}return A}_getDrawLayerParams(e,{layers:t,pass:n,isPicking:r=!1,layerFilter:i,cullRect:s,effects:o,shaderModuleProps:a},A=!1){var l;const c=[],u=Yc(this._lastRenderIndex+1),h={layer:t[0],viewport:e,isPicking:r,renderPass:n,cullRect:s},d={};for(let f=0;fe/255):!1===t&&(e=!1),void 0!==n&&(s=n),void 0!==r&&(o=r),this.device.beginRenderPass({framebuffer:i,parameters:{viewport:A,scissorRect:A},clearColor:e,clearDepth:s,clearStencil:o}).end()}}const l={totalCount:t.length,visibleCount:0,compositeCount:0,pickableCount:0};e.setParameters({viewport:A});for(let u=0;u{const o=i.props._offset,a=i.id,A=i.parent&&i.parent.id;let l;if(A&&!(A in t)&&r(i.parent,!1),A in n){const e=n[A]=n[A]||Yc(t[A],t);l=e(i,s),n[a]=e}else Number.isFinite(o)?(l=o+(t[A]||0),n[a]=null):l=e;return s&&l>=e&&(e=l+1),t[a]=l,l};return r}function qc(e,...t){for(const n of t)if(n)for(const t in n)e[t]?Object.assign(e[t],n[t]):e[t]=n[t];return e}class Kc extends Qc{constructor(e,t){super(e,t);const n=e.createTexture({format:"rgba8unorm",width:1,height:1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),r=e.createTexture({format:"depth16unorm",width:1,height:1});this.fbo=e.createFramebuffer({id:"shadowmap",width:1,height:1,colorAttachments:[n],depthStencilAttachment:r})}delete(){this.fbo&&(this.fbo.destroy(),this.fbo=null)}getShadowMap(){return this.fbo.colorAttachments[0].texture}render(e){const t=this.fbo,n=this.device.canvasContext.cssToDeviceRatio(),r=e.viewports[0],i=r.width*n,s=r.height*n;i===t.width&&s===t.height||t.resize({width:i,height:s}),super.render({...e,clearColor:[1,1,1,1],target:t,pass:"shadow"})}getLayerParameters(e,t,n){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}shouldDrawLayer(e){return!1!==e.props.shadowEnabled}getShaderModuleProps(e,t,n){return{shadow:{project:n.project,drawToShadowMap:!0}}}}const Zc={color:[255,255,255],intensity:1},Jc=[{color:[255,255,255],intensity:1,direction:[-1,3,-1]},{color:[255,255,255],intensity:.9,direction:[1,-8,-2.5]}],eu=[0,0,0,200/255];class tu{constructor(e={}){this.id="lighting-effect",this.shadowColor=eu,this.shadow=!1,this.directionalLights=[],this.pointLights=[],this.shadowPasses=[],this.dummyShadowMap=null,this.setProps(e)}setup(e){this.context=e;const{device:t,deck:n}=e;this.shadow&&!this.dummyShadowMap&&(this._createShadowPasses(t),n._addDefaultShaderModule(Mc),this.dummyShadowMap=t.createTexture({width:1,height:1}))}setProps(e){this.ambientLight=void 0,this.directionalLights=[],this.pointLights=[];for(const t in e){const n=e[t];switch(n.type){case"ambient":this.ambientLight=n;break;case"directional":this.directionalLights.push(n);break;case"point":this.pointLights.push(n)}}this._applyDefaultLights(),this.shadow=this.directionalLights.some(e=>e.shadow),this.context&&this.setup(this.context),this.props=e}preRender({layers:e,layerFilter:t,viewports:n,onViewportActive:r,views:i}){if(this.shadow){this.shadowMatrices=this._calculateMatrices();for(let s=0;se.getShadowMap()),dummyShadowMap:this.dummyShadowMap,shadowColor:this.shadowColor,shadowMatrices:this.shadowMatrices}:{},r={enabled:!0,ambientLight:this.ambientLight,directionalLights:this.directionalLights.map(t=>t.getProjectedLight({layer:e})),pointLights:this.pointLights.map(t=>t.getProjectedLight({layer:e}))},i=e.props.material;return{shadow:n,lighting:r,phongMaterial:i,gouraudMaterial:i}}cleanup(e){for(const t of this.shadowPasses)t.delete();this.shadowPasses.length=0,this.dummyShadowMap&&(this.dummyShadowMap.destroy(),this.dummyShadowMap=null,e.deck._removeDefaultShaderModule(Mc))}_calculateMatrices(){const e=[];for(const t of this.directionalLights){const n=(new dA).lookAt({eye:new qa(t.direction).negate()});e.push(n)}return e}_createShadowPasses(e){for(let t=0;tr&&(i=r);const s=this._pool,o=e.BYTES_PER_ELEMENT*i,a=s.findIndex(e=>e.byteLength>=o);if(a>=0){const t=new e(s.splice(a,1)[0],0,i);return n&&t.fill(0),t}return new e(i)}_release(e){if(!ArrayBuffer.isView(e))return;const t=this._pool,{buffer:n}=e,{byteLength:r}=n,i=t.findIndex(e=>e.byteLength>=r);i<0?t.push(n):(i>0||t.lengththis.opts.poolSize&&t.shift()}},ru=new qa;function iu(e,t,n,r){ru.set(e,t,n);const i=ru.len();return{distance:r/i,normal:new qa(-e/i,-t/i,-n/i)}}function su(e){return e-Math.fround(e)}let ou;function au(e,t){const{size:n=1,startIndex:r=0}=t,i=void 0!==t.endIndex?t.endIndex:e.length,s=(i-r)/n;ou=nu.allocate(ou,s,{type:Float32Array,size:2*n});let o=r,a=0;for(;o(90-e.pitch)*xc-.01?(A=Ec(e,0,t),l=Ec(e,n,t)):(A=i([0,0],s),l=i([n,0],s)),[o,a,l,A]}(this,e.z||0);return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1]),Math.max(t[0][0],t[1][0],t[2][0],t[3][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1])]}fitBounds(e,t={}){const{width:n,height:r}=this,{longitude:i,latitude:s,zoom:o}=function(e){const{width:t,height:n,bounds:r,minExtent:i=0,maxZoom:s=24,offset:o=[0,0]}=e,[[a,A],[l,c]]=r,u=function(e=0){return"number"==typeof e?{top:e,bottom:e,left:e,right:e}:(oc(Number.isFinite(e.top)&&Number.isFinite(e.bottom)&&Number.isFinite(e.left)&&Number.isFinite(e.right)),e)}(e.padding),h=fc([a,ic(c,-85.051129,hc)]),d=fc([l,ic(A,-85.051129,hc)]),f=[Math.max(Math.abs(d[0]-h[0]),i),Math.max(Math.abs(d[1]-h[1]),i)],p=[t-u.left-u.right-2*Math.abs(o[0]),n-u.top-u.bottom-2*Math.abs(o[1])];oc(p[0]>0&&p[1]>0);const g=p[0]/f[0],m=p[1]/f[1],_=(u.right-u.left)/2/g,b=(u.top-u.bottom)/2/m,v=pc([(d[0]+h[0])/2+_,(d[1]+h[1])/2+b]),y=Math.min(s,sc(Math.abs(Math.min(g,m))));return oc(Number.isFinite(y)),{longitude:v[0],latitude:v[1],zoom:y}}({width:n,height:r,bounds:e,...t});return new fu({width:n,height:r,longitude:i,latitude:s,zoom:o})}}fu.displayName="WebMercatorViewport";const pu=[0,0,0];function gu(e,t,n=!1){const r=t.projectPosition(e);if(n&&t instanceof fu){const[n,i,s=0]=e,o=t.getDistanceScales([n,i]);r[2]=s*o.unitsPerMeter[2]}return r}function mu(e,{viewport:t,modelMatrix:n,coordinateSystem:r,coordinateOrigin:i,offsetMode:s}){let[o,a,A=0]=e;switch(n&&([o,a,A]=sA([],[o,a,A,1],n)),r){case Bl.LNGLAT:return gu([o,a,A],t,s);case Bl.LNGLAT_OFFSETS:return gu([o+i[0],a+i[1],A+(i[2]||0)],t,s);case Bl.METER_OFFSETS:return gu(_c(i,[o,a,A]),t,s);default:return t.isGeospatial?[o+i[0],a+i[1],A+i[2]]:t.projectPosition([o,a,A])}}let _u=1,bu=1;class vu{constructor(){r(this,"time",0),r(this,"channels",new Map),r(this,"animations",new Map),r(this,"playing",!1),r(this,"lastEngineTime",-1)}addChannel(e){const{delay:t=0,duration:n=Number.POSITIVE_INFINITY,rate:r=1,repeat:i=1}=e,s=_u++,o={time:0,delay:t,duration:n,rate:r,repeat:i};return this._setChannelTime(o,this.time),this.channels.set(s,o),s}removeChannel(e){this.channels.delete(e);for(const[t,n]of this.animations)n.channel===e&&this.detachAnimation(t)}isFinished(e){const t=this.channels.get(e);return void 0!==t&&this.time>=t.delay+t.duration*t.repeat}getTime(e){if(void 0===e)return this.time;const t=this.channels.get(e);return void 0===t?-1:t.time}setTime(e){this.time=Math.max(0,e);const t=this.channels.values();for(const r of t)this._setChannelTime(r,this.time);const n=this.animations.values();for(const r of n){const{animation:e,channel:t}=r;e.setTime(this.getTime(t))}}play(){this.playing=!0}pause(){this.playing=!1,this.lastEngineTime=-1}reset(){this.setTime(0)}attachAnimation(e,t){const n=bu++;return this.animations.set(n,{animation:e,channel:t}),e.setTime(this.getTime(t)),n}detachAnimation(e){this.animations.delete(e)}update(e){this.playing&&(-1===this.lastEngineTime&&(this.lastEngineTime=e),this.setTime(this.time+(e-this.lastEngineTime)),this.lastEngineTime=e)}_setChannelTime(e,t){const n=t-e.delay;n>=e.duration*e.repeat?e.time=e.duration*e.rate:(e.time=Math.max(0,n)%e.duration,e.time*=e.rate)}}let yu=0;const wu=class e{constructor(t){if(r(this,"device",null),r(this,"canvas",null),r(this,"props"),r(this,"animationProps",null),r(this,"timeline",null),r(this,"stats"),r(this,"cpuTime"),r(this,"gpuTime"),r(this,"frameRate"),r(this,"display"),r(this,"needsRedraw","initialized"),r(this,"_initialized",!1),r(this,"_running",!1),r(this,"_animationFrameId",null),r(this,"_nextFramePromise",null),r(this,"_resolveNextFrame",null),r(this,"_cpuStartTime",0),r(this,"_error",null),this.props={...e.defaultAnimationLoopProps,...t},!(t=this.props).device)throw new Error("No device provided");this.stats=t.stats||new kt({id:"animation-loop-stats"}),this.cpuTime=this.stats.get("CPU Time"),this.gpuTime=this.stats.get("GPU Time"),this.frameRate=this.stats.get("Frame Rate"),this.setProps({autoResizeViewport:t.autoResizeViewport}),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this._onMousemove=this._onMousemove.bind(this),this._onMouseleave=this._onMouseleave.bind(this)}destroy(){this.stop(),this._setDisplay(null)}delete(){this.destroy()}reportError(e){this.props.onError(e),this._error=e}setNeedsRedraw(e){return this.needsRedraw=this.needsRedraw||e,this}setProps(e){return"autoResizeViewport"in e&&(this.props.autoResizeViewport=e.autoResizeViewport||!1),this}async start(){if(this._running)return this;this._running=!0;try{let e;return this._initialized||(this._initialized=!0,await this._initDevice(),this._initialize(),await this.props.onInitialize(this._getAnimationProps())),this._running?(!1!==e&&(this._cancelAnimationFrame(),this._requestAnimationFrame()),this):null}catch(e){const t=e instanceof Error?e:new Error("Unknown error");throw this.props.onError(t),t}}stop(){return this._running&&(this.animationProps&&!this._error&&this.props.onFinalize(this.animationProps),this._cancelAnimationFrame(),this._nextFramePromise=null,this._resolveNextFrame=null,this._running=!1),this}redraw(){var e;return(null==(e=this.device)?void 0:e.isLost)||this._error||(this._beginFrameTimers(),this._setupFrame(),this._updateAnimationProps(),this._renderFrame(this._getAnimationProps()),this._clearNeedsRedraw(),this._resolveNextFrame&&(this._resolveNextFrame(this),this._nextFramePromise=null,this._resolveNextFrame=null),this._endFrameTimers()),this}attachTimeline(e){return this.timeline=e,this.timeline}detachTimeline(){this.timeline=null}waitForRender(){return this.setNeedsRedraw("waitForRender"),this._nextFramePromise||(this._nextFramePromise=new Promise(e=>{this._resolveNextFrame=e})),this._nextFramePromise}async toDataURL(){if(this.setNeedsRedraw("toDataURL"),await this.waitForRender(),this.canvas instanceof HTMLCanvasElement)return this.canvas.toDataURL();throw new Error("OffscreenCanvas")}_initialize(){this._startEventHandling(),this._initializeAnimationProps(),this._updateAnimationProps(),this._resizeViewport()}_setDisplay(e){this.display&&(this.display.destroy(),this.display.animationLoop=null),e&&(e.animationLoop=this),this.display=e}_requestAnimationFrame(){var e;this._running&&(this._animationFrameId=(e=this._animationFrame.bind(this),"undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1e3/60)))}_cancelAnimationFrame(){var e;null!==this._animationFrameId&&(e=this._animationFrameId,"undefined"!=typeof window&&window.cancelAnimationFrame?window.cancelAnimationFrame(e):clearTimeout(e),this._animationFrameId=null)}_animationFrame(){this._running&&(this.redraw(),this._requestAnimationFrame())}_renderFrame(e){var t;this.display?this.display._renderFrame(e):(this.props.onRender(this._getAnimationProps()),null==(t=this.device)||t.submit())}_clearNeedsRedraw(){this.needsRedraw=!1}_setupFrame(){this._resizeViewport()}_initializeAnimationProps(){var e;const t=null==(e=this.device)?void 0:e.getDefaultCanvasContext();if(!this.device||!t)throw new Error("loop");const n=null==t?void 0:t.canvas,r=t.props.useDevicePixels;this.animationProps={animationLoop:this,device:this.device,canvasContext:t,canvas:n,useDevicePixels:r,timeline:this.timeline,needsRedraw:!1,width:1,height:1,aspect:1,time:0,startTime:Date.now(),engineTime:0,tick:0,tock:0,_mousePosition:null}}_getAnimationProps(){if(!this.animationProps)throw new Error("animationProps");return this.animationProps}_updateAnimationProps(){if(!this.animationProps)return;const{width:e,height:t,aspect:n}=this._getSizeAndAspect();e===this.animationProps.width&&t===this.animationProps.height||this.setNeedsRedraw("drawing buffer resized"),n!==this.animationProps.aspect&&this.setNeedsRedraw("drawing buffer aspect changed"),this.animationProps.width=e,this.animationProps.height=t,this.animationProps.aspect=n,this.animationProps.needsRedraw=this.needsRedraw,this.animationProps.engineTime=Date.now()-this.animationProps.startTime,this.timeline&&this.timeline.update(this.animationProps.engineTime),this.animationProps.tick=Math.floor(this.animationProps.time/1e3*60),this.animationProps.tock++,this.animationProps.time=this.timeline?this.timeline.getTime():this.animationProps.engineTime}async _initDevice(){if(this.device=await this.props.device,!this.device)throw new Error("No device provided");this.canvas=this.device.getDefaultCanvasContext().canvas||null}_createInfoDiv(){if(this.canvas&&this.props.onAddHTML){const e=document.createElement("div");document.body.appendChild(e),e.style.position="relative";const t=document.createElement("div");t.style.position="absolute",t.style.left="10px",t.style.bottom="10px",t.style.width="300px",t.style.background="white",this.canvas instanceof HTMLCanvasElement&&e.appendChild(this.canvas),e.appendChild(t);const n=this.props.onAddHTML(t);n&&(t.innerHTML=n)}}_getSizeAndAspect(){var e,t;if(!this.device)return{width:1,height:1,aspect:1};const[n,r]=(null==(e=this.device)?void 0:e.getDefaultCanvasContext().getDevicePixelSize())||[1,1];let i=1;const s=null==(t=this.device)?void 0:t.getDefaultCanvasContext().canvas;return s&&s.clientHeight?i=s.clientWidth/s.clientHeight:n>0&&r>0&&(i=n/r),{width:n,height:r,aspect:i}}_resizeViewport(){this.props.autoResizeViewport&&this.device.gl&&this.device.gl.viewport(0,0,this.device.gl.drawingBufferWidth,this.device.gl.drawingBufferHeight)}_beginFrameTimers(){this.frameRate.timeEnd(),this.frameRate.timeStart(),this.cpuTime.timeStart()}_endFrameTimers(){this.cpuTime.timeEnd()}_startEventHandling(){this.canvas&&(this.canvas.addEventListener("mousemove",this._onMousemove.bind(this)),this.canvas.addEventListener("mouseleave",this._onMouseleave.bind(this)))}_onMousemove(e){e instanceof MouseEvent&&(this._getAnimationProps()._mousePosition=[e.offsetX,e.offsetY])}_onMouseleave(e){this._getAnimationProps()._mousePosition=null}};r(wu,"defaultAnimationLoopProps",{device:null,onAddHTML:()=>"",onInitialize:async()=>null,onRender:()=>{},onFinalize:()=>{},onError:e=>{},stats:di.stats.get("animation-loop-"+yu++),autoResizeViewport:!1});let xu=wu;const Eu={};function Tu(e="id"){return Eu[e]=Eu[e]||1,`${e}-${Eu[e]++}`}class Su{constructor(e){if(r(this,"id"),r(this,"userData",{}),r(this,"topology"),r(this,"bufferLayout",[]),r(this,"vertexCount"),r(this,"indices"),r(this,"attributes"),this.id=e.id||Tu("geometry"),this.topology=e.topology,this.indices=e.indices||null,this.attributes=e.attributes,this.vertexCount=e.vertexCount,this.bufferLayout=e.bufferLayout||[],this.indices&&!(this.indices.usage&Br.INDEX))throw new Error("Index buffer must have INDEX usage")}destroy(){var e;null==(e=this.indices)||e.destroy();for(const t of Object.values(this.attributes))t.destroy()}getVertexCount(){return this.vertexCount}getAttributes(){return this.attributes}getIndexes(){return this.indices||null}_calculateVertexCount(e){return e.byteLength/12}}const Cu=class e{constructor(e){r(this,"device"),r(this,"cachingEnabled"),r(this,"destroyPolicy"),r(this,"debug"),r(this,"_hashCounter",0),r(this,"_hashes",{}),r(this,"_renderPipelineCache",{}),r(this,"_computePipelineCache",{}),this.device=e,this.cachingEnabled=e.props._cachePipelines,this.destroyPolicy=e.props._cacheDestroyPolicy,this.debug=e.props.debugFactories}static getDefaultPipelineFactory(t){return t._lumaData.defaultPipelineFactory=t._lumaData.defaultPipelineFactory||new e(t),t._lumaData.defaultPipelineFactory}get[Symbol.toStringTag](){return"PipelineFactory"}toString(){return`PipelineFactory(${this.device.id})`}createRenderPipeline(e){var t;if(!this.cachingEnabled)return this.device.createRenderPipeline(e);const n={...Oi.defaultProps,...e},r=this._renderPipelineCache,i=this._hashRenderPipeline(n);let s=null==(t=r[i])?void 0:t.pipeline;return s?(r[i].useCount++,this.debug&&Pr.log(3,`${this}: ${r[i].pipeline} reused, count=${r[i].useCount}, (id=${e.id})`)()):(s=this.device.createRenderPipeline({...n,id:n.id?`${n.id}-cached`:Tu("unnamed-cached")}),s.hash=i,r[i]={pipeline:s,useCount:1},this.debug&&Pr.log(3,`${this}: ${s} created, count=${r[i].useCount}`)()),s}createComputePipeline(e){var t;if(!this.cachingEnabled)return this.device.createComputePipeline(e);const n={...Gi.defaultProps,...e},r=this._computePipelineCache,i=this._hashComputePipeline(n);let s=null==(t=r[i])?void 0:t.pipeline;return s?(r[i].useCount++,this.debug&&Pr.log(3,`${this}: ${r[i].pipeline} reused, count=${r[i].useCount}, (id=${e.id})`)()):(s=this.device.createComputePipeline({...n,id:n.id?`${n.id}-cached`:void 0}),s.hash=i,r[i]={pipeline:s,useCount:1},this.debug&&Pr.log(3,`${this}: ${s} created, count=${r[i].useCount}`)()),s}release(e){if(!this.cachingEnabled)return void e.destroy();const t=this._getCache(e),n=e.hash;t[n].useCount--,0===t[n].useCount?(this._destroyPipeline(e),this.debug&&Pr.log(3,`${this}: ${e} released and destroyed`)()):t[n].useCount<0?(Pr.error(`${this}: ${e} released, useCount < 0, resetting`)(),t[n].useCount=0):this.debug&&Pr.log(3,`${this}: ${e} released, count=${t[n].useCount}`)()}_destroyPipeline(e){const t=this._getCache(e);switch(this.destroyPolicy){case"never":return!1;case"unused":return delete t[e.hash],e.destroy(),!0}}_getCache(e){let t;if(e instanceof Gi&&(t=this._computePipelineCache),e instanceof Oi&&(t=this._renderPipelineCache),!t)throw new Error(`${this}`);if(!t[e.hash])throw new Error(`${this}: ${e} matched incorrect entry`);return t}_hashComputePipeline(e){const{type:t}=this.device;return`${t}/C/${this._getHash(e.shader.source)}`}_hashRenderPipeline(e){const t=e.vs?this._getHash(e.vs.source):0,n=e.fs?this._getHash(e.fs.source):0,r=this._getHash(JSON.stringify(e.bufferLayout)),{type:i}=this.device;if("webgl"===i)return`${i}/R/${t}/${n}V-BL${r}`;{const s=this._getHash(JSON.stringify(e.parameters));return`${i}/R/${t}/${n}V-T${e.topology}P${s}BL${r}`}}_getHash(e){return void 0===this._hashes[e]&&(this._hashes[e]=this._hashCounter++),this._hashes[e]}};r(Cu,"defaultProps",{...Oi.defaultProps});let ku=Cu;const Ru=class e{constructor(e){r(this,"device"),r(this,"cachingEnabled"),r(this,"destroyPolicy"),r(this,"debug"),r(this,"_cache",{}),this.device=e,this.cachingEnabled=e.props._cacheShaders,this.destroyPolicy=e.props._cacheDestroyPolicy,this.debug=!0}static getDefaultShaderFactory(t){var n;return(n=t._lumaData).defaultShaderFactory||(n.defaultShaderFactory=new e(t)),t._lumaData.defaultShaderFactory}get[Symbol.toStringTag](){return"ShaderFactory"}toString(){return`${this[Symbol.toStringTag]}(${this.device.id})`}createShader(e){if(!this.cachingEnabled)return this.device.createShader(e);const t=this._hashShader(e);let n=this._cache[t];if(n)n.useCount++,this.debug&&Pr.log(3,`${this}: Reusing shader ${n.shader.id} count=${n.useCount}`)();else{const r=this.device.createShader({...e,id:e.id?`${e.id}-cached`:void 0});this._cache[t]=n={shader:r,useCount:1},this.debug&&Pr.log(3,`${this}: Created new shader ${r.id}`)()}return n.shader}release(e){if(!this.cachingEnabled)return void e.destroy();const t=this._hashShader(e),n=this._cache[t];if(n)if(n.useCount--,0===n.useCount)"unused"===this.destroyPolicy&&(delete this._cache[t],n.shader.destroy(),this.debug&&Pr.log(3,`${this}: Releasing shader ${e.id}, destroyed`)());else{if(n.useCount<0)throw new Error(`ShaderFactory: Shader ${e.id} released too many times`);this.debug&&Pr.log(3,`${this}: Releasing shader ${e.id} count=${n.useCount}`)()}}_hashShader(e){return`${e.stage}:${e.source}`}};r(Ru,"defaultProps",{...Mi.defaultProps});let Pu=Ru,Iu=null,Mu=null;function Lu(e,t,n){if(e===t)return!0;if(!n||!e||!t)return!1;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;rt.name===e)||null}getAttributeNamesForBuffer(e){var t;return e.attributes?null==(t=e.attributes)?void 0:t.map(e=>e.attribute):[e.name]}mergeBufferLayouts(e,t){const n=[...e];for(const r of t){const e=n.findIndex(e=>e.name===r.name);e<0?n.push(r):n[e]=r}return n}getBufferIndex(e){const t=this.bufferLayouts.findIndex(t=>t.name===e);return-1===t&&Pr.warn(`BufferLayout: Missing buffer for "${e}".`)(),t}}function Bu(e){const t={bindings:{},uniforms:{}};return Object.keys(e).forEach(n=>{const r=e[n];var i;!function(e){return function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}(e)||function(e){return!!Array.isArray(e)&&(0===e.length||"number"==typeof e[0])}(e)}(i=r)&&"number"!=typeof i&&"boolean"!=typeof i?t.bindings[n]=r:t.uniforms[n]=r}),t}class Du{constructor(e,t){r(this,"options",{disableWarnings:!1}),r(this,"modules"),r(this,"moduleUniforms"),r(this,"moduleBindings"),Object.assign(this.options,t);const n=Ar(Object.values(e).filter(e=>e.dependencies));for(const r of n)e[r.name]=r;Pr.log(1,"Creating ShaderInputs with modules",Object.keys(e))(),this.modules=e,this.moduleUniforms={},this.moduleBindings={};for(const[r,i]of Object.entries(e))this._addModule(i),i.name&&r!==i.name&&!this.options.disableWarnings&&Pr.warn(`Module name: ${r} vs ${i.name}`)()}destroy(){}setProps(e){var t;for(const n of Object.keys(e)){const r=n,i=e[r]||{},s=this.modules[r];if(!s){this.options.disableWarnings||Pr.warn(`Module ${n} not found`)();continue}const o=this.moduleUniforms[r],a=this.moduleBindings[r],A=(null==(t=s.getUniforms)?void 0:t.call(s,i,o))||i,{uniforms:l,bindings:c}=Bu(A);this.moduleUniforms[r]={...o,...l},this.moduleBindings[r]={...a,...c}}}getModules(){return Object.values(this.modules)}getUniformValues(){return this.moduleUniforms}getBindingValues(){const e={};for(const t of Object.values(this.moduleBindings))Object.assign(e,t);return e}getDebugTable(){var e;const t={};for(const[n,r]of Object.entries(this.moduleUniforms))for(const[i,s]of Object.entries(r))t[`${n}.${i}`]={type:null==(e=this.modules[n].uniformTypes)?void 0:e[i],value:String(s)};return t}_addModule(e){const t=e.name;this.moduleUniforms[t]=e.defaultUniforms||{},this.moduleBindings[t]={}}}const Ou=["+X","-X","+Y","-Y","+Z","-Z"],Fu=["+X","-X","+Y","-Y","+Z","-Z"],Uu=class e{constructor(t,n){r(this,"device"),r(this,"id"),r(this,"props"),r(this,"texture"),r(this,"sampler"),r(this,"view"),r(this,"ready"),r(this,"isReady",!1),r(this,"destroyed",!1),r(this,"resolveReady",()=>{}),r(this,"rejectReady",()=>{}),this.device=t;const i=Tu("async-texture");this.props={...e.defaultProps,id:i,...n},this.id=this.props.id,"string"==typeof(null==(n={...n})?void 0:n.data)&&"2d"===n.dimension&&(n.data=async function(e){const t=new Image;return t.crossOrigin="anonymous",t.src=e.startsWith("http")?e:""+e,await t.decode(),await createImageBitmap(t)}(n.data)),n.mipmaps&&(n.mipLevels="auto"),this.ready=new Promise((e,t)=>{this.resolveReady=()=>{this.isReady=!0,e()},this.rejectReady=t}),this.initAsync(n)}get[Symbol.toStringTag](){return"AsyncTexture"}toString(){return`AsyncTexture:"${this.id}"(${this.isReady?"ready":"loading"})`}async initAsync(e){const t=e.data,n=await Gu(t).then(void 0,this.rejectReady);if(this.destroyed)return;const r=this.props.width&&this.props.height?{width:this.props.width,height:this.props.height}:this.getTextureDataSize(n);if(!r)throw new Error("Texture size could not be determined");const i={...r,...e,data:void 0,mipLevels:1},s=this.device.getMipLevelCount(i.width,i.height);if(i.mipLevels="auto"===this.props.mipLevels?s:Math.min(s,this.props.mipLevels),this.texture=this.device.createTexture(i),this.sampler=this.texture.sampler,this.view=this.texture.view,e.data)switch(this.props.dimension){case"1d":this._setTexture1DData(this.texture,n);break;case"2d":this._setTexture2DData(n);break;case"3d":this._setTexture3DData(this.texture,n);break;case"2d-array":this._setTextureArrayData(this.texture,n);break;case"cube":this._setTextureCubeData(this.texture,n);break;case"cube-array":this._setTextureCubeArrayData(this.texture,n)}this.props.mipmaps&&this.generateMipmaps(),Pr.info(1,`${this} loaded`),this.resolveReady()}destroy(){this.texture&&(this.texture.destroy(),this.texture=null),this.destroyed=!0}generateMipmaps(){this.texture.generateMipmapsWebGL()}setSampler(e={}){this.texture.setSampler(e instanceof xi?e:this.device.createSampler(e))}resize(e){if(!this.isReady)throw new Error("Cannot resize texture before it is ready");if(e.width===this.texture.width&&e.height===this.texture.height)return!1;if(this.texture){const t=this.texture;this.texture=t.clone(e),t.destroy()}return!0}isTextureLevelData(e){const t=null==e?void 0:e.data;return ArrayBuffer.isView(t)}getTextureDataSize(e){if(!e)return null;if(ArrayBuffer.isView(e))return null;if(Array.isArray(e))return this.getTextureDataSize(e[0]);if(this.device.isExternalImage(e))return this.device.getExternalImageSize(e);if(e&&"object"==typeof e&&e.constructor===Object){const t=Object.values(e)[0];return{width:t.width,height:t.height}}throw new Error("texture size deduction failed")}getCubeFaceDepth(e){switch(e){case"+X":return 0;case"-X":return 1;case"+Y":return 2;case"-Y":return 3;case"+Z":return 4;case"-Z":return 5;default:throw new Error(e)}}setTextureData(e){}_setTexture1DData(e,t){throw new Error("setTexture1DData not supported in WebGL.")}_setTexture2DData(e,t=0){if(!this.texture)throw new Error("Texture not initialized");const n=this._normalizeTextureData(e);n.length>1&&!1!==this.props.mipmaps&&Pr.warn(`Texture ${this.id} mipmap and multiple LODs.`)();for(let r=0;r1&&!1!==this.props.mipmaps&&Pr.warn(`${this.id} has mipmap and multiple LODs.`)();const i=Ou.indexOf(n);this._setTexture2DData(t,i)}_normalizeTextureData(e){const t=this.texture;let n;return n=ArrayBuffer.isView(e)?[{data:e,width:t.width,height:t.height}]:Array.isArray(e)?e:[e],n}};r(Uu,"defaultProps",{...Si.defaultProps,data:null,mipmaps:!1});let ju=Uu;async function Gu(e){if(e=await e,Array.isArray(e))return await Promise.all(e.map(Gu));if(e&&"object"==typeof e&&e.constructor===Object){const t=e,n=await Promise.all(Object.values(t)),r=Object.keys(t),i={};for(let e=0;e[e.name,e]))||[]),l=n.shaderInputs||new Du(A,{disableWarnings:this.props.disableWarnings});this.setShaderInputs(l);const c=function(e){return{type:e.type,shaderLanguage:e.info.shadingLanguage,shaderLanguageVersion:e.info.shadingLanguageVersion,gpu:e.info.gpu,features:e.features}}(t),u=((null==(s=this.props.modules)?void 0:s.length)>0?this.props.modules:null==(o=this.shaderInputs)?void 0:o.getModules())||[];if("webgpu"===this.device.type&&this.props.source){const{source:e,getUniforms:t}=this.props.shaderAssembler.assembleWGSLShader({platformInfo:c,...this.props,modules:u});this.source=e,this._getModuleUniforms=t,(a=this.props).shaderLayout||(a.shaderLayout=function(e){var t;const n={attributes:[],bindings:[]};let r;try{r=function(e){try{return new Ca(e)}catch(t){if(t instanceof Error)throw t;let e="WGSL parse error";throw"object"==typeof t&&(null==t?void 0:t.message)&&(e+=`: ${t.message} `),"object"==typeof t&&(null==t?void 0:t.token)&&(e+=t.token.line||""),new Error(e,{cause:t})}}(e)}catch(o){return Pr.error(o.message)(),n}for(const a of r.uniforms){const e=[];for(const n of(null==(t=a.type)?void 0:t.members)||[])e.push({name:n.name,type:ka(n.type)});n.bindings.push({type:"uniform",name:a.name,group:a.group,location:a.binding,members:e})}for(const a of r.textures)n.bindings.push({type:"texture",name:a.name,group:a.group,location:a.binding});for(const a of r.samplers)n.bindings.push({type:"sampler",name:a.name,group:a.group,location:a.binding});const i=r.entry.vertex[0],s=(null==i?void 0:i.inputs.length)||0;for(let a=0;athis._lastDrawTimestamp&&this.setNeedsRedraw("contents of bound textures or buffers updated");const e=this._needsRedraw;return this._needsRedraw=!1,e}setNeedsRedraw(e){this._needsRedraw||(this._needsRedraw=e)}predraw(){this.updateShaderInputs(),this.pipeline=this._updatePipeline()}draw(e){const t=this._areBindingsLoading();if(t)return Pr.info(2,`>>> DRAWING ABORTED ${this.id}: ${t} not loaded`)(),!1;try{e.pushDebugGroup(`${this}.predraw(${e})`),this.predraw()}finally{e.popDebugGroup()}let n;try{e.pushDebugGroup(`${this}.draw(${e})`),this._logDrawCallStart(),this.pipeline=this._updatePipeline();const t=this._getBindings();this.pipeline.setBindings(t,{disableWarnings:this.props.disableWarnings});const{indexBuffer:r}=this.vertexArray,i=r?r.byteLength/("uint32"===r.indexType?4:2):void 0;n=this.pipeline.draw({renderPass:e,vertexArray:this.vertexArray,isInstanced:this.isInstanced,vertexCount:this.vertexCount,instanceCount:this.instanceCount,indexCount:i,transformFeedback:this.transformFeedback||void 0,parameters:this.parameters,topology:this.topology})}finally{e.popDebugGroup(),this._logDrawCallEnd()}return this._logFramebuffer(e),n?(this._lastDrawTimestamp=this.device.timestamp,this._needsRedraw=!1):this._needsRedraw="waiting for resource initialization",n}setGeometry(e){var t;null==(t=this._gpuGeometry)||t.destroy();const n=e&&function(e,t){if(t instanceof Su)return t;const n=function(e,t){if(!t.indices)return;const n=t.indices.value;return e.createBuffer({usage:Br.INDEX,data:n})}(e,t),{attributes:r,bufferLayout:i}=function(e,t){const n=[],r={};for(const[i,s]of Object.entries(t.attributes)){let t=i;switch(i){case"POSITION":t="positions";break;case"NORMAL":t="normals";break;case"TEXCOORD_0":t="texCoords";break;case"COLOR_0":t="colors"}if(s){r[t]=e.createBuffer({data:s.value,id:`${i}-buffer`});const{value:o,size:a,normalized:A}=s;n.push({name:t,format:zr(o,a,A)})}}return{attributes:r,bufferLayout:n,vertexCount:t._calculateVertexCount(t.attributes,t.indices)}}(e,t);return new Su({topology:t.topology||"triangle-list",bufferLayout:i,vertexCount:t.vertexCount,indices:n,attributes:r})}(this.device,e);if(n){this.setTopology(n.topology||"triangle-list");const e=new Nu(this.bufferLayout);this.bufferLayout=e.mergeBufferLayouts(n.bufferLayout,this.bufferLayout),this.vertexArray&&this._setGeometryAttributes(n)}this._gpuGeometry=n}setTopology(e){e!==this.topology&&(this.topology=e,this._setPipelineNeedsUpdate("topology"))}setBufferLayout(e){const t=new Nu(this.bufferLayout);this.bufferLayout=this._gpuGeometry?t.mergeBufferLayouts(e,this._gpuGeometry.bufferLayout):e,this._setPipelineNeedsUpdate("bufferLayout"),this.pipeline=this._updatePipeline(),this.vertexArray=this.device.createVertexArray({shaderLayout:this.pipeline.shaderLayout,bufferLayout:this.pipeline.bufferLayout}),this._gpuGeometry&&this._setGeometryAttributes(this._gpuGeometry)}setParameters(e){Lu(e,this.parameters,2)||(this.parameters=e,this._setPipelineNeedsUpdate("parameters"))}setInstanceCount(e){this.instanceCount=e,void 0===this.isInstanced&&e>0&&(this.isInstanced=!0),this.setNeedsRedraw("instanceCount")}setVertexCount(e){this.vertexCount=e,this.setNeedsRedraw("vertexCount")}setShaderInputs(e){this.shaderInputs=e,this._uniformStore=new ls(this.shaderInputs.modules);for(const[t,n]of Object.entries(this.shaderInputs.modules))if(Wu(n)){const e=this._uniformStore.getManagedUniformBuffer(this.device,t);this.bindings[`${t}Uniforms`]=e}this.setNeedsRedraw("shaderInputs")}updateShaderInputs(){this._uniformStore.setUniforms(this.shaderInputs.getUniformValues()),this.setBindings(this.shaderInputs.getBindingValues()),this.setNeedsRedraw("shaderInputs")}setBindings(e){Object.assign(this.bindings,e),this.setNeedsRedraw("bindings")}setTransformFeedback(e){this.transformFeedback=e,this.setNeedsRedraw("transformFeedback")}setIndexBuffer(e){this.vertexArray.setIndexBuffer(e),this.setNeedsRedraw("indexBuffer")}setAttributes(e,t){const n=(null==t?void 0:t.disableWarnings)??this.props.disableWarnings;e.indices&&Pr.warn(`Model:${this.id} setAttributes() - indexBuffer should be set using setIndexBuffer()`)(),this.bufferLayout=function(e,t){const n=Object.fromEntries(e.attributes.map(e=>[e.name,e.location])),r=t.slice();return r.sort((e,t)=>{const r=e.attributes?e.attributes.map(e=>e.attribute):[e.name],i=t.attributes?t.attributes.map(e=>e.attribute):[t.name];return Math.min(...r.map(e=>n[e]))-Math.min(...i.map(e=>n[e]))}),r}(this.pipeline.shaderLayout,this.bufferLayout);const r=new Nu(this.bufferLayout);for(const[i,s]of Object.entries(e)){const e=r.getBufferLayout(i);if(!e){n||Pr.warn(`Model(${this.id}): Missing layout for buffer "${i}".`)();continue}const t=r.getAttributeNamesForBuffer(e);let o=!1;for(const n of t){const e=this._attributeInfos[n];if(e){const t="webgpu"===this.device.type?r.getBufferIndex(e.bufferName):e.location;this.vertexArray.setBuffer(t,s),o=!0}}o||n||Pr.warn(`Model(${this.id}): Ignoring buffer "${s.id}" for unknown attribute "${i}"`)()}this.setNeedsRedraw("attributes")}setConstantAttributes(e,t){for(const[n,r]of Object.entries(e)){const e=this._attributeInfos[n];e?this.vertexArray.setConstantWebGL(e.location,r):((null==t?void 0:t.disableWarnings)??this.props.disableWarnings)||Pr.warn(`Model "${this.id}: Ignoring constant supplied for unknown attribute "${n}"`)()}this.setNeedsRedraw("constants")}_areBindingsLoading(){for(const e of Object.values(this.bindings))if(e instanceof ju&&!e.isReady)return e.id;return!1}_getBindings(){const e={};for(const[t,n]of Object.entries(this.bindings))n instanceof ju?n.isReady&&(e[t]=n.texture):e[t]=n;return e}_getBindingsUpdateTimestamp(){let e=0;for(const t of Object.values(this.bindings))t instanceof ki?e=Math.max(e,t.texture.updateTimestamp):t instanceof Br||t instanceof Si?e=Math.max(e,t.updateTimestamp):t instanceof ju?e=t.texture?Math.max(e,t.texture.updateTimestamp):1/0:t instanceof xi||(e=Math.max(e,t.buffer.updateTimestamp));return e}_setGeometryAttributes(e){const t={...e.attributes};for(const[n]of Object.entries(t))this.pipeline.shaderLayout.attributes.find(e=>e.name===n)||"positions"===n||delete t[n];this.vertexCount=e.vertexCount,this.setIndexBuffer(e.indices||null),this.setAttributes(e.attributes,{disableWarnings:!0}),this.setAttributes(t,{disableWarnings:this.props.disableWarnings}),this.setNeedsRedraw("geometry attributes")}_setPipelineNeedsUpdate(e){this._pipelineNeedsUpdate||(this._pipelineNeedsUpdate=e),this.setNeedsRedraw(e)}_updatePipeline(){if(this._pipelineNeedsUpdate){let e=null,t=null;this.pipeline&&(Pr.log(1,`Model ${this.id}: Recreating pipeline because "${this._pipelineNeedsUpdate}".`)(),e=this.pipeline.vs,t=this.pipeline.fs),this._pipelineNeedsUpdate=!1;const n=this.shaderFactory.createShader({id:`${this.id}-vertex`,stage:"vertex",source:this.source||this.vs,debugShaders:this.props.debugShaders});let r=null;this.source?r=n:this.fs&&(r=this.shaderFactory.createShader({id:`${this.id}-fragment`,stage:"fragment",source:this.source||this.fs,debugShaders:this.props.debugShaders})),this.pipeline=this.pipelineFactory.createRenderPipeline({...this.props,bufferLayout:this.bufferLayout,topology:this.topology,parameters:this.parameters,bindings:this._getBindings(),vs:n,fs:r}),this._attributeInfos=qi(this.pipeline.shaderLayout,this.bufferLayout),e&&this.shaderFactory.release(e),t&&this.shaderFactory.release(t)}return this.pipeline}_logDrawCallStart(){const e=Pr.level>3?0:1e4;Pr.level<2||Date.now()-this._lastLogTime>> DRAWING MODEL ${this.id}`,{collapsed:Pr.level<=2})())}_logDrawCallEnd(){if(this._logOpen){const e=function(e){var t;const n={},r="Values";if(0===e.attributes.length&&!(null==(t=e.varyings)?void 0:t.length))return{"No attributes or varyings":{[r]:"N/A"}};for(const i of e.attributes)i&&(n[`in ${i.location} ${i.name}: ${i.type}`]={[r]:i.stepMode||"vertex"});for(const i of e.varyings||[])n[`out ${i.location} ${i.name}`]={[r]:JSON.stringify(i)};return n}(this.pipeline.shaderLayout,this.id);Pr.table(2,e)();const t=this.shaderInputs.getDebugTable();Pr.table(2,t)();const n=this._getAttributeDebugTable();Pr.table(2,this._attributeInfos)(),Pr.table(2,n)(),Pr.groupEnd(2)(),this._logOpen=!1}}_logFramebuffer(e){const t=this.device.props.debugFramebuffers;if(this._drawCount++,!t)return;const n=e.props.framebuffer;n&&function(e,{id:t,minimap:n,opaque:r,top:i="0",left:s="0",rgbaScale:o=1}){Iu||(Iu=document.createElement("canvas"),Iu.id=t,Iu.title=t,Iu.style.zIndex="100",Iu.style.position="absolute",Iu.style.top=i,Iu.style.left=s,Iu.style.border="blue 5px solid",Iu.style.transform="scaleY(-1)",document.body.appendChild(Iu),Mu=Iu.getContext("2d")),Iu.width===e.width&&Iu.height===e.height||(Iu.width=e.width/2,Iu.height=e.height/2,Iu.style.width="400px",Iu.style.height="400px");const a=e.device.readPixelsToArrayWebGL(e),A=null==Mu?void 0:Mu.createImageData(e.width,e.height);if(A){const e=0;for(let t=0;t=1&&(n=Math.min(n,e.length/t))}return n}}const Qu={blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"zero",blendAlphaOperation:"add",blendAlphaSrcFactor:"constant",blendAlphaDstFactor:"zero"};class Yu extends Qc{constructor(){super(...arguments),this._colorEncoderState=null}render(e){return"pickingFBO"in e?this._drawPickingBuffer(e):super.render(e)}_drawPickingBuffer({layers:e,layerFilter:t,views:n,viewports:r,onViewportActive:i,pickingFBO:s,deviceRect:{x:o,y:a,width:A,height:l},cullRect:c,effects:u,pass:h="picking",pickZ:d,shaderModuleProps:f}){this.pickZ=d;const p=this._resetColorEncoder(d),g=[o,a,A,l],m=super.render({target:s,layers:e,layerFilter:t,views:n,viewports:r,onViewportActive:i,cullRect:c,effects:null==u?void 0:u.filter(e=>e.useInPicking),pass:h,isPicking:!0,shaderModuleProps:f,clearColor:[0,0,0,0],colorMask:15,scissorRect:g});return this._colorEncoderState=null,{decodePickingColor:p&&qu.bind(null,p),stats:m}}shouldDrawLayer(e){const{pickable:t,operation:n}=e.props;return t&&n.includes("draw")||n.includes("terrain")||n.includes("mask")}getShaderModuleProps(e,t,n){return{picking:{isActive:1,isAttribute:this.pickZ},lighting:{enabled:!1}}}getLayerParameters(e,t,n){const r={...e.props.parameters},{pickable:i,operation:s}=e.props;return!this._colorEncoderState||s.includes("terrain")?r.blend=!1:i&&s.includes("draw")&&(Object.assign(r,Qu),r.blend=!0,r.blendColor=function(e,t,n){const{byLayer:r,byAlpha:i}=e;let s,o=r.get(t);return o?(o.viewports.push(n),s=o.a):(s=r.size+1,s<=255?(o={a:s,layer:t,viewports:[n]},r.set(t,o),i[s]=o):(Gn.warn("Too many pickable layers, only picking the first 255")(),s=0)),[0,0,0,s/255]}(this._colorEncoderState,e,n)),r}_resetColorEncoder(e){return this._colorEncoderState=e?null:{byLayer:new Map,byAlpha:[]},this._colorEncoderState}}function qu(e,t){const n=e.byAlpha[t[3]];return n&&{pickedLayer:n.layer,pickedViewports:n.viewports,pickedObjectIndex:n.layer.decodePickingColor(t)}}const Ku=Symbol.for("component"),Zu=Symbol.for("propTypes"),Ju=Symbol.for("deprecatedProps"),eh=Symbol.for("asyncPropDefaults"),th=Symbol.for("asyncPropOriginal"),nh=Symbol.for("asyncPropResolved");function rh(e,t=()=>!0){return Array.isArray(e)?ih(e,t,[]):t(e)?[e]:[]}function ih(e,t,n){let r=-1;for(;++r0}delete(){}getData(){return this.isLoaded?this._error?Promise.reject(this._error):this._content:this._loader.then(()=>this.getData())}setData(e,t){if(e===this._data&&!t)return;this._data=e;const n=++this._loadCount;let r=e;"string"==typeof e&&(r=xn(e)),r instanceof Promise?(this.isLoaded=!1,this._loader=r.then(e=>{this._loadCount===n&&(this.isLoaded=!0,this._error=void 0,this._content=e)}).catch(e=>{this._loadCount===n&&(this.isLoaded=!0,this._error=e||!0)})):(this.isLoaded=!0,this._error=void 0,this._content=e);for(const i of this._subscribers)i.onChange(this.getData())}}class ah{constructor(e){var t;this.protocol=e.protocol||"resource://",this._context={device:e.device,gl:null==(t=e.device)?void 0:t.gl,resourceManager:this},this._resources={},this._consumers={},this._pruneRequest=null}contains(e){return!!e.startsWith(this.protocol)||e in this._resources}add({resourceId:e,data:t,forceUpdate:n=!1,persistent:r=!0}){let i=this._resources[e];i?i.setData(t,n):(i=new oh(e,t,this._context),this._resources[e]=i),i.persistent=r}remove(e){const t=this._resources[e];t&&(t.delete(),delete this._resources[e])}unsubscribe({consumerId:e}){const t=this._consumers[e];if(t){for(const e in t){const n=t[e],r=this._resources[n.resourceId];r&&r.unsubscribe(n)}delete this._consumers[e],this.prune()}}subscribe({resourceId:e,onChange:t,consumerId:n,requestId:r="default"}){const{_resources:i,protocol:s}=this;e.startsWith(s)&&(i[e=e.replace(s,"")]||this.add({resourceId:e,data:null,persistent:!1}));const o=i[e];if(this._track(n,r,o,t),o)return o.getData()}prune(){this._pruneRequest||(this._pruneRequest=setTimeout(()=>this._prune(),0))}finalize(){for(const e in this._resources)this._resources[e].delete()}_track(e,t,n,r){const i=this._consumers,s=i[e]=i[e]||{};let o=s[t];const a=o&&o.resourceId&&this._resources[o.resourceId];a&&(a.unsubscribe(o),this.prune()),n&&(o?(o.onChange=r,o.resourceId=n.id):o={onChange:r,resourceId:n.id},s[t]=o,n.subscribe(o))}_prune(){this._pruneRequest=null;for(const e of Object.keys(this._resources)){const t=this._resources[e];t.persistent||t.inUse()||(t.delete(),delete this._resources[e])}}}class Ah{constructor(e,t){var n;this._lastRenderedLayers=[],this._needsRedraw=!1,this._needsUpdate=!1,this._nextLayers=null,this._debug=!1,this._defaultShaderModulesChanged=!1,this.activateViewport=e=>{Wn("layerManager.activateViewport",this,e),e&&(this.context.viewport=e)};const{deck:r,stats:i,viewport:s,timeline:o}=t||{};this.layers=[],this.resourceManager=new ah({device:e,protocol:"deck://"}),this.context={mousePosition:null,userData:{},layerManager:this,device:e,gl:null==e?void 0:e.gl,deck:r,shaderAssembler:Oc((null==(n=null==e?void 0:e.info)?void 0:n.shadingLanguage)||"glsl"),defaultShaderModules:[LA],renderPass:void 0,stats:i||new kt({id:"deck.gl"}),viewport:s||new du({id:"DEFAULT-INITIAL-VIEWPORT"}),timeline:o||new vu,resourceManager:this.resourceManager,onError:void 0},Object.seal(this)}finalize(){this.resourceManager.finalize();for(const e of this.layers)this._finalizeLayer(e)}needsRedraw(e={clearRedrawFlags:!1}){let t=this._needsRedraw;e.clearRedrawFlags&&(this._needsRedraw=!1);for(const n of this.layers){const r=n.getNeedsRedraw(e);t=t||r}return t}needsUpdate(){return this._nextLayers&&this._nextLayers!==this._lastRenderedLayers?"layers changed":this._defaultShaderModulesChanged?"shader modules changed":this._needsUpdate}setNeedsRedraw(e){this._needsRedraw=this._needsRedraw||e}setNeedsUpdate(e){this._needsUpdate=this._needsUpdate||e}getLayers({layerIds:e}={}){return e?this.layers.filter(t=>e.find(e=>0===t.id.indexOf(e))):this.layers}setProps(e){"debug"in e&&(this._debug=e.debug),"userData"in e&&(this.context.userData=e.userData),"layers"in e&&(this._nextLayers=e.layers),"onError"in e&&(this.context.onError=e.onError)}setLayers(e,t){Wn("layerManager.setLayers",this,t,e),this._lastRenderedLayers=e;const n=rh(e,Boolean);for(const r of n)r.context=this.context;this._updateLayers(this.layers,n)}updateLayers(){const e=this.needsUpdate();e&&(this.setNeedsRedraw(`updating layers: ${e}`),this.setLayers(this._nextLayers||this._lastRenderedLayers,e)),this._nextLayers=null}addDefaultShaderModule(e){const{defaultShaderModules:t}=this.context;t.find(t=>t.name===e.name)||(t.push(e),this._defaultShaderModulesChanged=!0)}removeDefaultShaderModule(e){const{defaultShaderModules:t}=this.context,n=t.findIndex(t=>t.name===e.name);n>=0&&(t.splice(n,1),this._defaultShaderModulesChanged=!0)}_handleError(e,t,n){n.raiseError(t,`${e} of ${n}`)}_updateLayers(e,t){const n={};for(const s of e)n[s.id]?Gn.warn(`Multiple old layers with same id ${s.id}`)():n[s.id]=s;if(this._defaultShaderModulesChanged){for(const t of e)t.setNeedsUpdate(),t.setChangeFlags({extensionsChanged:!0});this._defaultShaderModulesChanged=!1}const r=[];this._updateSublayersRecursively(t,n,r),this._finalizeOldLayers(n);let i=!1;for(const s of r)if(s.hasUniformTransition()){i=`Uniform transition in ${s}`;break}this._needsUpdate=i,this.layers=r}_updateSublayersRecursively(e,t,n){for(const i of e){i.context=this.context;const e=t[i.id];null===e&&Gn.warn(`Multiple new layers with same id ${i.id}`)(),t[i.id]=null;let s=null;try{this._debug&&e!==i&&i.validateProps(),e?(this._transferLayerState(e,i),this._updateLayer(i)):this._initializeLayer(i),n.push(i),s=i.isComposite?i.getSubLayers():null}catch(r){this._handleError("matching",r,i)}s&&this._updateSublayersRecursively(s,t,n)}}_finalizeOldLayers(e){for(const t in e){const n=e[t];n&&this._finalizeLayer(n)}}_initializeLayer(e){try{e._initialize(),e.lifecycle="Initialized"}catch(t){this._handleError("initialization",t,e)}}_transferLayerState(e,t){t._transferState(e),t.lifecycle="Matched. State transferred from previous layer",t!==e&&(e.lifecycle="Discarded. Awaiting garbage collection")}_updateLayer(e){try{e._update()}catch(t){this._handleError("update",t,e)}}_finalizeLayer(e){this._needsRedraw=this._needsRedraw||`finalized ${e}`,e.lifecycle="No longer matched. Awaiting garbage collection";try{e._finalize(),e.lifecycle="Finalized! Awaiting garbage collection"}catch(t){this._handleError("finalization",t,e)}}}function lh(e,t,n){if(e===t)return!0;if(!n||!e||!t)return!1;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;rt.containsPixel(e)):this._viewports}getViews(){const e={};return this.views.forEach(t=>{e[t.id]=t}),e}getView(e){return this.views.find(t=>t.id===e)}getViewState(e){const t="string"==typeof e?this.getView(e):e,n=t&&this.viewState[t.getViewStateId()]||this.viewState;return t?t.filterViewState(n):n}getViewport(e){return this._viewportMap[e]}unproject(e,t){const n=this.getViewports(),r={x:e[0],y:e[1]};for(let i=n.length-1;i>=0;--i){const s=n[i];if(s.containsPixel(r)){const n=e.slice();return n[0]-=s.x,n[1]-=s.y,s.unproject(n,t)}}return null}setProps(e){e.views&&this._setViews(e.views),e.viewState&&this._setViewState(e.viewState),("width"in e||"height"in e)&&this._setSize(e.width,e.height),this._isUpdating||this._update()}_update(){this._isUpdating=!0,this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._isUpdating=!1}_setSize(e,t){e===this.width&&t===this.height||(this.width=e,this.height=t,this.setNeedsUpdate("Size changed"))}_setViews(e){e=rh(e,Boolean),this._diffViews(e,this.views)&&this.setNeedsUpdate("views changed"),this.views=e}_setViewState(e){e?(!lh(e,this.viewState,3)&&this.setNeedsUpdate("viewState changed"),this.viewState=e):Gn.warn("missing `viewState` or `initialViewState`")()}_createController(e,t){const n=new(0,t.type)({timeline:this.timeline,eventManager:this._eventManager,onViewStateChange:this._eventCallbacks.onViewStateChange,onStateChange:this._eventCallbacks.onInteractionStateChange,makeViewport:t=>{var n;return null==(n=this.getView(e.id))?void 0:n.makeViewport({viewState:t,width:this.width,height:this.height})}});return n}_updateController(e,t,n,r){const i=e.controller;if(i&&n){const s={...t,...i,id:e.id,x:n.x,y:n.y,width:n.width,height:n.height};return r&&r.constructor===i.type||(r=this._createController(e,s)),r&&r.setProps(s),r}return null}_rebuildViewports(){const{views:e}=this,t=this.controllers;this._viewports=[],this.controllers={};let n=!1;for(let r=e.length;r--;){const i=e[r],s=this.getViewState(i),o=i.makeViewport({viewState:s,width:this.width,height:this.height});let a=t[i.id];const A=Boolean(i.controller);A&&!a&&(n=!0),!n&&A||!a||(a.finalize(),a=null),this.controllers[i.id]=this._updateController(i,s,o,a),o&&this._viewports.unshift(o)}for(const r in t){const e=t[r];e&&!this.controllers[r]&&e.finalize()}this._buildViewportMap()}_buildViewportMap(){this._viewportMap={},this._viewports.forEach(e=>{e.id&&(this._viewportMap[e.id]=this._viewportMap[e.id]||e)})}_diffViews(e,t){return e.length!==t.length||e.some((n,r)=>!e[r].equals(t[r]))}}const uh=/([0-9]+\.?[0-9]*)(%|px)/;function hh(e){switch(typeof e){case"number":return{position:e,relative:!1};case"string":const t=uh.exec(e);if(t&&t.length>=3){const e="%"===t[2],n=parseFloat(t[1]);return{position:e?n/100:n,relative:e}}default:throw new Error(`Could not parse position string ${e}`)}}function dh(e,t){return e.relative?Math.round(e.position*t):e.position}class fh{constructor(e){const{id:t,x:n=0,y:r=0,width:i="100%",height:s="100%",padding:o=null}=e;this.id=t||this.constructor.displayName||"view",this.props={...e,id:this.id},this._x=hh(n),this._y=hh(r),this._width=hh(i),this._height=hh(s),this._padding=o&&{left:hh(o.left||0),right:hh(o.right||0),top:hh(o.top||0),bottom:hh(o.bottom||0)},this.equals=this.equals.bind(this),Object.seal(this)}equals(e){return this===e||this.constructor===e.constructor&&lh(this.props,e.props,2)}clone(e){return new(0,this.constructor)({...this.props,...e})}makeViewport({width:e,height:t,viewState:n}){n=this.filterViewState(n);const r=this.getDimensions({width:e,height:t});return r.height&&r.width?new(this.getViewportType(n))({...n,...this.props,...r}):null}getViewStateId(){const{viewState:e}=this.props;return"string"==typeof e?e:(null==e?void 0:e.id)||this.id}filterViewState(e){if(this.props.viewState&&"object"==typeof this.props.viewState){if(!this.props.viewState.id)return this.props.viewState;const t={...e};for(const e in this.props.viewState)"id"!==e&&(t[e]=this.props.viewState[e]);return t}return e}getDimensions({width:e,height:t}){const n={x:dh(this._x,e),y:dh(this._y,t),width:dh(this._width,e),height:dh(this._height,t)};return this._padding&&(n.padding={left:dh(this._padding.left,e),top:dh(this._padding.top,t),right:dh(this._padding.right,e),bottom:dh(this._padding.bottom,t)}),n}get controller(){const e=this.props.controller;return e?!0===e?{type:this.ControllerType}:"function"==typeof e?{type:e}:{type:this.ControllerType,...e}:null}}class ph{constructor(e){this._inProgress=!1,this._handle=null,this.time=0,this.settings={duration:0},this._timeline=e}get inProgress(){return this._inProgress}start(e){var t,n;this.cancel(),this.settings=e,this._inProgress=!0,null==(n=(t=this.settings).onStart)||n.call(t,this)}end(){var e,t;this._inProgress&&(this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1,null==(t=(e=this.settings).onEnd)||t.call(e,this))}cancel(){var e,t;this._inProgress&&(null==(t=(e=this.settings).onInterrupt)||t.call(e,this),this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1)}update(){var e,t;if(!this._inProgress)return!1;if(null===this._handle){const{_timeline:e,settings:t}=this;this._handle=e.addChannel({delay:e.getTime(),duration:t.duration})}return this.time=this._timeline.getTime(this._handle),this._onUpdate(),null==(t=(e=this.settings).onUpdate)||t.call(e,this),this._timeline.isFinished(this._handle)&&this.end(),!0}_onUpdate(){}}const gh=()=>{},mh=e=>e;class _h{constructor(e){this._onTransitionUpdate=e=>{const{time:t,settings:{interpolator:n,startProps:r,endProps:i,duration:s,easing:o}}=e,a=o(t/s),A=n.interpolateProps(r,i,a);this.propsInTransition=this.getControllerState({...this.props,...A}).getViewportProps(),this.onViewStateChange({viewState:this.propsInTransition,oldViewState:this.props})},this.getControllerState=e.getControllerState,this.propsInTransition=null,this.transition=new ph(e.timeline),this.onViewStateChange=e.onViewStateChange||gh,this.onStateChange=e.onStateChange||gh}finalize(){this.transition.cancel()}getViewportInTransition(){return this.propsInTransition}processViewStateChange(e){let t=!1;const n=this.props;if(this.props=e,!n||this._shouldIgnoreViewportChange(n,e))return!1;if(this._isTransitionEnabled(e)){let r=n;if(this.transition.inProgress){const{interruption:e,endProps:t}=this.transition.settings;r={...n,...2===e?t:this.propsInTransition||n}}this._triggerTransition(r,e),t=!0}else this.transition.cancel();return t}updateTransition(){this.transition.update()}_isTransitionEnabled(e){const{transitionDuration:t,transitionInterpolator:n}=e;return(t>0||"auto"===t)&&Boolean(n)}_isUpdateDueToCurrentTransition(e){return!(!this.transition.inProgress||!this.propsInTransition)&&this.transition.settings.interpolator.arePropsEqual(e,this.propsInTransition)}_shouldIgnoreViewportChange(e,t){return this.transition.inProgress?3===this.transition.settings.interruption||this._isUpdateDueToCurrentTransition(t):!this._isTransitionEnabled(t)||t.transitionInterpolator.arePropsEqual(e,t)}_triggerTransition(e,t){const n=this.getControllerState(e),r=this.getControllerState(t).shortestPathFrom(n),i=t.transitionInterpolator,s=i.getDuration?i.getDuration(e,t):t.transitionDuration;if(0===s)return;const o=i.initializeProps(e,r);this.propsInTransition={};const a={duration:s,easing:t.transitionEasing||mh,interpolator:i,interruption:t.transitionInterruption||1,startProps:o.start,endProps:o.end,onStart:t.onTransitionStart,onUpdate:this._onTransitionUpdate,onInterrupt:this._onTransitionEnd(t.onTransitionInterrupt),onEnd:this._onTransitionEnd(t.onTransitionEnd)};this.transition.start(a),this.onStateChange({inTransition:!0}),this.updateTransition()}_onTransitionEnd(e){return t=>{this.propsInTransition=null,this.onStateChange({inTransition:!1,isZooming:!1,isPanning:!1,isRotating:!1}),null==e||e(t)}}}function bh(e,t){if(!e)throw new Error(t||"deck.gl: assertion failed.")}class vh{constructor(e){const{compare:t,extract:n,required:r}=e;this._propsToCompare=t,this._propsToExtract=n||t,this._requiredProps=r}arePropsEqual(e,t){for(const n of this._propsToCompare)if(!(n in e)||!(n in t)||!Na(e[n],t[n]))return!1;return!0}initializeProps(e,t){const n={},r={};for(const i of this._propsToExtract)(i in e||i in t)&&(n[i]=e[i],r[i]=t[i]);return this._checkRequiredProps(n),this._checkRequiredProps(r),{start:n,end:r}}getDuration(e,t){return t.transitionDuration}_checkRequiredProps(e){this._requiredProps&&this._requiredProps.forEach(t=>{const n=e[t];bh(Number.isFinite(n)||Array.isArray(n),`${t} is required for transition`)})}}const yh=["longitude","latitude","zoom","bearing","pitch"],wh=["longitude","latitude","zoom"];class xh extends vh{constructor(e={}){const t=Array.isArray(e)?e:e.transitionProps,n=Array.isArray(e)?{}:e;n.transitionProps=Array.isArray(t)?{compare:t,required:t}:t||{compare:yh,required:wh},super(n.transitionProps),this.opts=n}initializeProps(e,t){const n=super.initializeProps(e,t),{makeViewport:r,around:i}=this.opts;if(r&&i){const s=r(e),o=r(t),a=s.unproject(i);n.start.around=i,Object.assign(n.end,{around:o.project(a),aroundPosition:a,width:t.width,height:t.height})}return n}interpolateProps(e,t,n){const r={};for(const i of this._propsToExtract)r[i]=La(e[i]||0,t[i]||0,n);if(t.aroundPosition&&this.opts.makeViewport){const i=this.opts.makeViewport({...t,...r});Object.assign(r,i.panByPosition(t.aroundPosition,La(e.around,t.around,n)))}return r}}const Eh={transitionDuration:0},Th=e=>1-(1-e)*(1-e),Sh=["wheel"],Ch=["panstart","panmove","panend"],kh=["pinchstart","pinchmove","pinchend"],Rh=["multipanstart","multipanmove","multipanend"],Ph=["dblclick"],Ih=["keydown"],Mh={};class Lh{constructor(e){this.state={},this._events={},this._interactionState={isDragging:!1},this._customEvents=[],this._eventStartBlocked=null,this._panMove=!1,this.invertPan=!1,this.dragMode="rotate",this.inertia=0,this.scrollZoom=!0,this.dragPan=!0,this.dragRotate=!0,this.doubleClickZoom=!0,this.touchZoom=!0,this.touchRotate=!1,this.keyboard=!0,this.transitionManager=new _h({...e,getControllerState:e=>new this.ControllerState(e),onViewStateChange:this._onTransition.bind(this),onStateChange:this._setInteractionState.bind(this)}),this.handleEvent=this.handleEvent.bind(this),this.eventManager=e.eventManager,this.onViewStateChange=e.onViewStateChange||(()=>{}),this.onStateChange=e.onStateChange||(()=>{}),this.makeViewport=e.makeViewport}set events(e){this.toggleEvents(this._customEvents,!1),this.toggleEvents(e,!0),this._customEvents=e,this.props&&this.setProps(this.props)}finalize(){var e;for(const t in this._events)this._events[t]&&(null==(e=this.eventManager)||e.off(t,this.handleEvent));this.transitionManager.finalize()}handleEvent(e){this._controllerState=void 0;const t=this._eventStartBlocked;switch(e.type){case"panstart":return!t&&this._onPanStart(e);case"panmove":return this._onPan(e);case"panend":return this._onPanEnd(e);case"pinchstart":return!t&&this._onPinchStart(e);case"pinchmove":return this._onPinch(e);case"pinchend":return this._onPinchEnd(e);case"multipanstart":return!t&&this._onMultiPanStart(e);case"multipanmove":return this._onMultiPan(e);case"multipanend":return this._onMultiPanEnd(e);case"dblclick":return this._onDoubleClick(e);case"wheel":return this._onWheel(e);case"keydown":return this._onKeyDown(e);default:return!1}}get controllerState(){return this._controllerState=this._controllerState||new this.ControllerState({makeViewport:this.makeViewport,...this.props,...this.state}),this._controllerState}getCenter(e){const{x:t,y:n}=this.props,{offsetCenter:r}=e;return[r.x-t,r.y-n]}isPointInBounds(e,t){const{width:n,height:r}=this.props;if(t&&t.handled)return!1;const i=e[0]>=0&&e[0]<=n&&e[1]>=0&&e[1]<=r;return i&&t&&t.stopPropagation(),i}isFunctionKeyPressed(e){const{srcEvent:t}=e;return Boolean(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}isDragging(){return this._interactionState.isDragging||!1}blockEvents(e){const t=setTimeout(()=>{this._eventStartBlocked===t&&(this._eventStartBlocked=null)},e);this._eventStartBlocked=t}setProps(e){e.dragMode&&(this.dragMode=e.dragMode),this.props=e,"transitionInterpolator"in e||(e.transitionInterpolator=this._getTransitionProps().transitionInterpolator),this.transitionManager.processViewStateChange(e);const{inertia:t}=e;this.inertia=Number.isFinite(t)?t:!0===t?300:0;const{scrollZoom:n=!0,dragPan:r=!0,dragRotate:i=!0,doubleClickZoom:s=!0,touchZoom:o=!0,touchRotate:a=!1,keyboard:A=!0}=e,l=Boolean(this.onViewStateChange);this.toggleEvents(Sh,l&&n),this.toggleEvents(Ch,l),this.toggleEvents(kh,l&&(o||a)),this.toggleEvents(Rh,l&&a),this.toggleEvents(Ph,l&&s),this.toggleEvents(Ih,l&&A),this.scrollZoom=n,this.dragPan=r,this.dragRotate=i,this.doubleClickZoom=s,this.touchZoom=o,this.touchRotate=a,this.keyboard=A}updateTransition(){this.transitionManager.updateTransition()}toggleEvents(e,t){this.eventManager&&e.forEach(e=>{this._events[e]!==t&&(this._events[e]=t,t?this.eventManager.on(e,this.handleEvent):this.eventManager.off(e,this.handleEvent))})}updateViewport(e,t=null,n={}){const r={...e.getViewportProps(),...t},i=this.controllerState!==e;if(this.state=e.getState(),this._setInteractionState(n),i){const e=this.controllerState&&this.controllerState.getViewportProps();this.onViewStateChange&&this.onViewStateChange({viewState:r,interactionState:this._interactionState,oldViewState:e,viewId:this.props.id})}}_onTransition(e){this.onViewStateChange({...e,interactionState:this._interactionState,viewId:this.props.id})}_setInteractionState(e){Object.assign(this._interactionState,e),this.onStateChange(this._interactionState)}_onPanStart(e){const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;let n=this.isFunctionKeyPressed(e)||e.rightButton||!1;(this.invertPan||"pan"===this.dragMode)&&(n=!n);const r=this.controllerState[n?"panStart":"rotateStart"]({pos:t});return this._panMove=n,this.updateViewport(r,Eh,{isDragging:!0}),!0}_onPan(e){return!!this.isDragging()&&(this._panMove?this._onPanMove(e):this._onPanRotate(e))}_onPanEnd(e){return!!this.isDragging()&&(this._panMove?this._onPanMoveEnd(e):this._onPanRotateEnd(e))}_onPanMove(e){if(!this.dragPan)return!1;const t=this.getCenter(e),n=this.controllerState.pan({pos:t});return this.updateViewport(n,Eh,{isDragging:!0,isPanning:!0}),!0}_onPanMoveEnd(e){const{inertia:t}=this;if(this.dragPan&&t&&e.velocity){const n=this.getCenter(e),r=[n[0]+e.velocityX*t/2,n[1]+e.velocityY*t/2],i=this.controllerState.pan({pos:r}).panEnd();this.updateViewport(i,{...this._getTransitionProps(),transitionDuration:t,transitionEasing:Th},{isDragging:!1,isPanning:!0})}else{const e=this.controllerState.panEnd();this.updateViewport(e,null,{isDragging:!1,isPanning:!1})}return!0}_onPanRotate(e){if(!this.dragRotate)return!1;const t=this.getCenter(e),n=this.controllerState.rotate({pos:t});return this.updateViewport(n,Eh,{isDragging:!0,isRotating:!0}),!0}_onPanRotateEnd(e){const{inertia:t}=this;if(this.dragRotate&&t&&e.velocity){const n=this.getCenter(e),r=[n[0]+e.velocityX*t/2,n[1]+e.velocityY*t/2],i=this.controllerState.rotate({pos:r}).rotateEnd();this.updateViewport(i,{...this._getTransitionProps(),transitionDuration:t,transitionEasing:Th},{isDragging:!1,isRotating:!0})}else{const e=this.controllerState.rotateEnd();this.updateViewport(e,null,{isDragging:!1,isRotating:!1})}return!0}_onWheel(e){if(!this.scrollZoom)return!1;const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;e.srcEvent.preventDefault();const{speed:n=.01,smooth:r=!1}=!0===this.scrollZoom?{}:this.scrollZoom,{delta:i}=e;let s=2/(1+Math.exp(-Math.abs(i*n)));i<0&&0!==s&&(s=1/s);const o=r?{...this._getTransitionProps({around:t}),transitionDuration:250}:Eh,a=this.controllerState.zoom({pos:t,scale:s});return this.updateViewport(a,o,{isZooming:!0,isPanning:!0}),!0}_onMultiPanStart(e){const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;const n=this.controllerState.rotateStart({pos:t});return this.updateViewport(n,Eh,{isDragging:!0}),!0}_onMultiPan(e){if(!this.touchRotate)return!1;if(!this.isDragging())return!1;const t=this.getCenter(e);t[0]-=e.deltaX;const n=this.controllerState.rotate({pos:t});return this.updateViewport(n,Eh,{isDragging:!0,isRotating:!0}),!0}_onMultiPanEnd(e){if(!this.isDragging())return!1;const{inertia:t}=this;if(this.touchRotate&&t&&e.velocityY){const n=this.getCenter(e),r=[n[0],n[1]+=e.velocityY*t/2],i=this.controllerState.rotate({pos:r});this.updateViewport(i,{...this._getTransitionProps(),transitionDuration:t,transitionEasing:Th},{isDragging:!1,isRotating:!0}),this.blockEvents(t)}else{const e=this.controllerState.rotateEnd();this.updateViewport(e,null,{isDragging:!1,isRotating:!1})}return!0}_onPinchStart(e){const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;const n=this.controllerState.zoomStart({pos:t}).rotateStart({pos:t});return Mh._startPinchRotation=e.rotation,Mh._lastPinchEvent=e,this.updateViewport(n,Eh,{isDragging:!0}),!0}_onPinch(e){if(!this.touchZoom&&!this.touchRotate)return!1;if(!this.isDragging())return!1;let t=this.controllerState;if(this.touchZoom){const{scale:n}=e,r=this.getCenter(e);t=t.zoom({pos:r,scale:n})}if(this.touchRotate){const{rotation:n}=e;t=t.rotate({deltaAngleX:Mh._startPinchRotation-n})}return this.updateViewport(t,Eh,{isDragging:!0,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:this.touchRotate}),Mh._lastPinchEvent=e,!0}_onPinchEnd(e){if(!this.isDragging())return!1;const{inertia:t}=this,{_lastPinchEvent:n}=Mh;if(this.touchZoom&&t&&n&&e.scale!==n.scale){const r=this.getCenter(e);let i=this.controllerState.rotateEnd();const s=Math.log2(e.scale),o=(s-Math.log2(n.scale))/(e.deltaTime-n.deltaTime),a=Math.pow(2,s+o*t/2);i=i.zoom({pos:r,scale:a}).zoomEnd(),this.updateViewport(i,{...this._getTransitionProps({around:r}),transitionDuration:t,transitionEasing:Th},{isDragging:!1,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:!1}),this.blockEvents(t)}else{const e=this.controllerState.zoomEnd().rotateEnd();this.updateViewport(e,null,{isDragging:!1,isPanning:!1,isZooming:!1,isRotating:!1})}return Mh._startPinchRotation=null,Mh._lastPinchEvent=null,!0}_onDoubleClick(e){if(!this.doubleClickZoom)return!1;const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;const n=this.isFunctionKeyPressed(e),r=this.controllerState.zoom({pos:t,scale:n?.5:2});return this.updateViewport(r,this._getTransitionProps({around:t}),{isZooming:!0,isPanning:!0}),this.blockEvents(100),!0}_onKeyDown(e){if(!this.keyboard)return!1;const t=this.isFunctionKeyPressed(e),{zoomSpeed:n,moveSpeed:r,rotateSpeedX:i,rotateSpeedY:s}=!0===this.keyboard?{}:this.keyboard,{controllerState:o}=this;let a;const A={};switch(e.srcEvent.code){case"Minus":a=t?o.zoomOut(n).zoomOut(n):o.zoomOut(n),A.isZooming=!0;break;case"Equal":a=t?o.zoomIn(n).zoomIn(n):o.zoomIn(n),A.isZooming=!0;break;case"ArrowLeft":t?(a=o.rotateLeft(i),A.isRotating=!0):(a=o.moveLeft(r),A.isPanning=!0);break;case"ArrowRight":t?(a=o.rotateRight(i),A.isRotating=!0):(a=o.moveRight(r),A.isPanning=!0);break;case"ArrowUp":t?(a=o.rotateUp(s),A.isRotating=!0):(a=o.moveUp(r),A.isPanning=!0);break;case"ArrowDown":t?(a=o.rotateDown(s),A.isRotating=!0):(a=o.moveDown(r),A.isPanning=!0);break;default:return!1}return this.updateViewport(a,this._getTransitionProps(),A),!0}_getTransitionProps(e){const{transition:t}=this;return t&&t.transitionInterpolator?e?{...t,transitionInterpolator:new xh({...e,...t.transitionInterpolator.opts,makeViewport:this.controllerState.makeViewport})}:t:Eh}}class Nh{constructor(e,t){this._viewportProps=this.applyConstraints(e),this._state=t}getViewportProps(){return this._viewportProps}getState(){return this._state}}class Bh extends Nh{constructor(e){const{width:t,height:n,latitude:r,longitude:i,zoom:s,bearing:o=0,pitch:a=0,altitude:A=1.5,position:l=[0,0,0],maxZoom:c=20,minZoom:u=0,maxPitch:h=60,minPitch:d=0,startPanLngLat:f,startZoomLngLat:p,startRotatePos:g,startBearing:m,startPitch:_,startZoom:b,normalize:v=!0}=e;bh(Number.isFinite(i)),bh(Number.isFinite(r)),bh(Number.isFinite(s)),super({width:t,height:n,latitude:r,longitude:i,zoom:s,bearing:o,pitch:a,altitude:A,maxZoom:c,minZoom:u,maxPitch:h,minPitch:d,normalize:v,position:l},{startPanLngLat:f,startZoomLngLat:p,startRotatePos:g,startBearing:m,startPitch:_,startZoom:b}),this.makeViewport=e.makeViewport}panStart({pos:e}){return this._getUpdatedState({startPanLngLat:this._unproject(e)})}pan({pos:e,startPos:t}){const n=this.getState().startPanLngLat||this._unproject(t);if(!n)return this;const r=this.makeViewport(this.getViewportProps()).panByPosition(n,e);return this._getUpdatedState(r)}panEnd(){return this._getUpdatedState({startPanLngLat:null})}rotateStart({pos:e}){return this._getUpdatedState({startRotatePos:e,startBearing:this.getViewportProps().bearing,startPitch:this.getViewportProps().pitch})}rotate({pos:e,deltaAngleX:t=0,deltaAngleY:n=0}){const{startRotatePos:r,startBearing:i,startPitch:s}=this.getState();if(!r||void 0===i||void 0===s)return this;let o;return o=e?this._getNewRotation(e,r,s,i):{bearing:i+t,pitch:s+n},this._getUpdatedState(o)}rotateEnd(){return this._getUpdatedState({startBearing:null,startPitch:null})}zoomStart({pos:e}){return this._getUpdatedState({startZoomLngLat:this._unproject(e),startZoom:this.getViewportProps().zoom})}zoom({pos:e,startPos:t,scale:n}){let{startZoom:r,startZoomLngLat:i}=this.getState();if(i||(r=this.getViewportProps().zoom,i=this._unproject(t)||this._unproject(e)),!i)return this;const{maxZoom:s,minZoom:o}=this.getViewportProps();let a=r+Math.log2(n);a=Ma(a,o,s);const A=this.makeViewport({...this.getViewportProps(),zoom:a});return this._getUpdatedState({zoom:a,...A.panByPosition(i,e)})}zoomEnd(){return this._getUpdatedState({startZoomLngLat:null,startZoom:null})}zoomIn(e=2){return this._zoomFromCenter(e)}zoomOut(e=2){return this._zoomFromCenter(1/e)}moveLeft(e=100){return this._panFromCenter([e,0])}moveRight(e=100){return this._panFromCenter([-e,0])}moveUp(e=100){return this._panFromCenter([0,e])}moveDown(e=100){return this._panFromCenter([0,-e])}rotateLeft(e=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing-e})}rotateRight(e=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing+e})}rotateUp(e=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch+e})}rotateDown(e=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch-e})}shortestPathFrom(e){const t=e.getViewportProps(),n={...this.getViewportProps()},{bearing:r,longitude:i}=n;return Math.abs(r-t.bearing)>180&&(n.bearing=r<0?r+360:r-360),Math.abs(i-t.longitude)>180&&(n.longitude=i<0?i+360:i-360),n}applyConstraints(e){const{maxZoom:t,minZoom:n,zoom:r}=e;e.zoom=Ma(r,n,t);const{maxPitch:i,minPitch:s,pitch:o}=e;e.pitch=Ma(o,s,i);const{normalize:a=!0}=e;return a&&Object.assign(e,function(e){const{width:t,height:n,pitch:r=0}=e;let{longitude:i,latitude:s,zoom:o,bearing:a=0}=e;(i<-180||i>180)&&(i=rc(i+180,360)-180),(a<-180||a>180)&&(a=rc(a+180,360)-180);const A=sc(n/512);if(o<=A)o=A,s=0;else{const e=n/2/Math.pow(2,o),t=pc([0,e])[1];if(st&&(s=t)}}return{width:t,height:n,longitude:i,latitude:s,zoom:o,pitch:r,bearing:a}}(e)),e}_zoomFromCenter(e){const{width:t,height:n}=this.getViewportProps();return this.zoom({pos:[t/2,n/2],scale:e})}_panFromCenter(e){const{width:t,height:n}=this.getViewportProps();return this.pan({startPos:[t/2,n/2],pos:[t/2+e[0],n/2+e[1]]})}_getUpdatedState(e){return new this.constructor({makeViewport:this.makeViewport,...this.getViewportProps(),...this.getState(),...e})}_unproject(e){const t=this.makeViewport(this.getViewportProps());return e&&t.unproject(e)}_getNewRotation(e,t,n,r){const i=e[0]-t[0],s=e[1]-t[1],o=e[1],a=t[1],{width:A,height:l}=this.getViewportProps(),c=i/A;let u=0;s>0?Math.abs(l-a)>5&&(u=s/(a-l)*1.2):s<0&&a>5&&(u=1-o/a),u=Ma(u,-1,1);const{minPitch:h,maxPitch:d}=this.getViewportProps();let f=n;return u>0?f=n+u*(d-n):u<0&&(f=n-u*(h-n)),{pitch:f,bearing:r+180*c}}}class Dh extends Lh{constructor(){super(...arguments),this.ControllerState=Bh,this.transition={transitionDuration:300,transitionInterpolator:new xh({transitionProps:{compare:["longitude","latitude","zoom","bearing","pitch","position"],required:["longitude","latitude","zoom"]}})},this.dragMode="pan"}setProps(e){e.position=e.position||[0,0,0];const t=this.props;super.setProps(e),(!t||t.height!==e.height)&&this.updateViewport(new this.ControllerState({makeViewport:this.makeViewport,...e,...this.state}))}}class Oh extends fh{constructor(e={}){super(e)}getViewportType(){return fu}get ControllerType(){return Dh}}Oh.displayName="MapView";const Fh=new tu;class Uh{constructor(e){this._resolvedEffects=[],this._defaultEffects=[],this.effects=[],this._context=e,this._needsRedraw="Initial render",this._setEffects([])}addDefaultEffect(e){const t=this._defaultEffects;if(!t.find(t=>t.id===e.id)){const n=t.findIndex(t=>function(e,t){return(e.order??1/0)-(t.order??1/0)}(t,e)>0);n<0?t.push(e):t.splice(n,0,e),e.setup(this._context),this._setEffects(this.effects)}}setProps(e){"effects"in e&&(lh(e.effects,this.effects,1)||this._setEffects(e.effects))}needsRedraw(e={clearRedrawFlags:!1}){const t=this._needsRedraw;return e.clearRedrawFlags&&(this._needsRedraw=!1),t}getEffects(){return this._resolvedEffects}_setEffects(e){const t={};for(const r of this.effects)t[r.id]=r;const n=[];for(const r of e){const e=t[r.id];let i=r;e&&e!==r?e.setProps?(e.setProps(r.props),i=e):e.cleanup(this._context):e||r.setup(this._context),n.push(i),delete t[r.id]}for(const r in t)t[r].cleanup(this._context);this.effects=n,this._resolvedEffects=n.concat(this._defaultEffects),e.some(e=>e instanceof tu)||this._resolvedEffects.push(Fh),this._needsRedraw="effects changed"}finalize(){for(const e of this._resolvedEffects)e.cleanup(this._context);this.effects.length=0,this._resolvedEffects.length=0,this._defaultEffects.length=0}}class jh extends Qc{shouldDrawLayer(e){const{operation:t}=e.props;return t.includes("draw")||t.includes("terrain")}}class Gh{constructor(e){this.device=e,this.layerFilter=null,this.drawPickingColors=!1,this.drawLayersPass=new jh(e),this.pickLayersPass=new Yu(e),this.renderCount=0,this._needsRedraw="Initial render",this.renderBuffers=[],this.lastPostProcessEffect=null}setProps(e){this.layerFilter!==e.layerFilter&&(this.layerFilter=e.layerFilter,this._needsRedraw="layerFilter changed"),this.drawPickingColors!==e.drawPickingColors&&(this.drawPickingColors=e.drawPickingColors,this._needsRedraw="drawPickingColors changed")}renderLayers(e){if(!e.viewports.length)return;const t=this.drawPickingColors?this.pickLayersPass:this.drawLayersPass,n={layerFilter:this.layerFilter,isPicking:this.drawPickingColors,...e};n.effects&&this._preRender(n.effects,n);const r=this.lastPostProcessEffect?this.renderBuffers[0]:n.target;this.lastPostProcessEffect&&(n.clearColor=[0,0,0,0],n.clearCanvas=!0);const i=t.render({...n,target:r});n.effects&&(this.lastPostProcessEffect&&(n.clearCanvas=void 0===e.clearCanvas||e.clearCanvas),this._postRender(n.effects,n)),this.renderCount++,Wn("deckRenderer.renderLayers",this,i,e)}needsRedraw(e={clearRedrawFlags:!1}){const t=this._needsRedraw;return e.clearRedrawFlags&&(this._needsRedraw=!1),t}finalize(){const{renderBuffers:e}=this;for(const t of e)t.delete();e.length=0}_preRender(e,t){this.lastPostProcessEffect=null,t.preRenderStats=t.preRenderStats||{};for(const n of e)t.preRenderStats[n.id]=n.preRender(t),n.postRender&&(this.lastPostProcessEffect=n.id);this.lastPostProcessEffect&&this._resizeRenderBuffers()}_resizeRenderBuffers(){const{renderBuffers:e}=this,t=this.device.canvasContext.getDrawingBufferSize(),[n,r]=t;0===e.length&&[0,1].map(t=>{const i=this.device.createTexture({sampler:{minFilter:"linear",magFilter:"linear"},width:n,height:r});e.push(this.device.createFramebuffer({id:`deck-renderbuffer-${t}`,colorAttachments:[i]}))});for(const i of e)i.resize(t)}_postRender(e,t){const{renderBuffers:n}=this,r={...t,inputBuffer:n[0],swapBuffer:n[1]};for(const i of e)if(i.postRender){r.target=i.id===this.lastPostProcessEffect?t.target:void 0;const e=i.postRender(r);r.inputBuffer=e,r.swapBuffer=e===n[0]?n[1]:n[0]}}}const zh={pickedColor:null,pickedObjectIndex:-1};function Vh({pickedColors:e,decodePickingColor:t,deviceX:n,deviceY:r,deviceRadius:i,deviceRect:s}){const{x:o,y:a,width:A,height:l}=s;let c=i*i,u=-1,h=0;for(let d=0;dc)h+=4*A;else for(let r=0;r=0){const e=r+o-n,t=e*e+i;t<=c&&(c=t,u=h)}h+=4}}if(u>=0){const n=e.slice(u,u+4),r=t(n);if(r){const e=Math.floor(u/4/A),t=u/4-e*A;return{...r,pickedColor:n,pickedX:o+t,pickedY:a+e}}Gn.error("Picked non-existent layer. Is picking buffer corrupt?")()}return zh}function Wh({pickedColors:e,decodePickingColor:t}){const n=new Map;if(e)for(let r=0;r=0){const i=e.slice(r,r+4),s=i.join(",");if(!n.has(s)){const e=t(i);e?n.set(s,{...e,color:i}):Gn.error("Picked non-existent layer. Is picking buffer corrupt?")()}}return Array.from(n.values())}function Hh({pickInfo:e,viewports:t,pixelRatio:n,x:r,y:i,z:s}){let o,a=t[0];if(t.length>1&&(a=function(e,t){for(let n=e.length-1;n>=0;n--){const r=e[n];if(r.containsPixel(t))return r}return e[0]}((null==e?void 0:e.pickedViewports)||t,{x:r,y:i})),a){const e=[r-a.x,i-a.y];void 0!==s&&(e[2]=s),o=a.unproject(e)}return{color:null,layer:null,viewport:a,index:-1,picked:!1,x:r,y:i,pixel:[r,i],coordinate:o,devicePixel:e&&"pickedX"in e?[e.pickedX,e.pickedY]:void 0,pixelRatio:n}}function $h(e){const{pickInfo:t,lastPickedInfo:n,mode:r,layers:i}=e,{pickedColor:s,pickedLayer:o,pickedObjectIndex:a}=t,A=o?[o]:[];if("hover"===r){const e=n.index,t=n.layerId,r=o?o.props.id:null;if(r!==t||a!==e){if(r!==t){const e=i.find(e=>e.props.id===t);e&&A.unshift(e)}n.layerId=r,n.index=a,n.info=null}}const l=Hh(e),c=new Map;return c.set(null,l),A.forEach(e=>{let t={...l};e===o&&(t.color=s,t.index=a,t.picked=!0),t=Xh({layer:e,info:t,mode:r});const i=t.layer;e===o&&"hover"===r&&(n.info=t),c.set(i.id,t),"hover"===r&&i.updateAutoHighlight(t)}),c}function Xh({layer:e,info:t,mode:n}){for(;e&&t;){const r=t.layer||null;t.sourceLayer=r,t.layer=e,t=e.getPickingInfo({info:t,mode:n,sourceLayer:r}),e=e.parent}return t}class Qh{constructor(e){this._pickable=!0,this.device=e,this.pickLayersPass=new Yu(e),this.lastPickedInfo={index:-1,layerId:null,info:null}}setProps(e){"layerFilter"in e&&(this.layerFilter=e.layerFilter),"_pickable"in e&&(this._pickable=e._pickable)}finalize(){this.pickingFBO&&this.pickingFBO.destroy(),this.depthFBO&&this.depthFBO.destroy()}pickObjectAsync(e){return this._pickClosestObjectAsync(e)}pickObjectsAsync(e){return this._pickVisibleObjectsAsync(e)}pickObject(e){return this._pickClosestObject(e)}pickObjects(e){return this._pickVisibleObjects(e)}getLastPickedObject({x:e,y:t,layers:n,viewports:r},i=this.lastPickedInfo.info){const s=i&&i.layer&&i.layer.id,o=i&&i.viewport&&i.viewport.id,a=s?n.find(e=>e.id===s):null,A=o&&r.find(e=>e.id===o)||r[0],l=A&&A.unproject([e-A.x,t-A.y]),c={x:e,y:t,viewport:A,coordinate:l,layer:a};return{...i,...c}}_resizeBuffer(){var e,t;if(!this.pickingFBO&&(this.pickingFBO=this.device.createFramebuffer({colorAttachments:["rgba8unorm"],depthStencilAttachment:"depth16unorm"}),this.device.isTextureFormatRenderable("rgba32float"))){const e=this.device.createFramebuffer({colorAttachments:["rgba32float"],depthStencilAttachment:"depth16unorm"});this.depthFBO=e}const{canvas:n}=this.device.getDefaultCanvasContext();null==(e=this.pickingFBO)||e.resize({width:n.width,height:n.height}),null==(t=this.depthFBO)||t.resize({width:n.width,height:n.height})}_getPickable(e){if(!1===this._pickable)return null;const t=e.filter(e=>this.pickLayersPass.shouldDrawLayer(e)&&!e.isComposite);return t.length?t:null}async _pickClosestObjectAsync({layers:e,views:t,viewports:n,x:r,y:i,radius:s=0,depth:o=1,mode:a="query",unproject3D:A,onViewportActive:l,effects:c}){const u=this.device.canvasContext.cssToDeviceRatio(),h=this._getPickable(e);if(!h||0===n.length)return{result:[],emptyInfo:Hh({viewports:n,x:r,y:i,pixelRatio:u})};this._resizeBuffer();const d=this.device.canvasContext.cssToDevicePixels([r,i],!0),f=[d.x+Math.floor(d.width/2),d.y+Math.floor(d.height/2)],p=Math.round(s*u),{width:g,height:m}=this.pickingFBO,_=this._getPickingRect({deviceX:f[0],deviceY:f[1],deviceRadius:p,deviceWidth:g,deviceHeight:m}),b={x:r-s,y:i-s,width:2*s+1,height:2*s+1};let v;const y=[],w=new Set;for(let x=0;x=A);E++){const e=v[E];let t={color:e.pickedColor,layer:null,index:e.pickedObjectIndex,picked:!0,x:r,y:i,pixelRatio:h};t=Xh({layer:e.pickedLayer,info:t,mode:a});const n=t.layer.id;y.has(n)||y.set(n,new Set);const s=y.get(n),o=t.object??t.index;s.has(o)||(s.add(o),w.push(t))}return w}_pickVisibleObjects({layers:e,views:t,viewports:n,x:r,y:i,width:s=1,height:o=1,mode:a="query",maxObjects:A=null,onViewportActive:l,effects:c}){const u=this._getPickable(e);if(!u||0===n.length)return[];this._resizeBuffer();const h=this.device.canvasContext.cssToDeviceRatio(),d=this.device.canvasContext.cssToDevicePixels([r,i],!0),f=d.x,p=d.y+d.height,g=this.device.canvasContext.cssToDevicePixels([r+s,i+o],!0),m=g.x+g.width,_=g.y,b={x:f,y:_,width:m-f,height:p-_},v=Wh(this._drawAndSample({layers:u,views:t,viewports:n,onViewportActive:l,deviceRect:b,cullRect:{x:r,y:i,width:s,height:o},effects:c,pass:`picking:${a}`})),y=new Map,w=[],x=Number.isFinite(A);for(let E=0;E=A);E++){const e=v[E];let t={color:e.pickedColor,layer:null,index:e.pickedObjectIndex,picked:!0,x:r,y:i,pixelRatio:h};t=Xh({layer:e.pickedLayer,info:t,mode:a});const n=t.layer.id;y.has(n)||y.set(n,new Set);const s=y.get(n),o=t.object??t.index;s.has(o)||(s.add(o),w.push(t))}return w}async _drawAndSampleAsync({layers:e,views:t,viewports:n,onViewportActive:r,deviceRect:i,cullRect:s,effects:o,pass:a},A=!1){const l=A?this.depthFBO:this.pickingFBO,c={layers:e,layerFilter:this.layerFilter,views:t,viewports:n,onViewportActive:r,pickingFBO:l,deviceRect:i,cullRect:s,effects:o,pass:a,pickZ:A,preRenderStats:{},isPicking:!0};for(const m of o)m.useInPicking&&(c.preRenderStats[m.id]=m.preRender(c));const{decodePickingColor:u}=this.pickLayersPass.render(c),{x:h,y:d,width:f,height:p}=i,g=new(A?Float32Array:Uint8Array)(f*p*4);return this.device.readPixelsToArrayWebGL(l,{sourceX:h,sourceY:d,sourceWidth:f,sourceHeight:p,target:g}),{pickedColors:g,decodePickingColor:u}}_drawAndSample({layers:e,views:t,viewports:n,onViewportActive:r,deviceRect:i,cullRect:s,effects:o,pass:a},A=!1){const l=A?this.depthFBO:this.pickingFBO,c={layers:e,layerFilter:this.layerFilter,views:t,viewports:n,onViewportActive:r,pickingFBO:l,deviceRect:i,cullRect:s,effects:o,pass:a,pickZ:A,preRenderStats:{},isPicking:!0};for(const m of o)m.useInPicking&&(c.preRenderStats[m.id]=m.preRender(c));const{decodePickingColor:u}=this.pickLayersPass.render(c),{x:h,y:d,width:f,height:p}=i,g=new(A?Float32Array:Uint8Array)(f*p*4);return this.device.readPixelsToArrayWebGL(l,{sourceX:h,sourceY:d,sourceWidth:f,sourceHeight:p,target:g}),{pickedColors:g,decodePickingColor:u}}_getPickingRect({deviceX:e,deviceY:t,deviceRadius:n,deviceWidth:r,deviceHeight:i}){const s=Math.max(0,e-n),o=Math.max(0,t-n),a=Math.min(r,e+n+1)-s,A=Math.min(i,t+n+1)-o;return a<=0||A<=0?null:{x:s,y:o,width:a,height:A}}}const Yh={"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0},fill:{top:0,left:0,bottom:0,right:0}},qh="top-left",Kh="__root";class Zh{constructor({deck:e,parentElement:t}){this.defaultWidgets=[],this.widgets=[],this.resolvedWidgets=[],this.containers={},this.lastViewports={},this.deck=e,null==t||t.classList.add("deck-widget-container"),this.parentElement=t}getWidgets(){return this.resolvedWidgets}setProps(e){if(e.widgets&&!lh(e.widgets,this.widgets,1)){const t=e.widgets.filter(Boolean);this._setWidgets(t)}}finalize(){for(const e of this.getWidgets())this._removeWidget(e);this.defaultWidgets.length=0,this.resolvedWidgets.length=0;for(const e in this.containers)this.containers[e].remove()}addDefault(e){this.defaultWidgets.find(t=>t.id===e.id)||(this._addWidget(e),this.defaultWidgets.push(e),this._setWidgets(this.widgets))}onRedraw({viewports:e,layers:t}){var n,r;const i=e.reduce((e,t)=>(e[t.id]=t,e),{});for(const s of this.getWidgets()){const{viewId:o}=s;if(o){const e=i[o];e&&(s.onViewportChange&&s.onViewportChange(e),null==(n=s.onRedraw)||n.call(s,{viewports:[e],layers:t}))}else{if(s.onViewportChange)for(const t of e)s.onViewportChange(t);null==(r=s.onRedraw)||r.call(s,{viewports:e,layers:t})}}this.lastViewports=i,this._updateContainers()}onHover(e,t){var n,r;for(const i of this.getWidgets()){const{viewId:s}=i;s&&s!==(null==(n=e.viewport)?void 0:n.id)||null==(r=i.onHover)||r.call(i,e,t)}}onEvent(e,t){var n,r;const i=Fl[t.type];if(i)for(const s of this.getWidgets()){const{viewId:o}=s;o&&o!==(null==(n=e.viewport)?void 0:n.id)||null==(r=s[i])||r.call(s,e,t)}}_setWidgets(e){const t={};for(const n of this.resolvedWidgets)t[n.id]=n;this.resolvedWidgets.length=0;for(const n of this.defaultWidgets)t[n.id]=null,this.resolvedWidgets.push(n);for(let n of e){const e=t[n.id];e?e.viewId!==n.viewId||e.placement!==n.placement?(this._removeWidget(e),this._addWidget(n)):n!==e&&(e.setProps(n.props),n=e):this._addWidget(n),t[n.id]=null,this.resolvedWidgets.push(n)}for(const n in t){const e=t[n];e&&this._removeWidget(e)}this.widgets=e}_addWidget(e){const{viewId:t=null,placement:n=qh}=e;e.widgetManager=this,e.deck=this.deck,e.rootElement=e._onAdd({deck:this.deck,viewId:t}),e.rootElement&&this._getContainer(t,n).append(e.rootElement),e.updateHTML()}_removeWidget(e){var t;null==(t=e.onRemove)||t.call(e),e.rootElement&&e.rootElement.remove(),e.rootElement=void 0,e.deck=void 0,e.widgetManager=void 0}_getContainer(e,t){var n;const r=e||Kh;let i=this.containers[r];i||(i=document.createElement("div"),i.style.pointerEvents="none",i.style.position="absolute",i.style.overflow="hidden",null==(n=this.parentElement)||n.append(i),this.containers[r]=i);let s=i.querySelector(`.${t}`);return s||(s=globalThis.document.createElement("div"),s.className=t,s.style.position="absolute",s.style.zIndex="2",Object.assign(s.style,Yh[t]),i.append(s)),s}_updateContainers(){const e=this.deck.width,t=this.deck.height;for(const n in this.containers){const r=this.lastViewports[n]||null,i=n===Kh||r,s=this.containers[n];i?(s.style.display="block",s.style.left=`${r?r.x:0}px`,s.style.top=`${r?r.y:0}px`,s.style.width=`${r?r.width:e}px`,s.style.height=`${r?r.height:t}px`):s.style.display="none"}}}function Jh(e,t){t&&Object.entries(t).map(([t,n])=>{t.startsWith("--")?e.style.setProperty(t,n):e.style[t]=n})}class ed{constructor(e){this.viewId=null,this.props={...this.constructor.defaultProps,...e},this.id=this.props.id}setProps(e){const t=this.props,n=this.rootElement;var r,i;n&&t.className!==e.className&&(t.className&&n.classList.remove(t.className),e.className&&n.classList.add(e.className)),n&&!lh(t.style,e.style,1)&&(r=n,(i=t.style)&&Object.keys(i).map(e=>{e.startsWith("--")?r.style.removeProperty(e):r.style[e]=""}),Jh(n,e.style)),Object.assign(this.props,e),this.updateHTML()}updateHTML(){this.rootElement&&this.onRenderHTML(this.rootElement)}onCreateRootElement(){const e=["deck-widget",this.className,this.props.className],t=document.createElement("div");return e.filter(e=>"string"==typeof e&&e.length>0).forEach(e=>t.classList.add(e)),Jh(t,this.props.style),t}_onAdd(e){return this.onAdd(e)??this.onCreateRootElement()}onAdd(e){}onRemove(){}onViewportChange(e){}onRedraw(e){}onHover(e,t){}onClick(e,t){}onDrag(e,t){}onDragStart(e,t){}onDragEnd(e,t){}}ed.defaultProps={id:"widget",style:{},className:""};const td={zIndex:"1",position:"absolute",pointerEvents:"none",color:"#a0a7b4",backgroundColor:"#29323c",padding:"10px",top:"0",left:"0",display:"none"};class nd extends ed{constructor(e={}){super(e),this.id="default-tooltip",this.placement="fill",this.className="deck-tooltip",this.isVisible=!1,this.setProps(e)}onCreateRootElement(){const e=document.createElement("div");return e.className=this.className,Object.assign(e.style,td),e}onRenderHTML(e){}onViewportChange(e){var t;this.isVisible&&e.id===(null==(t=this.lastViewport)?void 0:t.id)&&!e.equals(this.lastViewport)&&this.setTooltip(null),this.lastViewport=e}onHover(e){const{deck:t}=this,n=t&&t.props.getTooltip;if(!n)return;const r=n(e);this.setTooltip(r,e.x,e.y)}setTooltip(e,t,n){const r=this.rootElement;if(r){if("string"==typeof e)r.innerText=e;else{if(!e)return this.isVisible=!1,void(r.style.display="none");e.text&&(r.innerText=e.text),e.html&&(r.innerHTML=e.html),e.className&&(r.className=e.className)}this.isVisible=!0,r.style.display="block",r.style.transform=`translate(${t}px, ${n}px)`,e&&"object"==typeof e&&"style"in e&&Object.assign(r.style,e.style)}}}var rd,id;nd.defaultProps={...ed.defaultProps},(id=rd||(rd={}))[id.DEPTH_BUFFER_BIT=256]="DEPTH_BUFFER_BIT",id[id.STENCIL_BUFFER_BIT=1024]="STENCIL_BUFFER_BIT",id[id.COLOR_BUFFER_BIT=16384]="COLOR_BUFFER_BIT",id[id.POINTS=0]="POINTS",id[id.LINES=1]="LINES",id[id.LINE_LOOP=2]="LINE_LOOP",id[id.LINE_STRIP=3]="LINE_STRIP",id[id.TRIANGLES=4]="TRIANGLES",id[id.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",id[id.TRIANGLE_FAN=6]="TRIANGLE_FAN",id[id.ZERO=0]="ZERO",id[id.ONE=1]="ONE",id[id.SRC_COLOR=768]="SRC_COLOR",id[id.ONE_MINUS_SRC_COLOR=769]="ONE_MINUS_SRC_COLOR",id[id.SRC_ALPHA=770]="SRC_ALPHA",id[id.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",id[id.DST_ALPHA=772]="DST_ALPHA",id[id.ONE_MINUS_DST_ALPHA=773]="ONE_MINUS_DST_ALPHA",id[id.DST_COLOR=774]="DST_COLOR",id[id.ONE_MINUS_DST_COLOR=775]="ONE_MINUS_DST_COLOR",id[id.SRC_ALPHA_SATURATE=776]="SRC_ALPHA_SATURATE",id[id.CONSTANT_COLOR=32769]="CONSTANT_COLOR",id[id.ONE_MINUS_CONSTANT_COLOR=32770]="ONE_MINUS_CONSTANT_COLOR",id[id.CONSTANT_ALPHA=32771]="CONSTANT_ALPHA",id[id.ONE_MINUS_CONSTANT_ALPHA=32772]="ONE_MINUS_CONSTANT_ALPHA",id[id.FUNC_ADD=32774]="FUNC_ADD",id[id.FUNC_SUBTRACT=32778]="FUNC_SUBTRACT",id[id.FUNC_REVERSE_SUBTRACT=32779]="FUNC_REVERSE_SUBTRACT",id[id.BLEND_EQUATION=32777]="BLEND_EQUATION",id[id.BLEND_EQUATION_RGB=32777]="BLEND_EQUATION_RGB",id[id.BLEND_EQUATION_ALPHA=34877]="BLEND_EQUATION_ALPHA",id[id.BLEND_DST_RGB=32968]="BLEND_DST_RGB",id[id.BLEND_SRC_RGB=32969]="BLEND_SRC_RGB",id[id.BLEND_DST_ALPHA=32970]="BLEND_DST_ALPHA",id[id.BLEND_SRC_ALPHA=32971]="BLEND_SRC_ALPHA",id[id.BLEND_COLOR=32773]="BLEND_COLOR",id[id.ARRAY_BUFFER_BINDING=34964]="ARRAY_BUFFER_BINDING",id[id.ELEMENT_ARRAY_BUFFER_BINDING=34965]="ELEMENT_ARRAY_BUFFER_BINDING",id[id.LINE_WIDTH=2849]="LINE_WIDTH",id[id.ALIASED_POINT_SIZE_RANGE=33901]="ALIASED_POINT_SIZE_RANGE",id[id.ALIASED_LINE_WIDTH_RANGE=33902]="ALIASED_LINE_WIDTH_RANGE",id[id.CULL_FACE_MODE=2885]="CULL_FACE_MODE",id[id.FRONT_FACE=2886]="FRONT_FACE",id[id.DEPTH_RANGE=2928]="DEPTH_RANGE",id[id.DEPTH_WRITEMASK=2930]="DEPTH_WRITEMASK",id[id.DEPTH_CLEAR_VALUE=2931]="DEPTH_CLEAR_VALUE",id[id.DEPTH_FUNC=2932]="DEPTH_FUNC",id[id.STENCIL_CLEAR_VALUE=2961]="STENCIL_CLEAR_VALUE",id[id.STENCIL_FUNC=2962]="STENCIL_FUNC",id[id.STENCIL_FAIL=2964]="STENCIL_FAIL",id[id.STENCIL_PASS_DEPTH_FAIL=2965]="STENCIL_PASS_DEPTH_FAIL",id[id.STENCIL_PASS_DEPTH_PASS=2966]="STENCIL_PASS_DEPTH_PASS",id[id.STENCIL_REF=2967]="STENCIL_REF",id[id.STENCIL_VALUE_MASK=2963]="STENCIL_VALUE_MASK",id[id.STENCIL_WRITEMASK=2968]="STENCIL_WRITEMASK",id[id.STENCIL_BACK_FUNC=34816]="STENCIL_BACK_FUNC",id[id.STENCIL_BACK_FAIL=34817]="STENCIL_BACK_FAIL",id[id.STENCIL_BACK_PASS_DEPTH_FAIL=34818]="STENCIL_BACK_PASS_DEPTH_FAIL",id[id.STENCIL_BACK_PASS_DEPTH_PASS=34819]="STENCIL_BACK_PASS_DEPTH_PASS",id[id.STENCIL_BACK_REF=36003]="STENCIL_BACK_REF",id[id.STENCIL_BACK_VALUE_MASK=36004]="STENCIL_BACK_VALUE_MASK",id[id.STENCIL_BACK_WRITEMASK=36005]="STENCIL_BACK_WRITEMASK",id[id.VIEWPORT=2978]="VIEWPORT",id[id.SCISSOR_BOX=3088]="SCISSOR_BOX",id[id.COLOR_CLEAR_VALUE=3106]="COLOR_CLEAR_VALUE",id[id.COLOR_WRITEMASK=3107]="COLOR_WRITEMASK",id[id.UNPACK_ALIGNMENT=3317]="UNPACK_ALIGNMENT",id[id.PACK_ALIGNMENT=3333]="PACK_ALIGNMENT",id[id.MAX_TEXTURE_SIZE=3379]="MAX_TEXTURE_SIZE",id[id.MAX_VIEWPORT_DIMS=3386]="MAX_VIEWPORT_DIMS",id[id.SUBPIXEL_BITS=3408]="SUBPIXEL_BITS",id[id.RED_BITS=3410]="RED_BITS",id[id.GREEN_BITS=3411]="GREEN_BITS",id[id.BLUE_BITS=3412]="BLUE_BITS",id[id.ALPHA_BITS=3413]="ALPHA_BITS",id[id.DEPTH_BITS=3414]="DEPTH_BITS",id[id.STENCIL_BITS=3415]="STENCIL_BITS",id[id.POLYGON_OFFSET_UNITS=10752]="POLYGON_OFFSET_UNITS",id[id.POLYGON_OFFSET_FACTOR=32824]="POLYGON_OFFSET_FACTOR",id[id.TEXTURE_BINDING_2D=32873]="TEXTURE_BINDING_2D",id[id.SAMPLE_BUFFERS=32936]="SAMPLE_BUFFERS",id[id.SAMPLES=32937]="SAMPLES",id[id.SAMPLE_COVERAGE_VALUE=32938]="SAMPLE_COVERAGE_VALUE",id[id.SAMPLE_COVERAGE_INVERT=32939]="SAMPLE_COVERAGE_INVERT",id[id.COMPRESSED_TEXTURE_FORMATS=34467]="COMPRESSED_TEXTURE_FORMATS",id[id.VENDOR=7936]="VENDOR",id[id.RENDERER=7937]="RENDERER",id[id.VERSION=7938]="VERSION",id[id.IMPLEMENTATION_COLOR_READ_TYPE=35738]="IMPLEMENTATION_COLOR_READ_TYPE",id[id.IMPLEMENTATION_COLOR_READ_FORMAT=35739]="IMPLEMENTATION_COLOR_READ_FORMAT",id[id.BROWSER_DEFAULT_WEBGL=37444]="BROWSER_DEFAULT_WEBGL",id[id.STATIC_DRAW=35044]="STATIC_DRAW",id[id.STREAM_DRAW=35040]="STREAM_DRAW",id[id.DYNAMIC_DRAW=35048]="DYNAMIC_DRAW",id[id.ARRAY_BUFFER=34962]="ARRAY_BUFFER",id[id.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",id[id.BUFFER_SIZE=34660]="BUFFER_SIZE",id[id.BUFFER_USAGE=34661]="BUFFER_USAGE",id[id.CURRENT_VERTEX_ATTRIB=34342]="CURRENT_VERTEX_ATTRIB",id[id.VERTEX_ATTRIB_ARRAY_ENABLED=34338]="VERTEX_ATTRIB_ARRAY_ENABLED",id[id.VERTEX_ATTRIB_ARRAY_SIZE=34339]="VERTEX_ATTRIB_ARRAY_SIZE",id[id.VERTEX_ATTRIB_ARRAY_STRIDE=34340]="VERTEX_ATTRIB_ARRAY_STRIDE",id[id.VERTEX_ATTRIB_ARRAY_TYPE=34341]="VERTEX_ATTRIB_ARRAY_TYPE",id[id.VERTEX_ATTRIB_ARRAY_NORMALIZED=34922]="VERTEX_ATTRIB_ARRAY_NORMALIZED",id[id.VERTEX_ATTRIB_ARRAY_POINTER=34373]="VERTEX_ATTRIB_ARRAY_POINTER",id[id.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING=34975]="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",id[id.CULL_FACE=2884]="CULL_FACE",id[id.FRONT=1028]="FRONT",id[id.BACK=1029]="BACK",id[id.FRONT_AND_BACK=1032]="FRONT_AND_BACK",id[id.BLEND=3042]="BLEND",id[id.DEPTH_TEST=2929]="DEPTH_TEST",id[id.DITHER=3024]="DITHER",id[id.POLYGON_OFFSET_FILL=32823]="POLYGON_OFFSET_FILL",id[id.SAMPLE_ALPHA_TO_COVERAGE=32926]="SAMPLE_ALPHA_TO_COVERAGE",id[id.SAMPLE_COVERAGE=32928]="SAMPLE_COVERAGE",id[id.SCISSOR_TEST=3089]="SCISSOR_TEST",id[id.STENCIL_TEST=2960]="STENCIL_TEST",id[id.NO_ERROR=0]="NO_ERROR",id[id.INVALID_ENUM=1280]="INVALID_ENUM",id[id.INVALID_VALUE=1281]="INVALID_VALUE",id[id.INVALID_OPERATION=1282]="INVALID_OPERATION",id[id.OUT_OF_MEMORY=1285]="OUT_OF_MEMORY",id[id.CONTEXT_LOST_WEBGL=37442]="CONTEXT_LOST_WEBGL",id[id.CW=2304]="CW",id[id.CCW=2305]="CCW",id[id.DONT_CARE=4352]="DONT_CARE",id[id.FASTEST=4353]="FASTEST",id[id.NICEST=4354]="NICEST",id[id.GENERATE_MIPMAP_HINT=33170]="GENERATE_MIPMAP_HINT",id[id.BYTE=5120]="BYTE",id[id.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",id[id.SHORT=5122]="SHORT",id[id.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",id[id.INT=5124]="INT",id[id.UNSIGNED_INT=5125]="UNSIGNED_INT",id[id.FLOAT=5126]="FLOAT",id[id.DOUBLE=5130]="DOUBLE",id[id.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",id[id.ALPHA=6406]="ALPHA",id[id.RGB=6407]="RGB",id[id.RGBA=6408]="RGBA",id[id.LUMINANCE=6409]="LUMINANCE",id[id.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",id[id.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",id[id.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",id[id.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",id[id.FRAGMENT_SHADER=35632]="FRAGMENT_SHADER",id[id.VERTEX_SHADER=35633]="VERTEX_SHADER",id[id.COMPILE_STATUS=35713]="COMPILE_STATUS",id[id.DELETE_STATUS=35712]="DELETE_STATUS",id[id.LINK_STATUS=35714]="LINK_STATUS",id[id.VALIDATE_STATUS=35715]="VALIDATE_STATUS",id[id.ATTACHED_SHADERS=35717]="ATTACHED_SHADERS",id[id.ACTIVE_ATTRIBUTES=35721]="ACTIVE_ATTRIBUTES",id[id.ACTIVE_UNIFORMS=35718]="ACTIVE_UNIFORMS",id[id.MAX_VERTEX_ATTRIBS=34921]="MAX_VERTEX_ATTRIBS",id[id.MAX_VERTEX_UNIFORM_VECTORS=36347]="MAX_VERTEX_UNIFORM_VECTORS",id[id.MAX_VARYING_VECTORS=36348]="MAX_VARYING_VECTORS",id[id.MAX_COMBINED_TEXTURE_IMAGE_UNITS=35661]="MAX_COMBINED_TEXTURE_IMAGE_UNITS",id[id.MAX_VERTEX_TEXTURE_IMAGE_UNITS=35660]="MAX_VERTEX_TEXTURE_IMAGE_UNITS",id[id.MAX_TEXTURE_IMAGE_UNITS=34930]="MAX_TEXTURE_IMAGE_UNITS",id[id.MAX_FRAGMENT_UNIFORM_VECTORS=36349]="MAX_FRAGMENT_UNIFORM_VECTORS",id[id.SHADER_TYPE=35663]="SHADER_TYPE",id[id.SHADING_LANGUAGE_VERSION=35724]="SHADING_LANGUAGE_VERSION",id[id.CURRENT_PROGRAM=35725]="CURRENT_PROGRAM",id[id.NEVER=512]="NEVER",id[id.LESS=513]="LESS",id[id.EQUAL=514]="EQUAL",id[id.LEQUAL=515]="LEQUAL",id[id.GREATER=516]="GREATER",id[id.NOTEQUAL=517]="NOTEQUAL",id[id.GEQUAL=518]="GEQUAL",id[id.ALWAYS=519]="ALWAYS",id[id.KEEP=7680]="KEEP",id[id.REPLACE=7681]="REPLACE",id[id.INCR=7682]="INCR",id[id.DECR=7683]="DECR",id[id.INVERT=5386]="INVERT",id[id.INCR_WRAP=34055]="INCR_WRAP",id[id.DECR_WRAP=34056]="DECR_WRAP",id[id.NEAREST=9728]="NEAREST",id[id.LINEAR=9729]="LINEAR",id[id.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",id[id.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",id[id.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",id[id.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR",id[id.TEXTURE_MAG_FILTER=10240]="TEXTURE_MAG_FILTER",id[id.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",id[id.TEXTURE_WRAP_S=10242]="TEXTURE_WRAP_S",id[id.TEXTURE_WRAP_T=10243]="TEXTURE_WRAP_T",id[id.TEXTURE_2D=3553]="TEXTURE_2D",id[id.TEXTURE=5890]="TEXTURE",id[id.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",id[id.TEXTURE_BINDING_CUBE_MAP=34068]="TEXTURE_BINDING_CUBE_MAP",id[id.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",id[id.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",id[id.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",id[id.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",id[id.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",id[id.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",id[id.MAX_CUBE_MAP_TEXTURE_SIZE=34076]="MAX_CUBE_MAP_TEXTURE_SIZE",id[id.TEXTURE0=33984]="TEXTURE0",id[id.ACTIVE_TEXTURE=34016]="ACTIVE_TEXTURE",id[id.REPEAT=10497]="REPEAT",id[id.CLAMP_TO_EDGE=33071]="CLAMP_TO_EDGE",id[id.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",id[id.TEXTURE_WIDTH=4096]="TEXTURE_WIDTH",id[id.TEXTURE_HEIGHT=4097]="TEXTURE_HEIGHT",id[id.FLOAT_VEC2=35664]="FLOAT_VEC2",id[id.FLOAT_VEC3=35665]="FLOAT_VEC3",id[id.FLOAT_VEC4=35666]="FLOAT_VEC4",id[id.INT_VEC2=35667]="INT_VEC2",id[id.INT_VEC3=35668]="INT_VEC3",id[id.INT_VEC4=35669]="INT_VEC4",id[id.BOOL=35670]="BOOL",id[id.BOOL_VEC2=35671]="BOOL_VEC2",id[id.BOOL_VEC3=35672]="BOOL_VEC3",id[id.BOOL_VEC4=35673]="BOOL_VEC4",id[id.FLOAT_MAT2=35674]="FLOAT_MAT2",id[id.FLOAT_MAT3=35675]="FLOAT_MAT3",id[id.FLOAT_MAT4=35676]="FLOAT_MAT4",id[id.SAMPLER_2D=35678]="SAMPLER_2D",id[id.SAMPLER_CUBE=35680]="SAMPLER_CUBE",id[id.LOW_FLOAT=36336]="LOW_FLOAT",id[id.MEDIUM_FLOAT=36337]="MEDIUM_FLOAT",id[id.HIGH_FLOAT=36338]="HIGH_FLOAT",id[id.LOW_INT=36339]="LOW_INT",id[id.MEDIUM_INT=36340]="MEDIUM_INT",id[id.HIGH_INT=36341]="HIGH_INT",id[id.FRAMEBUFFER=36160]="FRAMEBUFFER",id[id.RENDERBUFFER=36161]="RENDERBUFFER",id[id.RGBA4=32854]="RGBA4",id[id.RGB5_A1=32855]="RGB5_A1",id[id.RGB565=36194]="RGB565",id[id.DEPTH_COMPONENT16=33189]="DEPTH_COMPONENT16",id[id.STENCIL_INDEX=6401]="STENCIL_INDEX",id[id.STENCIL_INDEX8=36168]="STENCIL_INDEX8",id[id.DEPTH_STENCIL=34041]="DEPTH_STENCIL",id[id.RENDERBUFFER_WIDTH=36162]="RENDERBUFFER_WIDTH",id[id.RENDERBUFFER_HEIGHT=36163]="RENDERBUFFER_HEIGHT",id[id.RENDERBUFFER_INTERNAL_FORMAT=36164]="RENDERBUFFER_INTERNAL_FORMAT",id[id.RENDERBUFFER_RED_SIZE=36176]="RENDERBUFFER_RED_SIZE",id[id.RENDERBUFFER_GREEN_SIZE=36177]="RENDERBUFFER_GREEN_SIZE",id[id.RENDERBUFFER_BLUE_SIZE=36178]="RENDERBUFFER_BLUE_SIZE",id[id.RENDERBUFFER_ALPHA_SIZE=36179]="RENDERBUFFER_ALPHA_SIZE",id[id.RENDERBUFFER_DEPTH_SIZE=36180]="RENDERBUFFER_DEPTH_SIZE",id[id.RENDERBUFFER_STENCIL_SIZE=36181]="RENDERBUFFER_STENCIL_SIZE",id[id.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE=36048]="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",id[id.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME=36049]="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",id[id.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL=36050]="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",id[id.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE=36051]="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",id[id.COLOR_ATTACHMENT0=36064]="COLOR_ATTACHMENT0",id[id.DEPTH_ATTACHMENT=36096]="DEPTH_ATTACHMENT",id[id.STENCIL_ATTACHMENT=36128]="STENCIL_ATTACHMENT",id[id.DEPTH_STENCIL_ATTACHMENT=33306]="DEPTH_STENCIL_ATTACHMENT",id[id.NONE=0]="NONE",id[id.FRAMEBUFFER_COMPLETE=36053]="FRAMEBUFFER_COMPLETE",id[id.FRAMEBUFFER_INCOMPLETE_ATTACHMENT=36054]="FRAMEBUFFER_INCOMPLETE_ATTACHMENT",id[id.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT=36055]="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",id[id.FRAMEBUFFER_INCOMPLETE_DIMENSIONS=36057]="FRAMEBUFFER_INCOMPLETE_DIMENSIONS",id[id.FRAMEBUFFER_UNSUPPORTED=36061]="FRAMEBUFFER_UNSUPPORTED",id[id.FRAMEBUFFER_BINDING=36006]="FRAMEBUFFER_BINDING",id[id.RENDERBUFFER_BINDING=36007]="RENDERBUFFER_BINDING",id[id.READ_FRAMEBUFFER=36008]="READ_FRAMEBUFFER",id[id.DRAW_FRAMEBUFFER=36009]="DRAW_FRAMEBUFFER",id[id.MAX_RENDERBUFFER_SIZE=34024]="MAX_RENDERBUFFER_SIZE",id[id.INVALID_FRAMEBUFFER_OPERATION=1286]="INVALID_FRAMEBUFFER_OPERATION",id[id.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL",id[id.UNPACK_PREMULTIPLY_ALPHA_WEBGL=37441]="UNPACK_PREMULTIPLY_ALPHA_WEBGL",id[id.UNPACK_COLORSPACE_CONVERSION_WEBGL=37443]="UNPACK_COLORSPACE_CONVERSION_WEBGL",id[id.READ_BUFFER=3074]="READ_BUFFER",id[id.UNPACK_ROW_LENGTH=3314]="UNPACK_ROW_LENGTH",id[id.UNPACK_SKIP_ROWS=3315]="UNPACK_SKIP_ROWS",id[id.UNPACK_SKIP_PIXELS=3316]="UNPACK_SKIP_PIXELS",id[id.PACK_ROW_LENGTH=3330]="PACK_ROW_LENGTH",id[id.PACK_SKIP_ROWS=3331]="PACK_SKIP_ROWS",id[id.PACK_SKIP_PIXELS=3332]="PACK_SKIP_PIXELS",id[id.TEXTURE_BINDING_3D=32874]="TEXTURE_BINDING_3D",id[id.UNPACK_SKIP_IMAGES=32877]="UNPACK_SKIP_IMAGES",id[id.UNPACK_IMAGE_HEIGHT=32878]="UNPACK_IMAGE_HEIGHT",id[id.MAX_3D_TEXTURE_SIZE=32883]="MAX_3D_TEXTURE_SIZE",id[id.MAX_ELEMENTS_VERTICES=33e3]="MAX_ELEMENTS_VERTICES",id[id.MAX_ELEMENTS_INDICES=33001]="MAX_ELEMENTS_INDICES",id[id.MAX_TEXTURE_LOD_BIAS=34045]="MAX_TEXTURE_LOD_BIAS",id[id.MAX_FRAGMENT_UNIFORM_COMPONENTS=35657]="MAX_FRAGMENT_UNIFORM_COMPONENTS",id[id.MAX_VERTEX_UNIFORM_COMPONENTS=35658]="MAX_VERTEX_UNIFORM_COMPONENTS",id[id.MAX_ARRAY_TEXTURE_LAYERS=35071]="MAX_ARRAY_TEXTURE_LAYERS",id[id.MIN_PROGRAM_TEXEL_OFFSET=35076]="MIN_PROGRAM_TEXEL_OFFSET",id[id.MAX_PROGRAM_TEXEL_OFFSET=35077]="MAX_PROGRAM_TEXEL_OFFSET",id[id.MAX_VARYING_COMPONENTS=35659]="MAX_VARYING_COMPONENTS",id[id.FRAGMENT_SHADER_DERIVATIVE_HINT=35723]="FRAGMENT_SHADER_DERIVATIVE_HINT",id[id.RASTERIZER_DISCARD=35977]="RASTERIZER_DISCARD",id[id.VERTEX_ARRAY_BINDING=34229]="VERTEX_ARRAY_BINDING",id[id.MAX_VERTEX_OUTPUT_COMPONENTS=37154]="MAX_VERTEX_OUTPUT_COMPONENTS",id[id.MAX_FRAGMENT_INPUT_COMPONENTS=37157]="MAX_FRAGMENT_INPUT_COMPONENTS",id[id.MAX_SERVER_WAIT_TIMEOUT=37137]="MAX_SERVER_WAIT_TIMEOUT",id[id.MAX_ELEMENT_INDEX=36203]="MAX_ELEMENT_INDEX",id[id.RED=6403]="RED",id[id.RGB8=32849]="RGB8",id[id.RGBA8=32856]="RGBA8",id[id.RGB10_A2=32857]="RGB10_A2",id[id.TEXTURE_3D=32879]="TEXTURE_3D",id[id.TEXTURE_WRAP_R=32882]="TEXTURE_WRAP_R",id[id.TEXTURE_MIN_LOD=33082]="TEXTURE_MIN_LOD",id[id.TEXTURE_MAX_LOD=33083]="TEXTURE_MAX_LOD",id[id.TEXTURE_BASE_LEVEL=33084]="TEXTURE_BASE_LEVEL",id[id.TEXTURE_MAX_LEVEL=33085]="TEXTURE_MAX_LEVEL",id[id.TEXTURE_COMPARE_MODE=34892]="TEXTURE_COMPARE_MODE",id[id.TEXTURE_COMPARE_FUNC=34893]="TEXTURE_COMPARE_FUNC",id[id.SRGB=35904]="SRGB",id[id.SRGB8=35905]="SRGB8",id[id.SRGB8_ALPHA8=35907]="SRGB8_ALPHA8",id[id.COMPARE_REF_TO_TEXTURE=34894]="COMPARE_REF_TO_TEXTURE",id[id.RGBA32F=34836]="RGBA32F",id[id.RGB32F=34837]="RGB32F",id[id.RGBA16F=34842]="RGBA16F",id[id.RGB16F=34843]="RGB16F",id[id.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",id[id.TEXTURE_BINDING_2D_ARRAY=35869]="TEXTURE_BINDING_2D_ARRAY",id[id.R11F_G11F_B10F=35898]="R11F_G11F_B10F",id[id.RGB9_E5=35901]="RGB9_E5",id[id.RGBA32UI=36208]="RGBA32UI",id[id.RGB32UI=36209]="RGB32UI",id[id.RGBA16UI=36214]="RGBA16UI",id[id.RGB16UI=36215]="RGB16UI",id[id.RGBA8UI=36220]="RGBA8UI",id[id.RGB8UI=36221]="RGB8UI",id[id.RGBA32I=36226]="RGBA32I",id[id.RGB32I=36227]="RGB32I",id[id.RGBA16I=36232]="RGBA16I",id[id.RGB16I=36233]="RGB16I",id[id.RGBA8I=36238]="RGBA8I",id[id.RGB8I=36239]="RGB8I",id[id.RED_INTEGER=36244]="RED_INTEGER",id[id.RGB_INTEGER=36248]="RGB_INTEGER",id[id.RGBA_INTEGER=36249]="RGBA_INTEGER",id[id.R8=33321]="R8",id[id.RG8=33323]="RG8",id[id.R16F=33325]="R16F",id[id.R32F=33326]="R32F",id[id.RG16F=33327]="RG16F",id[id.RG32F=33328]="RG32F",id[id.R8I=33329]="R8I",id[id.R8UI=33330]="R8UI",id[id.R16I=33331]="R16I",id[id.R16UI=33332]="R16UI",id[id.R32I=33333]="R32I",id[id.R32UI=33334]="R32UI",id[id.RG8I=33335]="RG8I",id[id.RG8UI=33336]="RG8UI",id[id.RG16I=33337]="RG16I",id[id.RG16UI=33338]="RG16UI",id[id.RG32I=33339]="RG32I",id[id.RG32UI=33340]="RG32UI",id[id.R8_SNORM=36756]="R8_SNORM",id[id.RG8_SNORM=36757]="RG8_SNORM",id[id.RGB8_SNORM=36758]="RGB8_SNORM",id[id.RGBA8_SNORM=36759]="RGBA8_SNORM",id[id.RGB10_A2UI=36975]="RGB10_A2UI",id[id.TEXTURE_IMMUTABLE_FORMAT=37167]="TEXTURE_IMMUTABLE_FORMAT",id[id.TEXTURE_IMMUTABLE_LEVELS=33503]="TEXTURE_IMMUTABLE_LEVELS",id[id.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",id[id.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",id[id.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",id[id.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",id[id.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",id[id.HALF_FLOAT=5131]="HALF_FLOAT",id[id.RG=33319]="RG",id[id.RG_INTEGER=33320]="RG_INTEGER",id[id.INT_2_10_10_10_REV=36255]="INT_2_10_10_10_REV",id[id.CURRENT_QUERY=34917]="CURRENT_QUERY",id[id.QUERY_RESULT=34918]="QUERY_RESULT",id[id.QUERY_RESULT_AVAILABLE=34919]="QUERY_RESULT_AVAILABLE",id[id.ANY_SAMPLES_PASSED=35887]="ANY_SAMPLES_PASSED",id[id.ANY_SAMPLES_PASSED_CONSERVATIVE=36202]="ANY_SAMPLES_PASSED_CONSERVATIVE",id[id.MAX_DRAW_BUFFERS=34852]="MAX_DRAW_BUFFERS",id[id.DRAW_BUFFER0=34853]="DRAW_BUFFER0",id[id.DRAW_BUFFER1=34854]="DRAW_BUFFER1",id[id.DRAW_BUFFER2=34855]="DRAW_BUFFER2",id[id.DRAW_BUFFER3=34856]="DRAW_BUFFER3",id[id.DRAW_BUFFER4=34857]="DRAW_BUFFER4",id[id.DRAW_BUFFER5=34858]="DRAW_BUFFER5",id[id.DRAW_BUFFER6=34859]="DRAW_BUFFER6",id[id.DRAW_BUFFER7=34860]="DRAW_BUFFER7",id[id.DRAW_BUFFER8=34861]="DRAW_BUFFER8",id[id.DRAW_BUFFER9=34862]="DRAW_BUFFER9",id[id.DRAW_BUFFER10=34863]="DRAW_BUFFER10",id[id.DRAW_BUFFER11=34864]="DRAW_BUFFER11",id[id.DRAW_BUFFER12=34865]="DRAW_BUFFER12",id[id.DRAW_BUFFER13=34866]="DRAW_BUFFER13",id[id.DRAW_BUFFER14=34867]="DRAW_BUFFER14",id[id.DRAW_BUFFER15=34868]="DRAW_BUFFER15",id[id.MAX_COLOR_ATTACHMENTS=36063]="MAX_COLOR_ATTACHMENTS",id[id.COLOR_ATTACHMENT1=36065]="COLOR_ATTACHMENT1",id[id.COLOR_ATTACHMENT2=36066]="COLOR_ATTACHMENT2",id[id.COLOR_ATTACHMENT3=36067]="COLOR_ATTACHMENT3",id[id.COLOR_ATTACHMENT4=36068]="COLOR_ATTACHMENT4",id[id.COLOR_ATTACHMENT5=36069]="COLOR_ATTACHMENT5",id[id.COLOR_ATTACHMENT6=36070]="COLOR_ATTACHMENT6",id[id.COLOR_ATTACHMENT7=36071]="COLOR_ATTACHMENT7",id[id.COLOR_ATTACHMENT8=36072]="COLOR_ATTACHMENT8",id[id.COLOR_ATTACHMENT9=36073]="COLOR_ATTACHMENT9",id[id.COLOR_ATTACHMENT10=36074]="COLOR_ATTACHMENT10",id[id.COLOR_ATTACHMENT11=36075]="COLOR_ATTACHMENT11",id[id.COLOR_ATTACHMENT12=36076]="COLOR_ATTACHMENT12",id[id.COLOR_ATTACHMENT13=36077]="COLOR_ATTACHMENT13",id[id.COLOR_ATTACHMENT14=36078]="COLOR_ATTACHMENT14",id[id.COLOR_ATTACHMENT15=36079]="COLOR_ATTACHMENT15",id[id.SAMPLER_3D=35679]="SAMPLER_3D",id[id.SAMPLER_2D_SHADOW=35682]="SAMPLER_2D_SHADOW",id[id.SAMPLER_2D_ARRAY=36289]="SAMPLER_2D_ARRAY",id[id.SAMPLER_2D_ARRAY_SHADOW=36292]="SAMPLER_2D_ARRAY_SHADOW",id[id.SAMPLER_CUBE_SHADOW=36293]="SAMPLER_CUBE_SHADOW",id[id.INT_SAMPLER_2D=36298]="INT_SAMPLER_2D",id[id.INT_SAMPLER_3D=36299]="INT_SAMPLER_3D",id[id.INT_SAMPLER_CUBE=36300]="INT_SAMPLER_CUBE",id[id.INT_SAMPLER_2D_ARRAY=36303]="INT_SAMPLER_2D_ARRAY",id[id.UNSIGNED_INT_SAMPLER_2D=36306]="UNSIGNED_INT_SAMPLER_2D",id[id.UNSIGNED_INT_SAMPLER_3D=36307]="UNSIGNED_INT_SAMPLER_3D",id[id.UNSIGNED_INT_SAMPLER_CUBE=36308]="UNSIGNED_INT_SAMPLER_CUBE",id[id.UNSIGNED_INT_SAMPLER_2D_ARRAY=36311]="UNSIGNED_INT_SAMPLER_2D_ARRAY",id[id.MAX_SAMPLES=36183]="MAX_SAMPLES",id[id.SAMPLER_BINDING=35097]="SAMPLER_BINDING",id[id.PIXEL_PACK_BUFFER=35051]="PIXEL_PACK_BUFFER",id[id.PIXEL_UNPACK_BUFFER=35052]="PIXEL_UNPACK_BUFFER",id[id.PIXEL_PACK_BUFFER_BINDING=35053]="PIXEL_PACK_BUFFER_BINDING",id[id.PIXEL_UNPACK_BUFFER_BINDING=35055]="PIXEL_UNPACK_BUFFER_BINDING",id[id.COPY_READ_BUFFER=36662]="COPY_READ_BUFFER",id[id.COPY_WRITE_BUFFER=36663]="COPY_WRITE_BUFFER",id[id.COPY_READ_BUFFER_BINDING=36662]="COPY_READ_BUFFER_BINDING",id[id.COPY_WRITE_BUFFER_BINDING=36663]="COPY_WRITE_BUFFER_BINDING",id[id.FLOAT_MAT2x3=35685]="FLOAT_MAT2x3",id[id.FLOAT_MAT2x4=35686]="FLOAT_MAT2x4",id[id.FLOAT_MAT3x2=35687]="FLOAT_MAT3x2",id[id.FLOAT_MAT3x4=35688]="FLOAT_MAT3x4",id[id.FLOAT_MAT4x2=35689]="FLOAT_MAT4x2",id[id.FLOAT_MAT4x3=35690]="FLOAT_MAT4x3",id[id.UNSIGNED_INT_VEC2=36294]="UNSIGNED_INT_VEC2",id[id.UNSIGNED_INT_VEC3=36295]="UNSIGNED_INT_VEC3",id[id.UNSIGNED_INT_VEC4=36296]="UNSIGNED_INT_VEC4",id[id.UNSIGNED_NORMALIZED=35863]="UNSIGNED_NORMALIZED",id[id.SIGNED_NORMALIZED=36764]="SIGNED_NORMALIZED",id[id.VERTEX_ATTRIB_ARRAY_INTEGER=35069]="VERTEX_ATTRIB_ARRAY_INTEGER",id[id.VERTEX_ATTRIB_ARRAY_DIVISOR=35070]="VERTEX_ATTRIB_ARRAY_DIVISOR",id[id.TRANSFORM_FEEDBACK_BUFFER_MODE=35967]="TRANSFORM_FEEDBACK_BUFFER_MODE",id[id.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS=35968]="MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",id[id.TRANSFORM_FEEDBACK_VARYINGS=35971]="TRANSFORM_FEEDBACK_VARYINGS",id[id.TRANSFORM_FEEDBACK_BUFFER_START=35972]="TRANSFORM_FEEDBACK_BUFFER_START",id[id.TRANSFORM_FEEDBACK_BUFFER_SIZE=35973]="TRANSFORM_FEEDBACK_BUFFER_SIZE",id[id.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN=35976]="TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",id[id.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS=35978]="MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",id[id.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS=35979]="MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",id[id.INTERLEAVED_ATTRIBS=35980]="INTERLEAVED_ATTRIBS",id[id.SEPARATE_ATTRIBS=35981]="SEPARATE_ATTRIBS",id[id.TRANSFORM_FEEDBACK_BUFFER=35982]="TRANSFORM_FEEDBACK_BUFFER",id[id.TRANSFORM_FEEDBACK_BUFFER_BINDING=35983]="TRANSFORM_FEEDBACK_BUFFER_BINDING",id[id.TRANSFORM_FEEDBACK=36386]="TRANSFORM_FEEDBACK",id[id.TRANSFORM_FEEDBACK_PAUSED=36387]="TRANSFORM_FEEDBACK_PAUSED",id[id.TRANSFORM_FEEDBACK_ACTIVE=36388]="TRANSFORM_FEEDBACK_ACTIVE",id[id.TRANSFORM_FEEDBACK_BINDING=36389]="TRANSFORM_FEEDBACK_BINDING",id[id.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING=33296]="FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",id[id.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE=33297]="FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",id[id.FRAMEBUFFER_ATTACHMENT_RED_SIZE=33298]="FRAMEBUFFER_ATTACHMENT_RED_SIZE",id[id.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE=33299]="FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",id[id.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE=33300]="FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",id[id.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE=33301]="FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",id[id.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE=33302]="FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",id[id.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE=33303]="FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",id[id.FRAMEBUFFER_DEFAULT=33304]="FRAMEBUFFER_DEFAULT",id[id.DEPTH24_STENCIL8=35056]="DEPTH24_STENCIL8",id[id.DRAW_FRAMEBUFFER_BINDING=36006]="DRAW_FRAMEBUFFER_BINDING",id[id.READ_FRAMEBUFFER_BINDING=36010]="READ_FRAMEBUFFER_BINDING",id[id.RENDERBUFFER_SAMPLES=36011]="RENDERBUFFER_SAMPLES",id[id.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER=36052]="FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",id[id.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE=36182]="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",id[id.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",id[id.UNIFORM_BUFFER_BINDING=35368]="UNIFORM_BUFFER_BINDING",id[id.UNIFORM_BUFFER_START=35369]="UNIFORM_BUFFER_START",id[id.UNIFORM_BUFFER_SIZE=35370]="UNIFORM_BUFFER_SIZE",id[id.MAX_VERTEX_UNIFORM_BLOCKS=35371]="MAX_VERTEX_UNIFORM_BLOCKS",id[id.MAX_FRAGMENT_UNIFORM_BLOCKS=35373]="MAX_FRAGMENT_UNIFORM_BLOCKS",id[id.MAX_COMBINED_UNIFORM_BLOCKS=35374]="MAX_COMBINED_UNIFORM_BLOCKS",id[id.MAX_UNIFORM_BUFFER_BINDINGS=35375]="MAX_UNIFORM_BUFFER_BINDINGS",id[id.MAX_UNIFORM_BLOCK_SIZE=35376]="MAX_UNIFORM_BLOCK_SIZE",id[id.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS=35377]="MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",id[id.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS=35379]="MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",id[id.UNIFORM_BUFFER_OFFSET_ALIGNMENT=35380]="UNIFORM_BUFFER_OFFSET_ALIGNMENT",id[id.ACTIVE_UNIFORM_BLOCKS=35382]="ACTIVE_UNIFORM_BLOCKS",id[id.UNIFORM_TYPE=35383]="UNIFORM_TYPE",id[id.UNIFORM_SIZE=35384]="UNIFORM_SIZE",id[id.UNIFORM_BLOCK_INDEX=35386]="UNIFORM_BLOCK_INDEX",id[id.UNIFORM_OFFSET=35387]="UNIFORM_OFFSET",id[id.UNIFORM_ARRAY_STRIDE=35388]="UNIFORM_ARRAY_STRIDE",id[id.UNIFORM_MATRIX_STRIDE=35389]="UNIFORM_MATRIX_STRIDE",id[id.UNIFORM_IS_ROW_MAJOR=35390]="UNIFORM_IS_ROW_MAJOR",id[id.UNIFORM_BLOCK_BINDING=35391]="UNIFORM_BLOCK_BINDING",id[id.UNIFORM_BLOCK_DATA_SIZE=35392]="UNIFORM_BLOCK_DATA_SIZE",id[id.UNIFORM_BLOCK_ACTIVE_UNIFORMS=35394]="UNIFORM_BLOCK_ACTIVE_UNIFORMS",id[id.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES=35395]="UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",id[id.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER=35396]="UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",id[id.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER=35398]="UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",id[id.OBJECT_TYPE=37138]="OBJECT_TYPE",id[id.SYNC_CONDITION=37139]="SYNC_CONDITION",id[id.SYNC_STATUS=37140]="SYNC_STATUS",id[id.SYNC_FLAGS=37141]="SYNC_FLAGS",id[id.SYNC_FENCE=37142]="SYNC_FENCE",id[id.SYNC_GPU_COMMANDS_COMPLETE=37143]="SYNC_GPU_COMMANDS_COMPLETE",id[id.UNSIGNALED=37144]="UNSIGNALED",id[id.SIGNALED=37145]="SIGNALED",id[id.ALREADY_SIGNALED=37146]="ALREADY_SIGNALED",id[id.TIMEOUT_EXPIRED=37147]="TIMEOUT_EXPIRED",id[id.CONDITION_SATISFIED=37148]="CONDITION_SATISFIED",id[id.WAIT_FAILED=37149]="WAIT_FAILED",id[id.SYNC_FLUSH_COMMANDS_BIT=1]="SYNC_FLUSH_COMMANDS_BIT",id[id.COLOR=6144]="COLOR",id[id.DEPTH=6145]="DEPTH",id[id.STENCIL=6146]="STENCIL",id[id.MIN=32775]="MIN",id[id.MAX=32776]="MAX",id[id.DEPTH_COMPONENT24=33190]="DEPTH_COMPONENT24",id[id.STREAM_READ=35041]="STREAM_READ",id[id.STREAM_COPY=35042]="STREAM_COPY",id[id.STATIC_READ=35045]="STATIC_READ",id[id.STATIC_COPY=35046]="STATIC_COPY",id[id.DYNAMIC_READ=35049]="DYNAMIC_READ",id[id.DYNAMIC_COPY=35050]="DYNAMIC_COPY",id[id.DEPTH_COMPONENT32F=36012]="DEPTH_COMPONENT32F",id[id.DEPTH32F_STENCIL8=36013]="DEPTH32F_STENCIL8",id[id.INVALID_INDEX=4294967295]="INVALID_INDEX",id[id.TIMEOUT_IGNORED=-1]="TIMEOUT_IGNORED",id[id.MAX_CLIENT_WAIT_TIMEOUT_WEBGL=37447]="MAX_CLIENT_WAIT_TIMEOUT_WEBGL",id[id.UNMASKED_VENDOR_WEBGL=37445]="UNMASKED_VENDOR_WEBGL",id[id.UNMASKED_RENDERER_WEBGL=37446]="UNMASKED_RENDERER_WEBGL",id[id.MAX_TEXTURE_MAX_ANISOTROPY_EXT=34047]="MAX_TEXTURE_MAX_ANISOTROPY_EXT",id[id.TEXTURE_MAX_ANISOTROPY_EXT=34046]="TEXTURE_MAX_ANISOTROPY_EXT",id[id.R16_EXT=33322]="R16_EXT",id[id.RG16_EXT=33324]="RG16_EXT",id[id.RGB16_EXT=32852]="RGB16_EXT",id[id.RGBA16_EXT=32859]="RGBA16_EXT",id[id.R16_SNORM_EXT=36760]="R16_SNORM_EXT",id[id.RG16_SNORM_EXT=36761]="RG16_SNORM_EXT",id[id.RGB16_SNORM_EXT=36762]="RGB16_SNORM_EXT",id[id.RGBA16_SNORM_EXT=36763]="RGBA16_SNORM_EXT",id[id.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",id[id.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",id[id.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",id[id.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",id[id.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",id[id.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",id[id.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",id[id.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",id[id.COMPRESSED_RED_RGTC1_EXT=36283]="COMPRESSED_RED_RGTC1_EXT",id[id.COMPRESSED_SIGNED_RED_RGTC1_EXT=36284]="COMPRESSED_SIGNED_RED_RGTC1_EXT",id[id.COMPRESSED_RED_GREEN_RGTC2_EXT=36285]="COMPRESSED_RED_GREEN_RGTC2_EXT",id[id.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT=36286]="COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT",id[id.COMPRESSED_RGBA_BPTC_UNORM_EXT=36492]="COMPRESSED_RGBA_BPTC_UNORM_EXT",id[id.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=36493]="COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT",id[id.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT=36494]="COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT",id[id.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT=36495]="COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT",id[id.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",id[id.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",id[id.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",id[id.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",id[id.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",id[id.COMPRESSED_RGBA8_ETC2_EAC=37493]="COMPRESSED_RGBA8_ETC2_EAC",id[id.COMPRESSED_SRGB8_ETC2=37494]="COMPRESSED_SRGB8_ETC2",id[id.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37495]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",id[id.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37496]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",id[id.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37497]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",id[id.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",id[id.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",id[id.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",id[id.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",id[id.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",id[id.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",id[id.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35986]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",id[id.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",id[id.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR",id[id.COMPRESSED_RGBA_ASTC_5x4_KHR=37809]="COMPRESSED_RGBA_ASTC_5x4_KHR",id[id.COMPRESSED_RGBA_ASTC_5x5_KHR=37810]="COMPRESSED_RGBA_ASTC_5x5_KHR",id[id.COMPRESSED_RGBA_ASTC_6x5_KHR=37811]="COMPRESSED_RGBA_ASTC_6x5_KHR",id[id.COMPRESSED_RGBA_ASTC_6x6_KHR=37812]="COMPRESSED_RGBA_ASTC_6x6_KHR",id[id.COMPRESSED_RGBA_ASTC_8x5_KHR=37813]="COMPRESSED_RGBA_ASTC_8x5_KHR",id[id.COMPRESSED_RGBA_ASTC_8x6_KHR=37814]="COMPRESSED_RGBA_ASTC_8x6_KHR",id[id.COMPRESSED_RGBA_ASTC_8x8_KHR=37815]="COMPRESSED_RGBA_ASTC_8x8_KHR",id[id.COMPRESSED_RGBA_ASTC_10x5_KHR=37816]="COMPRESSED_RGBA_ASTC_10x5_KHR",id[id.COMPRESSED_RGBA_ASTC_10x6_KHR=37817]="COMPRESSED_RGBA_ASTC_10x6_KHR",id[id.COMPRESSED_RGBA_ASTC_10x8_KHR=37818]="COMPRESSED_RGBA_ASTC_10x8_KHR",id[id.COMPRESSED_RGBA_ASTC_10x10_KHR=37819]="COMPRESSED_RGBA_ASTC_10x10_KHR",id[id.COMPRESSED_RGBA_ASTC_12x10_KHR=37820]="COMPRESSED_RGBA_ASTC_12x10_KHR",id[id.COMPRESSED_RGBA_ASTC_12x12_KHR=37821]="COMPRESSED_RGBA_ASTC_12x12_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=37840]="COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=37841]="COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=37842]="COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=37843]="COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=37844]="COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=37845]="COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=37846]="COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=37847]="COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=37848]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=37849]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=37850]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=37851]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=37852]="COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR",id[id.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=37853]="COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR",id[id.QUERY_COUNTER_BITS_EXT=34916]="QUERY_COUNTER_BITS_EXT",id[id.CURRENT_QUERY_EXT=34917]="CURRENT_QUERY_EXT",id[id.QUERY_RESULT_EXT=34918]="QUERY_RESULT_EXT",id[id.QUERY_RESULT_AVAILABLE_EXT=34919]="QUERY_RESULT_AVAILABLE_EXT",id[id.TIME_ELAPSED_EXT=35007]="TIME_ELAPSED_EXT",id[id.TIMESTAMP_EXT=36392]="TIMESTAMP_EXT",id[id.GPU_DISJOINT_EXT=36795]="GPU_DISJOINT_EXT",id[id.COMPLETION_STATUS_KHR=37297]="COMPLETION_STATUS_KHR",id[id.DEPTH_CLAMP_EXT=34383]="DEPTH_CLAMP_EXT",id[id.FIRST_VERTEX_CONVENTION_WEBGL=36429]="FIRST_VERTEX_CONVENTION_WEBGL",id[id.LAST_VERTEX_CONVENTION_WEBGL=36430]="LAST_VERTEX_CONVENTION_WEBGL",id[id.PROVOKING_VERTEX_WEBL=36431]="PROVOKING_VERTEX_WEBL",id[id.POLYGON_MODE_WEBGL=2880]="POLYGON_MODE_WEBGL",id[id.POLYGON_OFFSET_LINE_WEBGL=10754]="POLYGON_OFFSET_LINE_WEBGL",id[id.LINE_WEBGL=6913]="LINE_WEBGL",id[id.FILL_WEBGL=6914]="FILL_WEBGL",id[id.MAX_CLIP_DISTANCES_WEBGL=3378]="MAX_CLIP_DISTANCES_WEBGL",id[id.MAX_CULL_DISTANCES_WEBGL=33529]="MAX_CULL_DISTANCES_WEBGL",id[id.MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL=33530]="MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL",id[id.CLIP_DISTANCE0_WEBGL=12288]="CLIP_DISTANCE0_WEBGL",id[id.CLIP_DISTANCE1_WEBGL=12289]="CLIP_DISTANCE1_WEBGL",id[id.CLIP_DISTANCE2_WEBGL=12290]="CLIP_DISTANCE2_WEBGL",id[id.CLIP_DISTANCE3_WEBGL=12291]="CLIP_DISTANCE3_WEBGL",id[id.CLIP_DISTANCE4_WEBGL=12292]="CLIP_DISTANCE4_WEBGL",id[id.CLIP_DISTANCE5_WEBGL=12293]="CLIP_DISTANCE5_WEBGL",id[id.CLIP_DISTANCE6_WEBGL=12294]="CLIP_DISTANCE6_WEBGL",id[id.CLIP_DISTANCE7_WEBGL=12295]="CLIP_DISTANCE7_WEBGL",id[id.POLYGON_OFFSET_CLAMP_EXT=36379]="POLYGON_OFFSET_CLAMP_EXT",id[id.LOWER_LEFT_EXT=36001]="LOWER_LEFT_EXT",id[id.UPPER_LEFT_EXT=36002]="UPPER_LEFT_EXT",id[id.NEGATIVE_ONE_TO_ONE_EXT=37726]="NEGATIVE_ONE_TO_ONE_EXT",id[id.ZERO_TO_ONE_EXT=37727]="ZERO_TO_ONE_EXT",id[id.CLIP_ORIGIN_EXT=37724]="CLIP_ORIGIN_EXT",id[id.CLIP_DEPTH_MODE_EXT=37725]="CLIP_DEPTH_MODE_EXT",id[id.SRC1_COLOR_WEBGL=35065]="SRC1_COLOR_WEBGL",id[id.SRC1_ALPHA_WEBGL=34185]="SRC1_ALPHA_WEBGL",id[id.ONE_MINUS_SRC1_COLOR_WEBGL=35066]="ONE_MINUS_SRC1_COLOR_WEBGL",id[id.ONE_MINUS_SRC1_ALPHA_WEBGL=35067]="ONE_MINUS_SRC1_ALPHA_WEBGL",id[id.MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL=35068]="MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL",id[id.MIRROR_CLAMP_TO_EDGE_EXT=34627]="MIRROR_CLAMP_TO_EDGE_EXT";const sd={WEBGL_depth_texture:{UNSIGNED_INT_24_8_WEBGL:34042},OES_element_index_uint:{},OES_texture_float:{},OES_texture_half_float:{HALF_FLOAT_OES:5131},EXT_color_buffer_float:{},OES_standard_derivatives:{FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723},EXT_frag_depth:{},EXT_blend_minmax:{MIN_EXT:32775,MAX_EXT:32776},EXT_shader_texture_lod:{}},od=e=>({drawBuffersWEBGL:t=>e.drawBuffers(t),COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067}),ad=e=>({VERTEX_ARRAY_BINDING_OES:34229,createVertexArrayOES:()=>e.createVertexArray(),deleteVertexArrayOES:t=>e.deleteVertexArray(t),isVertexArrayOES:t=>e.isVertexArray(t),bindVertexArrayOES:t=>e.bindVertexArray(t)}),Ad=e=>({VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,drawArraysInstancedANGLE:(...t)=>e.drawArraysInstanced(...t),drawElementsInstancedANGLE:(...t)=>e.drawElementsInstanced(...t),vertexAttribDivisorANGLE:(...t)=>e.vertexAttribDivisor(...t)});async function ld(e,t){const n=document.getElementsByTagName("head")[0];if(!n)throw new Error("loadScript");const r=document.createElement("script");return r.setAttribute("type","text/javascript"),r.setAttribute("src",e),new Promise((t,i)=>{r.onload=t,r.onerror=t=>i(new Error(`Unable to load script '${e}': ${t}`)),n.appendChild(r)})}let cd=null,ud=!1;const hd={debugSpectorJS:Pr.get("debug-spectorjs"),debugSpectorJSUrl:"https://cdn.jsdelivr.net/npm/spectorjs@0.9.30/dist/spector.bundle.js",gl:void 0};function dd(e){return e.luma=e.luma||{},e.luma}function fd(e,t={}){return t.debugWebGL||t.traceWebGL?function(e,t){if(!globalThis.WebGLDebugUtils)return Pr.warn("webgl-debug not loaded")(),e;const n=dd(e);if(n.debugContext)return n.debugContext;globalThis.WebGLDebugUtils.init({...rd,...e});const r=globalThis.WebGLDebugUtils.makeDebugContext(e,gd.bind(null,t),md.bind(null,t));for(const o in rd)o in r||"number"!=typeof rd[o]||(r[o]=rd[o]);class i{}Object.setPrototypeOf(r,Object.getPrototypeOf(e)),Object.setPrototypeOf(i,r);const s=Object.create(i);return n.realContext=e,n.debugContext=s,s.debug=!0,s}(e,t):function(e){const t=dd(e);return t.realContext?t.realContext:e}(e)}function pd(e,t){t=Array.from(t).map(e=>void 0===e?"undefined":e);let n=globalThis.WebGLDebugUtils.glFunctionArgsToString(e,t);return n=`${n.slice(0,100)}${n.length>100?"...":""}`,`gl.${e}(${n})`}function gd(e,t,n,r){r=Array.from(r).map(e=>void 0===e?"undefined":e);const i=`${globalThis.WebGLDebugUtils.glEnumToString(t)} in gl.${n}(${globalThis.WebGLDebugUtils.glFunctionArgsToString(n,r)})`;Pr.error(i)()}function md(e,t,n){let r="";Pr.level>=1&&(r=pd(t,n),e.traceWebGL&&Pr.log(1,r)());for(const i of n)void 0===i&&(r=r||pd(t,n))}const _d=new class extends fi{constructor(){super(),r(this,"type","webgl"),ci.defaultProps={...ci.defaultProps,...hd}}enforceWebGL2(e){!function(e=!0){const t=HTMLCanvasElement.prototype;if(!e&&t.originalGetContext)return t.getContext=t.originalGetContext,void(t.originalGetContext=void 0);t.originalGetContext=t.getContext,t.getContext=function(e,t){if("webgl"===e||"experimental-webgl"===e){const e=this.originalGetContext("webgl2",t);return e instanceof HTMLElement&&function(e){e.getExtension("EXT_color_buffer_float");const t={...sd,WEBGL_disjoint_timer_query:e.getExtension("EXT_disjoint_timer_query_webgl2"),WEBGL_draw_buffers:od(e),OES_vertex_array_object:ad(e),ANGLE_instanced_arrays:Ad(e)},n=e.getExtension;e.getExtension=function(r){return n.call(e,r)||(r in t?t[r]:null)};const r=e.getSupportedExtensions;e.getSupportedExtensions=function(){const n=r.apply(e)||[];return null==n?void 0:n.concat(Object.keys(t))}}(e),e}return this.originalGetContext(e,t)}}(e)}isSupported(){return"undefined"!=typeof WebGL2RenderingContext}isDeviceHandle(e){return"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext||("undefined"!=typeof WebGLRenderingContext&&e instanceof WebGLRenderingContext&&Pr.warn("WebGL1 is not supported",e)(),!1)}async attach(e,t={}){const{WebGLDevice:n}=await l(async()=>{const{WebGLDevice:e}=await Promise.resolve().then(()=>qf);return{WebGLDevice:e}},void 0);if(e instanceof n)return e;if((null==e?void 0:e.device)instanceof n)return e.device;if(!function(e){return"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext||Boolean(e&&Number.isFinite(e._version))}(e))throw new Error("Invalid WebGL2RenderingContext");const r=!0===t.createCanvasContext?{}:t.createCanvasContext;return new n({...t,_handle:e,createCanvasContext:{canvas:e.canvas,autoResize:!1,...r}})}async create(e={}){const{WebGLDevice:t}=await l(async()=>{const{WebGLDevice:e}=await Promise.resolve().then(()=>qf);return{WebGLDevice:e}},void 0);Pr.groupCollapsed(1,"WebGLDevice created")();try{const n=[];(e.debugWebGL||e.debug)&&n.push(async function(){Ue()&&!globalThis.WebGLDebugUtils&&(globalThis.global=globalThis.global||globalThis,globalThis.global.module={},await ld("https://unpkg.com/webgl-debug@2.0.1/index.js"))}()),e.debugSpectorJS&&n.push(async function(e){if(!globalThis.SPECTOR)try{await ld(e.debugSpectorJSUrl||hd.debugSpectorJSUrl)}catch(t){Pr.warn(String(t))}}(e));const r=await Promise.allSettled(n);for(const e of r)"rejected"===e.status&&Pr.error(`Failed to initialize debug libraries ${e.reason}`)();const i=new t(e),s=`${i._reused?"Reusing":"Created"} device with WebGL2 ${i.props.debug?"debug ":""}context: ${i.info.vendor}, ${i.info.renderer} for canvas: ${i.canvasContext.id}`;return Pr.probe(1,s)(),Pr.table(1,i.info)(),i}finally{Pr.groupEnd(1)()}}},bd={3042:!1,32773:new Float32Array([0,0,0,0]),32777:32774,34877:32774,32969:1,32968:0,32971:1,32970:0,3106:new Float32Array([0,0,0,0]),3107:[!0,!0,!0,!0],2884:!1,2885:1029,2929:!1,2931:1,2932:513,2928:new Float32Array([0,1]),2930:!0,3024:!0,35725:null,36006:null,36007:null,34229:null,34964:null,2886:2305,33170:4352,2849:1,32823:!1,32824:0,10752:0,32926:!1,32928:!1,32938:1,32939:!1,3089:!1,3088:new Int32Array([0,0,1024,1024]),2960:!1,2961:0,2968:4294967295,36005:4294967295,2962:519,2967:0,2963:4294967295,34816:519,36003:0,36004:4294967295,2964:7680,2965:7680,2966:7680,34817:7680,34818:7680,34819:7680,2978:[0,0,1024,1024],36389:null,36662:null,36663:null,35053:null,35055:null,35723:4352,36010:null,35977:!1,3333:4,3317:4,37440:!1,37441:!1,37443:37444,3330:0,3332:0,3331:0,3314:0,32878:0,3316:0,3315:0,32877:0},vd=(e,t,n)=>t?e.enable(n):e.disable(n),yd=(e,t,n)=>e.hint(n,t),wd=(e,t,n)=>e.pixelStorei(n,t),xd=(e,t,n)=>{const r=36006===n?36009:36008;return e.bindFramebuffer(r,t)},Ed=(e,t,n)=>{const r={34964:34962,36662:36662,36663:36663,35053:35051,35055:35052}[n];e.bindBuffer(r,t)};function Td(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}const Sd={3042:vd,32773:(e,t)=>e.blendColor(...t),32777:"blendEquation",34877:"blendEquation",32969:"blendFunc",32968:"blendFunc",32971:"blendFunc",32970:"blendFunc",3106:(e,t)=>e.clearColor(...t),3107:(e,t)=>e.colorMask(...t),2884:vd,2885:(e,t)=>e.cullFace(t),2929:vd,2931:(e,t)=>e.clearDepth(t),2932:(e,t)=>e.depthFunc(t),2928:(e,t)=>e.depthRange(...t),2930:(e,t)=>e.depthMask(t),3024:vd,35723:yd,35725:(e,t)=>e.useProgram(t),36007:(e,t)=>e.bindRenderbuffer(36161,t),36389:(e,t)=>{var n;return null==(n=e.bindTransformFeedback)?void 0:n.call(e,36386,t)},34229:(e,t)=>e.bindVertexArray(t),36006:xd,36010:xd,34964:Ed,36662:Ed,36663:Ed,35053:Ed,35055:Ed,2886:(e,t)=>e.frontFace(t),33170:yd,2849:(e,t)=>e.lineWidth(t),32823:vd,32824:"polygonOffset",10752:"polygonOffset",35977:vd,32926:vd,32928:vd,32938:"sampleCoverage",32939:"sampleCoverage",3089:vd,3088:(e,t)=>e.scissor(...t),2960:vd,2961:(e,t)=>e.clearStencil(t),2968:(e,t)=>e.stencilMaskSeparate(1028,t),36005:(e,t)=>e.stencilMaskSeparate(1029,t),2962:"stencilFuncFront",2967:"stencilFuncFront",2963:"stencilFuncFront",34816:"stencilFuncBack",36003:"stencilFuncBack",36004:"stencilFuncBack",2964:"stencilOpFront",2965:"stencilOpFront",2966:"stencilOpFront",34817:"stencilOpBack",34818:"stencilOpBack",34819:"stencilOpBack",2978:(e,t)=>e.viewport(...t),34383:vd,10754:vd,12288:vd,12289:vd,12290:vd,12291:vd,12292:vd,12293:vd,12294:vd,12295:vd,3333:wd,3317:wd,37440:wd,37441:wd,37443:wd,3330:wd,3332:wd,3331:wd,3314:wd,32878:wd,3316:wd,3315:wd,32877:wd,framebuffer:(e,t)=>{const n=t&&"handle"in t?t.handle:t;return e.bindFramebuffer(36160,n)},blend:(e,t)=>t?e.enable(3042):e.disable(3042),blendColor:(e,t)=>e.blendColor(...t),blendEquation:(e,t)=>{const n="number"==typeof t?[t,t]:t;e.blendEquationSeparate(...n)},blendFunc:(e,t)=>{const n=2===(null==t?void 0:t.length)?[...t,...t]:t;e.blendFuncSeparate(...n)},clearColor:(e,t)=>e.clearColor(...t),clearDepth:(e,t)=>e.clearDepth(t),clearStencil:(e,t)=>e.clearStencil(t),colorMask:(e,t)=>e.colorMask(...t),cull:(e,t)=>t?e.enable(2884):e.disable(2884),cullFace:(e,t)=>e.cullFace(t),depthTest:(e,t)=>t?e.enable(2929):e.disable(2929),depthFunc:(e,t)=>e.depthFunc(t),depthMask:(e,t)=>e.depthMask(t),depthRange:(e,t)=>e.depthRange(...t),dither:(e,t)=>t?e.enable(3024):e.disable(3024),derivativeHint:(e,t)=>{e.hint(35723,t)},frontFace:(e,t)=>e.frontFace(t),mipmapHint:(e,t)=>e.hint(33170,t),lineWidth:(e,t)=>e.lineWidth(t),polygonOffsetFill:(e,t)=>t?e.enable(32823):e.disable(32823),polygonOffset:(e,t)=>e.polygonOffset(...t),sampleCoverage:(e,t)=>e.sampleCoverage(t[0],t[1]||!1),scissorTest:(e,t)=>t?e.enable(3089):e.disable(3089),scissor:(e,t)=>e.scissor(...t),stencilTest:(e,t)=>t?e.enable(2960):e.disable(2960),stencilMask:(e,t)=>{t=Td(t)?t:[t,t];const[n,r]=t;e.stencilMaskSeparate(1028,n),e.stencilMaskSeparate(1029,r)},stencilFunc:(e,t)=>{t=Td(t)&&3===t.length?[...t,...t]:t;const[n,r,i,s,o,a]=t;e.stencilFuncSeparate(1028,n,r,i),e.stencilFuncSeparate(1029,s,o,a)},stencilOp:(e,t)=>{t=Td(t)&&3===t.length?[...t,...t]:t;const[n,r,i,s,o,a]=t;e.stencilOpSeparate(1028,n,r,i),e.stencilOpSeparate(1029,s,o,a)},viewport:(e,t)=>e.viewport(...t)};function Cd(e,t,n){return void 0!==t[e]?t[e]:n[e]}const kd={blendEquation:(e,t,n)=>e.blendEquationSeparate(Cd(32777,t,n),Cd(34877,t,n)),blendFunc:(e,t,n)=>e.blendFuncSeparate(Cd(32969,t,n),Cd(32968,t,n),Cd(32971,t,n),Cd(32970,t,n)),polygonOffset:(e,t,n)=>e.polygonOffset(Cd(32824,t,n),Cd(10752,t,n)),sampleCoverage:(e,t,n)=>e.sampleCoverage(Cd(32938,t,n),Cd(32939,t,n)),stencilFuncFront:(e,t,n)=>e.stencilFuncSeparate(1028,Cd(2962,t,n),Cd(2967,t,n),Cd(2963,t,n)),stencilFuncBack:(e,t,n)=>e.stencilFuncSeparate(1029,Cd(34816,t,n),Cd(36003,t,n),Cd(36004,t,n)),stencilOpFront:(e,t,n)=>e.stencilOpSeparate(1028,Cd(2964,t,n),Cd(2965,t,n),Cd(2966,t,n)),stencilOpBack:(e,t,n)=>e.stencilOpSeparate(1029,Cd(34817,t,n),Cd(34818,t,n),Cd(34819,t,n))},Rd={enable:(e,t)=>e({[t]:!0}),disable:(e,t)=>e({[t]:!1}),pixelStorei:(e,t,n)=>e({[t]:n}),hint:(e,t,n)=>e({[t]:n}),useProgram:(e,t)=>e({35725:t}),bindRenderbuffer:(e,t,n)=>e({36007:n}),bindTransformFeedback:(e,t,n)=>e({36389:n}),bindVertexArray:(e,t)=>e({34229:t}),bindFramebuffer:(e,t,n)=>{switch(t){case 36160:return e({36006:n,36010:n});case 36009:return e({36006:n});case 36008:return e({36010:n});default:return null}},bindBuffer:(e,t,n)=>{const r={34962:[34964],36662:[36662],36663:[36663],35051:[35053],35052:[35055]}[t];return r?e({[r]:n}):{valueChanged:!0}},blendColor:(e,t,n,r,i)=>e({32773:new Float32Array([t,n,r,i])}),blendEquation:(e,t)=>e({32777:t,34877:t}),blendEquationSeparate:(e,t,n)=>e({32777:t,34877:n}),blendFunc:(e,t,n)=>e({32969:t,32968:n,32971:t,32970:n}),blendFuncSeparate:(e,t,n,r,i)=>e({32969:t,32968:n,32971:r,32970:i}),clearColor:(e,t,n,r,i)=>e({3106:new Float32Array([t,n,r,i])}),clearDepth:(e,t)=>e({2931:t}),clearStencil:(e,t)=>e({2961:t}),colorMask:(e,t,n,r,i)=>e({3107:[t,n,r,i]}),cullFace:(e,t)=>e({2885:t}),depthFunc:(e,t)=>e({2932:t}),depthRange:(e,t,n)=>e({2928:new Float32Array([t,n])}),depthMask:(e,t)=>e({2930:t}),frontFace:(e,t)=>e({2886:t}),lineWidth:(e,t)=>e({2849:t}),polygonOffset:(e,t,n)=>e({32824:t,10752:n}),sampleCoverage:(e,t,n)=>e({32938:t,32939:n}),scissor:(e,t,n,r,i)=>e({3088:new Int32Array([t,n,r,i])}),stencilMask:(e,t)=>e({2968:t,36005:t}),stencilMaskSeparate:(e,t,n)=>e({[1028===t?2968:36005]:n}),stencilFunc:(e,t,n,r)=>e({2962:t,2967:n,2963:r,34816:t,36003:n,36004:r}),stencilFuncSeparate:(e,t,n,r,i)=>e({[1028===t?2962:34816]:n,[1028===t?2967:36003]:r,[1028===t?2963:36004]:i}),stencilOp:(e,t,n,r)=>e({2964:t,2965:n,2966:r,34817:t,34818:n,34819:r}),stencilOpSeparate:(e,t,n,r,i)=>e({[1028===t?2964:34817]:n,[1028===t?2965:34818]:r,[1028===t?2966:34819]:i}),viewport:(e,t,n,r,i)=>e({2978:[t,n,r,i]})},Pd=(e,t)=>e.isEnabled(t),Id={3042:Pd,2884:Pd,2929:Pd,3024:Pd,32823:Pd,32926:Pd,32928:Pd,3089:Pd,2960:Pd,35977:Pd},Md=new Set([34016,36388,36387,35983,35368,34965,35739,35738,3074,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,35097,32873,35869,32874,34068]);function Ld(e,t){if(function(e){for(const t in e)return!1;return!0}(t))return;const n={};for(const i in t){const r=Number(i),s=Sd[i];s&&("string"==typeof s?n[s]=!0:s(e,t[i],r))}const r=e.state&&e.state.cache;if(r)for(const i in n)(0,kd[i])(e,t,r)}function Nd(e,t=bd){if("number"==typeof t){const n=t,r=Id[n];return r?r(e,n):e.getParameter(n)}const n=Array.isArray(t)?t:Object.keys(t),r={};for(const i of n){const t=Id[i];r[i]=t?t(e,Number(i)):e.getParameter(Number(i))}return r}function Bd(e,t){if(e===t)return!0;if(Dd(e)&&Dd(t)&&e.length===t.length){for(let n=0;n{}),this._updateCache=this._updateCache.bind(this),Object.seal(this)}static get(e){return e.state}push(e={}){this.stateStack.push({})}pop(){const e=this.stateStack[this.stateStack.length-1];Ld(this.gl,e),this.stateStack.pop()}trackState(e,t){if(this.cache=(null==t?void 0:t.copyState)?Nd(e):Object.assign({},bd),this.initialized)throw new Error("WebGLStateTracker");this.initialized=!0,this.gl.state=this,function(e){const t=e.useProgram.bind(e);e.useProgram=function(n){const r=Od.get(e);r.program!==n&&(t(n),r.program=n)}}(e);for(const n in Rd)Ud(e,n,Rd[n]);Fd(e,"getParameter"),Fd(e,"isEnabled")}_updateCache(e){let t,n=!1;const r=this.stateStack.length>0?this.stateStack[this.stateStack.length-1]:null;for(const i in e){const s=e[i],o=this.cache[i];Bd(s,o)||(n=!0,t=o,r&&!(i in r)&&(r[i]=o),this.cache[i]=s)}return{valueChanged:n,oldValue:t}}}function Fd(e,t){const n=e[t].bind(e);e[t]=function(t){if(void 0===t||Md.has(t))return n(t);const r=Od.get(e);return t in r.cache||(r.cache[t]=n(t)),r.enable?r.cache[t]:n(t)},Object.defineProperty(e[t],"name",{value:`${t}-from-cache`,configurable:!1})}function Ud(e,t,n){if(!e[t])return;const r=e[t].bind(e);e[t]=function(...t){const i=Od.get(e),{valueChanged:s,oldValue:o}=n(i._updateCache,...t);return s&&r(...t),o},Object.defineProperty(e[t],"name",{value:`${t}-to-cache`,configurable:!1})}function jd(e,t,n){return void 0===n[t]&&(n[t]=e.getExtension(t)||null),n[t]}function Gd(e,t){return/NVIDIA/i.exec(e)||/NVIDIA/i.exec(t)?"nvidia":/INTEL/i.exec(e)||/INTEL/i.exec(t)?"intel":/Apple/i.exec(e)||/Apple/i.exec(t)?"apple":/AMD/i.exec(e)||/AMD/i.exec(t)||/ATI/i.exec(e)||/ATI/i.exec(t)?"amd":/SwiftShader/i.exec(e)||/SwiftShader/i.exec(t)?"software":"unknown"}function zd(e){switch(e){case"uint8":case"unorm8":return 5121;case"sint8":case"snorm8":return 5120;case"uint16":case"unorm16":return 5123;case"sint16":case"snorm16":return 5122;case"uint32":return 5125;case"sint32":return 5124;case"float16":return 5131;case"float32":return 5126}throw new Error(String(e))}const Vd="WEBGL_compressed_texture_s3tc",Wd="WEBGL_compressed_texture_s3tc_srgb",Hd="EXT_texture_compression_rgtc",$d="EXT_texture_compression_bptc",Xd="EXT_texture_norm16",Qd="EXT_render_snorm",Yd={"float32-renderable-webgl":["EXT_color_buffer_float"],"float16-renderable-webgl":["EXT_color_buffer_half_float"],"rgb9e5ufloat-renderable-webgl":["WEBGL_render_shared_exponent"],"snorm8-renderable-webgl":[Qd],"norm16-renderable-webgl":[Xd],"snorm16-renderable-webgl":[Xd,Qd],"float32-filterable":["OES_texture_float_linear"],"float16-filterable-webgl":["OES_texture_half_float_linear"],"texture-filterable-anisotropic-webgl":["EXT_texture_filter_anisotropic"],"texture-blend-float-webgl":["EXT_float_blend"],"texture-compression-bc":[Vd,Wd,Hd,$d],"texture-compression-bc5-webgl":[Hd],"texture-compression-bc7-webgl":[$d],"texture-compression-etc2":["WEBGL_compressed_texture_etc"],"texture-compression-astc":["WEBGL_compressed_texture_astc"],"texture-compression-etc1-webgl":["WEBGL_compressed_texture_etc1"],"texture-compression-pvrtc-webgl":["WEBGL_compressed_texture_pvrtc"],"texture-compression-atc-webgl":["WEBGL_compressed_texture_atc"]},qd={r8unorm:{gl:33321,rb:!0},r8snorm:{gl:36756},r8uint:{gl:33330,rb:!0},r8sint:{gl:33329,rb:!0},rg8unorm:{gl:33323,rb:!0},rg8snorm:{gl:36757},rg8uint:{gl:33336,rb:!0},rg8sint:{gl:33335,rb:!0},r16uint:{gl:33332,rb:!0},r16sint:{gl:33331,rb:!0},r16float:{gl:33325,rb:!0},r16unorm:{gl:33322,rb:!0},r16snorm:{gl:36760},"rgba4unorm-webgl":{gl:32854,rb:!0},"rgb565unorm-webgl":{gl:36194,rb:!0},"rgb5a1unorm-webgl":{gl:32855,rb:!0},"rgb8unorm-webgl":{gl:32849},"rgb8snorm-webgl":{gl:36758},rgba8unorm:{gl:32856},"rgba8unorm-srgb":{gl:35907},rgba8snorm:{gl:36759},rgba8uint:{gl:36220},rgba8sint:{gl:36238},bgra8unorm:{},"bgra8unorm-srgb":{},rg16uint:{gl:33338},rg16sint:{gl:33337},rg16float:{gl:33327,rb:!0},rg16unorm:{gl:33324},rg16snorm:{gl:36761},r32uint:{gl:33334,rb:!0},r32sint:{gl:33333,rb:!0},r32float:{gl:33326},rgb9e5ufloat:{gl:35901},rg11b10ufloat:{gl:35898,rb:!0},rgb10a2unorm:{gl:32857,rb:!0},rgb10a2uint:{gl:36975,rb:!0},"rgb16unorm-webgl":{gl:32852},"rgb16snorm-webgl":{gl:36762},rg32uint:{gl:33340,rb:!0},rg32sint:{gl:33339,rb:!0},rg32float:{gl:33328,rb:!0},rgba16uint:{gl:36214,rb:!0},rgba16sint:{gl:36232,rb:!0},rgba16float:{gl:34842},rgba16unorm:{gl:32859,rb:!0},rgba16snorm:{gl:36763},"rgb32float-webgl":{gl:34837,x:"EXT_color_buffer_float",dataFormat:6407,types:[5126]},rgba32uint:{gl:36208,rb:!0},rgba32sint:{gl:36226,rb:!0},rgba32float:{gl:34836,rb:!0},stencil8:{gl:36168,rb:!0},depth16unorm:{gl:33189,dataFormat:6402,types:[5123],rb:!0},depth24plus:{gl:33190,dataFormat:6402,types:[5125]},depth32float:{gl:36012,dataFormat:6402,types:[5126],rb:!0},"depth24plus-stencil8":{gl:35056,rb:!0,depthTexture:!0,dataFormat:34041,types:[34042]},"depth32float-stencil8":{gl:36013,dataFormat:34041,types:[36269],rb:!0},"bc1-rgb-unorm-webgl":{gl:33776,x:Vd},"bc1-rgb-unorm-srgb-webgl":{gl:35916,x:Wd},"bc1-rgba-unorm":{gl:33777,x:Vd},"bc1-rgba-unorm-srgb":{gl:35916,x:Wd},"bc2-rgba-unorm":{gl:33778,x:Vd},"bc2-rgba-unorm-srgb":{gl:35918,x:Wd},"bc3-rgba-unorm":{gl:33779,x:Vd},"bc3-rgba-unorm-srgb":{gl:35919,x:Wd},"bc4-r-unorm":{gl:36283,x:Hd},"bc4-r-snorm":{gl:36284,x:Hd},"bc5-rg-unorm":{gl:36285,x:Hd},"bc5-rg-snorm":{gl:36286,x:Hd},"bc6h-rgb-ufloat":{gl:36495,x:$d},"bc6h-rgb-float":{gl:36494,x:$d},"bc7-rgba-unorm":{gl:36492,x:$d},"bc7-rgba-unorm-srgb":{gl:36493,x:$d},"etc2-rgb8unorm":{gl:37492},"etc2-rgb8unorm-srgb":{gl:37494},"etc2-rgb8a1unorm":{gl:37496},"etc2-rgb8a1unorm-srgb":{gl:37497},"etc2-rgba8unorm":{gl:37493},"etc2-rgba8unorm-srgb":{gl:37495},"eac-r11unorm":{gl:37488},"eac-r11snorm":{gl:37489},"eac-rg11unorm":{gl:37490},"eac-rg11snorm":{gl:37491},"astc-4x4-unorm":{gl:37808},"astc-4x4-unorm-srgb":{gl:37840},"astc-5x4-unorm":{gl:37809},"astc-5x4-unorm-srgb":{gl:37841},"astc-5x5-unorm":{gl:37810},"astc-5x5-unorm-srgb":{gl:37842},"astc-6x5-unorm":{gl:37811},"astc-6x5-unorm-srgb":{gl:37843},"astc-6x6-unorm":{gl:37812},"astc-6x6-unorm-srgb":{gl:37844},"astc-8x5-unorm":{gl:37813},"astc-8x5-unorm-srgb":{gl:37845},"astc-8x6-unorm":{gl:37814},"astc-8x6-unorm-srgb":{gl:37846},"astc-8x8-unorm":{gl:37815},"astc-8x8-unorm-srgb":{gl:37847},"astc-10x5-unorm":{gl:37819},"astc-10x5-unorm-srgb":{gl:37851},"astc-10x6-unorm":{gl:37817},"astc-10x6-unorm-srgb":{gl:37849},"astc-10x8-unorm":{gl:37818},"astc-10x8-unorm-srgb":{gl:37850},"astc-10x10-unorm":{gl:37819},"astc-10x10-unorm-srgb":{gl:37851},"astc-12x10-unorm":{gl:37820},"astc-12x10-unorm-srgb":{gl:37852},"astc-12x12-unorm":{gl:37821},"astc-12x12-unorm-srgb":{gl:37853},"pvrtc-rgb4unorm-webgl":{gl:35840},"pvrtc-rgba4unorm-webgl":{gl:35842},"pvrtc-rbg2unorm-webgl":{gl:35841},"pvrtc-rgba2unorm-webgl":{gl:35843},"etc1-rbg-unorm-webgl":{gl:36196},"atc-rgb-unorm-webgl":{gl:35986},"atc-rgba-unorm-webgl":{gl:35986},"atc-rgbai-unorm-webgl":{gl:34798}};function Kd(e){var t;const n=qd[e],r=function(e){const t=qd[e],n=null==t?void 0:t.gl;if(void 0===n)throw new Error(`Unsupported texture format ${e}`);return n}(e),i=si.getInfo(e);return i.compressed&&(n.dataFormat=r),{internalFormat:r,format:(null==n?void 0:n.dataFormat)||Zd(i.channels,i.integer,i.normalized,r),type:i.dataType?zd(i.dataType):(null==(t=null==n?void 0:n.types)?void 0:t[0])||5121,compressed:i.compressed||!1}}function Zd(e,t,n,r){if(6408===r||6407===r)return r;switch(e){case"r":return t&&!n?36244:6403;case"rg":return t&&!n?33320:33319;case"rgb":return t&&!n?36248:6407;case"rgba":return t&&!n?36249:6408;case"bgra":throw new Error("bgra pixels not supported by WebGL");default:return 6408}}const Jd={"depth-clip-control":"EXT_depth_clamp","timer-query-webgl":"EXT_disjoint_timer_query_webgl2","compilation-status-async-webgl":"KHR_parallel_shader_compile","polygon-mode-webgl":"WEBGL_polygon_mode","provoking-vertex-webgl":"WEBGL_provoking_vertex","shader-clip-cull-distance-webgl":"WEBGL_clip_cull_distance","shader-noperspective-interpolation-webgl":"NV_shader_noperspective_interpolation","shader-conservative-depth-webgl":"EXT_conservative_depth"};class ef extends Ai{constructor(e,t,n){super([],n),r(this,"gl"),r(this,"extensions"),r(this,"testedFeatures",new Set),this.gl=e,this.extensions=t,jd(e,"EXT_color_buffer_float",t)}*[Symbol.iterator](){const e=this.getFeatures();for(const t of e)this.has(t)&&(yield t);return[]}has(e){var t;return!(null==(t=this.disabledFeatures)?void 0:t[e])&&(this.testedFeatures.has(e)||(this.testedFeatures.add(e),function(e){return e in Yd}(e)&&function(e,t,n){return(Yd[t]||[]).every(t=>jd(e,t,n))}(this.gl,e,this.extensions)&&this.features.add(e),this.getWebGLFeature(e)&&this.features.add(e)),this.features.has(e))}initializeFeatures(){const e=this.getFeatures().filter(e=>"polygon-mode-webgl"!==e);for(const t of e)this.has(t)}getFeatures(){return[...Object.keys(Jd),...Object.keys(Yd)]}getWebGLFeature(e){const t=Jd[e];return"string"==typeof t?Boolean(jd(this.gl,t,this.extensions)):Boolean(t)}}class tf extends ai{constructor(e){super(),r(this,"gl"),r(this,"limits",{}),this.gl=e}get maxTextureDimension1D(){return 0}get maxTextureDimension2D(){return this.getParameter(3379)}get maxTextureDimension3D(){return this.getParameter(32883)}get maxTextureArrayLayers(){return this.getParameter(35071)}get maxBindGroups(){return 0}get maxDynamicUniformBuffersPerPipelineLayout(){return 0}get maxDynamicStorageBuffersPerPipelineLayout(){return 0}get maxSampledTexturesPerShaderStage(){return this.getParameter(35660)}get maxSamplersPerShaderStage(){return this.getParameter(35661)}get maxStorageBuffersPerShaderStage(){return 0}get maxStorageTexturesPerShaderStage(){return 0}get maxUniformBuffersPerShaderStage(){return this.getParameter(35375)}get maxUniformBufferBindingSize(){return this.getParameter(35376)}get maxStorageBufferBindingSize(){return 0}get minUniformBufferOffsetAlignment(){return this.getParameter(35380)}get minStorageBufferOffsetAlignment(){return 0}get maxVertexBuffers(){return 16}get maxVertexAttributes(){return this.getParameter(34921)}get maxVertexBufferArrayStride(){return 2048}get maxInterStageShaderVariables(){return this.getParameter(35659)}get maxComputeWorkgroupStorageSize(){return 0}get maxComputeInvocationsPerWorkgroup(){return 0}get maxComputeWorkgroupSizeX(){return 0}get maxComputeWorkgroupSizeY(){return 0}get maxComputeWorkgroupSizeZ(){return 0}get maxComputeWorkgroupsPerDimension(){return 0}getParameter(e){return void 0===this.limits[e]&&(this.limits[e]=this.gl.getParameter(e)),this.limits[e]||0}}class nf extends Bi{constructor(e,t){super(e,t),r(this,"device"),r(this,"gl"),r(this,"handle"),r(this,"colorAttachments",[]),r(this,"depthStencilAttachment",null);const n=null===t.handle;this.device=e,this.gl=e.gl,this.handle=this.props.handle||n?this.props.handle:this.gl.createFramebuffer(),n||(e._setWebGLDebugMetadata(this.handle,this,{spector:this.props}),this.autoCreateAttachmentTextures(),this.updateAttachments())}destroy(){super.destroy(),this.destroyed||null===this.handle||this.gl.deleteFramebuffer(this.handle)}updateAttachments(){const e=this.gl.bindFramebuffer(36160,this.handle);for(let t=0;t(this._getCompilationStatus(),this.compilationStatus))}async getCompilationInfo(){return await this._waitForCompilationComplete(),this.getCompilationInfoSync()}getCompilationInfoSync(){const e=this.device.gl.getShaderInfoLog(this.handle);return e?function(e){const t=e.split(/\r?\n/),n=[];for(const r of t){if(r.length<=1)continue;const e=r.split(":");if(2===e.length){const[t,r]=e;n.push({message:r.trim(),type:Af(t),lineNum:0,linePos:0});continue}const[t,i,s,...o]=e;let a=parseInt(s,10);isNaN(a)&&(a=0);let A=parseInt(i,10);isNaN(A)&&(A=0),n.push({message:o.join(":").trim(),type:Af(t),lineNum:a,linePos:A})}return n}(e):[]}getTranslatedSource(){const e=this.device.getExtension("WEBGL_debug_shaders").WEBGL_debug_shaders;return(null==e?void 0:e.getTranslatedShaderSource(this.handle))||null}async _compile(e){e=e.startsWith("#version ")?e:`#version 300 es\n${e}`;const{gl:t}=this.device;if(t.shaderSource(this.handle,e),t.compileShader(this.handle),this.device.props.debug){if(this.device.features.has("compilation-status-async-webgl"))Pr.once(1,"Shader compilation is asynchronous")(),await this._waitForCompilationComplete(),Pr.info(2,`Shader ${this.id} - async compilation complete: ${this.compilationStatus}`)(),this._getCompilationStatus(),this.debugShader();else if(this._getCompilationStatus(),this.debugShader(),"error"===this.compilationStatus)throw new Error(`GLSL compilation errors in ${this.props.stage} shader ${this.props.id}`)}else this.compilationStatus="pending"}async _waitForCompilationComplete(){const e=async e=>await new Promise(t=>setTimeout(t,e));if(!this.device.features.has("compilation-status-async-webgl"))return void(await e(10));const{gl:t}=this.device;for(;;){if(t.getShaderParameter(this.handle,37297))return;await e(10)}}_getCompilationStatus(){this.compilationStatus=this.device.gl.getShaderParameter(this.handle,35713)?"success":"error"}}function cf(e,t){return ff(e,t,{never:512,less:513,equal:514,"less-equal":515,greater:516,"not-equal":517,"greater-equal":518,always:519})}function uf(e,t){return ff(e,t,{keep:7680,zero:0,replace:7681,invert:5386,"increment-clamp":7682,"decrement-clamp":7683,"increment-wrap":34055,"decrement-wrap":34056})}function hf(e,t){return ff(e,t,{add:32774,subtract:32778,"reverse-subtract":32779,min:32775,max:32776})}function df(e,t,n="color"){return ff(e,t,{one:1,zero:0,src:768,"one-minus-src":769,dst:774,"one-minus-dst":775,"src-alpha":770,"one-minus-src-alpha":771,"dst-alpha":772,"one-minus-dst-alpha":773,"src-alpha-saturated":776,constant:"color"===n?32769:32771,"one-minus-constant":"color"===n?32770:32772,src1:768,"one-minus-src1":769,"src1-alpha":770,"one-minus-src1-alpha":771})}function ff(e,t,n){if(!(t in n))throw new Error(function(e,t){return`Illegal parameter ${t} for ${e}`}(e,t));return n[t]}function pf(e){const t={};return e.addressModeU&&(t[10242]=gf(e.addressModeU)),e.addressModeV&&(t[10243]=gf(e.addressModeV)),e.addressModeW&&(t[32882]=gf(e.addressModeW)),e.magFilter&&(t[10240]=mf(e.magFilter)),(e.minFilter||e.mipmapFilter)&&(t[10241]=function(e,t="none"){if(!t)return mf(e);switch(t){case"none":return mf(e);case"nearest":switch(e){case"nearest":return 9984;case"linear":return 9985}break;case"linear":switch(e){case"nearest":return 9986;case"linear":return 9987}}}(e.minFilter||"linear",e.mipmapFilter)),void 0!==e.lodMinClamp&&(t[33082]=e.lodMinClamp),void 0!==e.lodMaxClamp&&(t[33083]=e.lodMaxClamp),"comparison-sampler"===e.type&&(t[34892]=34894),e.compare&&(t[34893]=cf("compare",e.compare)),e.maxAnisotropy&&(t[34046]=e.maxAnisotropy),t}function gf(e){switch(e){case"clamp-to-edge":return 33071;case"repeat":return 10497;case"mirror-repeat":return 33648}}function mf(e){switch(e){case"nearest":return 9728;case"linear":return 9729}}class _f extends xi{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle"),r(this,"parameters"),this.device=e,this.parameters=pf(t),this.handle=t.handle||this.device.gl.createSampler(),this._setSamplerParameters(this.parameters)}destroy(){this.handle&&(this.device.gl.deleteSampler(this.handle),this.handle=void 0)}toString(){return`Sampler(${this.id},${JSON.stringify(this.props)})`}_setSamplerParameters(e){for(const[t,n]of Object.entries(e)){const e=Number(t);switch(e){case 33082:case 33083:this.device.gl.samplerParameterf(this.handle,e,n);break;default:this.device.gl.samplerParameteri(this.handle,e,n)}}}}function bf(e,t,n){if(function(e){for(const t in e)return!1;return!0}(t))return n(e);const{nocatch:r=!0}=t,i=Od.get(e);let s;if(i.push(),Ld(e,t),r)s=n(e),i.pop();else try{s=n(e)}finally{i.pop()}return s}class vf extends ki{constructor(e,t){super(e,{...Si.defaultProps,...t}),r(this,"device"),r(this,"gl"),r(this,"handle"),r(this,"texture"),this.device=e,this.gl=this.device.gl,this.handle=null,this.texture=t.texture}}class yf extends Si{constructor(e,t){super(e,t),r(this,"device"),r(this,"gl"),r(this,"handle"),r(this,"sampler"),r(this,"view"),r(this,"glTarget"),r(this,"glFormat"),r(this,"glType"),r(this,"glInternalFormat"),r(this,"compressed"),r(this,"_textureUnit",0),this.device=e,this.gl=this.device.gl;const n=Kd(this.props.format);this.glTarget=function(e){switch(e){case"1d":break;case"2d":return 3553;case"3d":return 32879;case"cube":return 34067;case"2d-array":return 35866}throw new Error(e)}(this.props.dimension),this.glInternalFormat=n.internalFormat,this.glFormat=n.format,this.glType=n.type,this.compressed=n.compressed,this.handle=this.props.handle||this.gl.createTexture(),this.device._setWebGLDebugMetadata(this.handle,this,{spector:this.props}),this.gl.bindTexture(this.glTarget,this.handle);const{dimension:i,width:s,height:o,depth:a,mipLevels:A,glTarget:l,glInternalFormat:c}=this;switch(i){case"2d":case"cube":this.gl.texStorage2D(l,A,c,s,o);break;case"2d-array":case"3d":this.gl.texStorage3D(l,A,c,s,o,a);break;default:throw new Error(i)}this.gl.bindTexture(this.glTarget,null),this._initializeData(t.data),this.setSampler(this.props.sampler),this.view=new vf(this.device,{...this.props,texture:this}),Object.seal(this)}destroy(){this.handle&&(this.gl.deleteTexture(this.handle),this.removeStats(),this.trackDeallocatedMemory("Texture"),this.destroyed=!0)}createView(e){return new vf(this.device,{...e,texture:this})}setSampler(e={}){super.setSampler(e);const t=pf(this.sampler.props);this._setSamplerParameters(t)}copyImageData(e){const t=this._normalizeCopyImageDataOptions(e),n=t.data,{width:r,height:i,depth:s}=this,{mipLevel:o=0,byteOffset:a=0,x:A=0,y:l=0,z:c=0}=t,{glFormat:u,glType:h,compressed:d}=this,f=wf(this.glTarget,this.dimension,c);let p;if(!this.compressed){const{bytesPerPixel:e}=this.device.getTextureFormatInfo(this.format);if(e){if(t.bytesPerRow%e!==0)throw new Error(`bytesPerRow (${t.bytesPerRow}) must be a multiple of bytesPerPixel (${e}) for ${this.format}`);p=t.bytesPerRow/e}}const g=this.compressed?{}:{...void 0!==p?{3314:p}:{},32878:t.rowsPerImage};this.gl.bindTexture(f,this.handle),bf(this.gl,g,()=>{switch(this.dimension){case"2d":case"cube":d?this.gl.compressedTexSubImage2D(f,o,A,l,r,i,u,n,a):this.gl.texSubImage2D(f,o,A,l,r,i,u,h,n,a);break;case"2d-array":case"3d":d?this.gl.compressedTexSubImage3D(f,o,A,l,c,r,i,s,u,n,a):this.gl.texSubImage3D(f,o,A,l,c,r,i,s,u,h,n,a)}}),this.gl.bindTexture(f,null)}copyExternalImage(e){const t=this._normalizeCopyExternalImageOptions(e);if(t.sourceX||t.sourceY)throw new Error("WebGL does not support sourceX/sourceY)");const{glFormat:n,glType:r}=this,{image:i,depth:s,mipLevel:o,x:a,y:A,z:l,width:c,height:u}=t,h=wf(this.glTarget,this.dimension,s),d=t.flipY?{37440:!0}:{};return this.gl.bindTexture(this.glTarget,this.handle),bf(this.gl,d,()=>{switch(this.dimension){case"2d":case"cube":this.gl.texSubImage2D(h,o,a,A,c,u,n,r,i);break;case"2d-array":case"3d":this.gl.texSubImage3D(h,o,a,A,l,c,u,s,n,r,i)}}),this.gl.bindTexture(this.glTarget,null),{width:t.width,height:t.height}}generateMipmapsWebGL(e){if(this.device.isTextureFormatRenderable(this.props.format)&&this.device.isTextureFormatFilterable(this.props.format)||(Pr.warn(`${this} is not renderable or filterable, may not be able to generate mipmaps`)(),null==e?void 0:e.force))try{this.gl.bindTexture(this.glTarget,this.handle),this.gl.generateMipmap(this.glTarget)}catch(t){Pr.warn(`Error generating mipmap for ${this}: ${t.message}`)()}finally{this.gl.bindTexture(this.glTarget,null)}}_setSamplerParameters(e){Pr.log(2,`${this.id} sampler parameters`,this.device.getGLKeys(e))(),this.gl.bindTexture(this.glTarget,this.handle);for(const[t,n]of Object.entries(e)){const e=Number(t),r=n;switch(e){case 33082:case 33083:this.gl.texParameterf(this.glTarget,e,r);break;case 10240:case 10241:case 10242:case 10243:case 32882:case 34892:case 34893:this.gl.texParameteri(this.glTarget,e,r);break;case 34046:this.device.features.has("texture-filterable-anisotropic-webgl")&&this.gl.texParameteri(this.glTarget,e,r)}}this.gl.bindTexture(this.glTarget,null)}_getActiveUnit(){return this.gl.getParameter(34016)-33984}_bind(e){const{gl:t}=this;return void 0!==e&&(this._textureUnit=e,t.activeTexture(33984+e)),t.bindTexture(this.glTarget,this.handle),e}_unbind(e){const{gl:t}=this;return void 0!==e&&(this._textureUnit=e,t.activeTexture(33984+e)),t.bindTexture(this.glTarget,null),e}}function wf(e,t,n){return"cube"===t?34069+n:e}function xf(e){return Sf[e]}function Ef(e){return Boolean(Cf[e])}function Tf(e){return Cf[e]}const Sf={5126:"f32",35664:"vec2",35665:"vec3",35666:"vec4",5124:"i32",35667:"vec2",35668:"vec3",35669:"vec4",5125:"u32",36294:"vec2",36295:"vec3",36296:"vec4",35670:"f32",35671:"vec2",35672:"vec3",35673:"vec4",35674:"mat2x2",35685:"mat2x3",35686:"mat2x4",35687:"mat3x2",35675:"mat3x3",35688:"mat3x4",35689:"mat4x2",35690:"mat4x3",35676:"mat4x4"},Cf={35678:{viewDimension:"2d",sampleType:"float"},35680:{viewDimension:"cube",sampleType:"float"},35679:{viewDimension:"3d",sampleType:"float"},35682:{viewDimension:"3d",sampleType:"depth"},36289:{viewDimension:"2d-array",sampleType:"float"},36292:{viewDimension:"2d-array",sampleType:"depth"},36293:{viewDimension:"cube",sampleType:"float"},36298:{viewDimension:"2d",sampleType:"sint"},36299:{viewDimension:"3d",sampleType:"sint"},36300:{viewDimension:"cube",sampleType:"sint"},36303:{viewDimension:"2d-array",sampleType:"uint"},36306:{viewDimension:"2d",sampleType:"uint"},36307:{viewDimension:"3d",sampleType:"uint"},36308:{viewDimension:"cube",sampleType:"uint"},36311:{viewDimension:"2d-array",sampleType:"uint"}},kf={uint8:5121,sint8:5120,unorm8:5121,snorm8:5120,uint16:5123,sint16:5122,unorm16:5123,snorm16:5122,uint32:5125,sint32:5124,float16:5131,float32:5126};function Rf(e){if("]"!==e[e.length-1])return{name:e,length:1,isArray:!1};const t=/([^[]*)(\[[0-9]+\])?/.exec(e);if(!t||t.length<2)throw new Error(`Failed to parse GLSL uniform name ${e}`);return{name:t[1],length:t[2]?1:0,isArray:Boolean(t[2])}}function Pf(e,t,n,r){const i=e;let s=r;!0===s&&(s=1),!1===s&&(s=0);const o="number"==typeof s?[s]:s;switch(n){case 35678:case 35680:case 35679:case 35682:case 36289:case 36292:case 36293:case 36298:case 36299:case 36300:case 36303:case 36306:case 36307:case 36308:case 36311:if("number"!=typeof r)throw new Error("samplers must be set to integers");return e.uniform1i(t,r);case 5126:return e.uniform1fv(t,o);case 35664:return e.uniform2fv(t,o);case 35665:return e.uniform3fv(t,o);case 35666:return e.uniform4fv(t,o);case 5124:case 35670:return e.uniform1iv(t,o);case 35667:case 35671:return e.uniform2iv(t,o);case 35668:case 35672:return e.uniform3iv(t,o);case 35669:case 35673:return e.uniform4iv(t,o);case 5125:return i.uniform1uiv(t,o,1);case 36294:return i.uniform2uiv(t,o,2);case 36295:return i.uniform3uiv(t,o,3);case 36296:return i.uniform4uiv(t,o,4);case 35674:return e.uniformMatrix2fv(t,!1,o);case 35675:return e.uniformMatrix3fv(t,!1,o);case 35676:return e.uniformMatrix4fv(t,!1,o);case 35685:return i.uniformMatrix2x3fv(t,!1,o);case 35686:return i.uniformMatrix2x4fv(t,!1,o);case 35687:return i.uniformMatrix3x2fv(t,!1,o);case 35688:return i.uniformMatrix3x4fv(t,!1,o);case 35689:return i.uniformMatrix4x2fv(t,!1,o);case 35690:return i.uniformMatrix4x3fv(t,!1,o)}throw new Error("Illegal uniform")}class If extends Oi{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle"),r(this,"vs"),r(this,"fs"),r(this,"introspectedLayout"),r(this,"uniforms",{}),r(this,"bindings",{}),r(this,"varyings",null),r(this,"_uniformCount",0),r(this,"_uniformSetters",{}),this.device=e,this.handle=this.props.handle||this.device.gl.createProgram(),this.device._setWebGLDebugMetadata(this.handle,this,{spector:{id:this.props.id}}),this.vs=t.vs,this.fs=t.fs;const{varyings:n,bufferMode:i=35981}=t;n&&n.length>0&&(this.varyings=n,this.device.gl.transformFeedbackVaryings(this.handle,n,i)),this._linkShaders(),Pr.time(3,`RenderPipeline ${this.id} - shaderLayout introspection`)(),this.introspectedLayout=function(e,t){const n={attributes:[],bindings:[]};n.attributes=function(e,t){const n=[],r=e.getProgramParameter(t,35721);for(let i=0;i=0){const e=xf(o),t=/instance/i.test(s)?"instance":"vertex";n.push({name:s,location:a,stepMode:t,type:e})}}return n.sort((e,t)=>e.location-t.location),n}(e,t);const r=function(e,t){const n=(n,r)=>e.getActiveUniformBlockParameter(t,n,r),r=[],i=e.getProgramParameter(t,35382);for(let s=0;se.location-t.location),r}(e,t);for(const a of r){const e=a.uniforms.map(e=>({name:e.name,format:e.format,byteOffset:e.byteOffset,byteStride:e.byteStride,arrayLength:e.arrayLength}));n.bindings.push({type:"uniform",name:a.name,group:0,location:a.location,visibility:(a.vertex?1:0)&(a.fragment?2:0),minBindingSize:a.byteLength,uniforms:e})}const i=function(e,t){const n=[],r=e.getProgramParameter(t,35718);for(let i=0;i1)for(let i=0;ie.location-t.location),n}(e,t);return(null==o?void 0:o.length)&&(n.varyings=o),n}(this.device.gl,this.handle),Pr.timeEnd(3,`RenderPipeline ${this.id} - shaderLayout introspection`)(),this.shaderLayout=t.shaderLayout?function(e,t){const n={...e,attributes:e.attributes.map(e=>({...e}))};for(const r of(null==t?void 0:t.attributes)||[]){const e=n.attributes.find(e=>e.name===r.name);e?(e.type=r.type||e.type,e.stepMode=r.stepMode||e.stepMode):Pr.warn(`shader layout attribute ${r.name} not present in shader`)}return n}(this.introspectedLayout,t.shaderLayout):this.introspectedLayout}get[Symbol.toStringTag](){return"WEBGLRenderPipeline"}destroy(){this.handle&&(this.device.gl.useProgram(null),this.device.gl.deleteProgram(this.handle),this.destroyed=!0,this.handle.destroyed=!0,this.handle=null)}setBindings(e,t){for(const[n,r]of Object.entries(e)){const e=this.shaderLayout.bindings.find(e=>e.name===n)||this.shaderLayout.bindings.find(e=>e.name===`${n}Uniforms`);if(!e){const e=this.shaderLayout.bindings.map(e=>`"${e.name}"`).join(", ");(null==t?void 0:t.disableWarnings)||Pr.warn(`No binding "${n}" in render pipeline "${this.id}", expected one of ${e}`,r)();continue}switch(r||Pr.warn(`Unsetting binding "${n}" in render pipeline "${this.id}"`)(),e.type){case"uniform":if(!(r instanceof af||r.buffer instanceof af))throw new Error("buffer value");break;case"texture":if(!(r instanceof vf||r instanceof yf||r instanceof nf))throw new Error(`${this} Bad texture binding for ${n}`);break;case"sampler":Pr.warn(`Ignoring sampler ${n}`)();break;default:throw new Error(e.type)}this.bindings[n]=r}}draw(e){var t;const{renderPass:n,parameters:r=this.props.parameters,topology:i=this.props.topology,vertexArray:s,vertexCount:o,instanceCount:a,isInstanced:A=!1,firstVertex:l=0,transformFeedback:c}=e,u=function(e){switch(e){case"point-list":return 0;case"line-list":return 1;case"line-strip":return 3;case"triangle-list":return 4;case"triangle-strip":return 5;default:throw new Error(e)}}(i),h=Boolean(s.indexBuffer),d=null==(t=s.indexBuffer)?void 0:t.glIndexType;if("success"!==this.linkStatus)return Pr.info(2,`RenderPipeline:${this.id}.draw() aborted - waiting for shader linking`)(),!1;if(!this._areTexturesRenderable())return Pr.info(2,`RenderPipeline:${this.id}.draw() aborted - textures not yet loaded`)(),!1;this.device.gl.useProgram(this.handle),s.bindBeforeRender(n),c&&c.begin(this.props.topology),this._applyBindings(),this._applyUniforms();const f=n;return function(e,t,n,r){if(function(e){let t=!0;for(const n in e){t=!1;break}return t}(t))return r(e);const i=e;i.pushState();try{return function(e,t){const n=e,{gl:r}=n;if(t.cullMode)switch(t.cullMode){case"none":r.disable(2884);break;case"front":r.enable(2884),r.cullFace(1028);break;case"back":r.enable(2884),r.cullFace(1029)}if(t.frontFace&&r.frontFace(ff("frontFace",t.frontFace,{ccw:2305,cw:2304})),t.unclippedDepth&&e.features.has("depth-clip-control")&&r.enable(34383),void 0!==t.depthBias&&(r.enable(32823),r.polygonOffset(t.depthBias,t.depthBiasSlopeScale||0)),t.provokingVertex&&e.features.has("provoking-vertex-webgl")){const e=n.getExtension("WEBGL_provoking_vertex").WEBGL_provoking_vertex,r=ff("provokingVertex",t.provokingVertex,{first:36429,last:36430});null==e||e.provokingVertexWEBGL(r)}if((t.polygonMode||t.polygonOffsetLine)&&e.features.has("polygon-mode-webgl")){if(t.polygonMode){const e=n.getExtension("WEBGL_polygon_mode").WEBGL_polygon_mode,r=ff("polygonMode",t.polygonMode,{fill:6914,line:6913});null==e||e.polygonModeWEBGL(1028,r),null==e||e.polygonModeWEBGL(1029,r)}t.polygonOffsetLine&&r.enable(10754)}if(e.features.has("shader-clip-cull-distance-webgl")&&(t.clipDistance0&&r.enable(12288),t.clipDistance1&&r.enable(12289),t.clipDistance2&&r.enable(12290),t.clipDistance3&&r.enable(12291),t.clipDistance4&&r.enable(12292),t.clipDistance5&&r.enable(12293),t.clipDistance6&&r.enable(12294),t.clipDistance7&&r.enable(12295)),void 0!==t.depthWriteEnabled&&r.depthMask(t.depthWriteEnabled),t.depthCompare&&("always"!==t.depthCompare?r.enable(2929):r.disable(2929),r.depthFunc(cf("depthCompare",t.depthCompare))),t.stencilWriteMask){const e=t.stencilWriteMask;r.stencilMaskSeparate(1028,e),r.stencilMaskSeparate(1029,e)}if(t.stencilReadMask&&Pr.warn("stencilReadMask not supported under WebGL"),t.stencilCompare){const e=t.stencilReadMask||4294967295,n=cf("depthCompare",t.stencilCompare);"always"!==t.stencilCompare?r.enable(2960):r.disable(2960),r.stencilFuncSeparate(1028,n,0,e),r.stencilFuncSeparate(1029,n,0,e)}if(t.stencilPassOperation&&t.stencilFailOperation&&t.stencilDepthFailOperation){const e=uf("stencilPassOperation",t.stencilPassOperation),n=uf("stencilFailOperation",t.stencilFailOperation),i=uf("stencilDepthFailOperation",t.stencilDepthFailOperation);r.stencilOpSeparate(1028,n,i,e),r.stencilOpSeparate(1029,n,i,e)}switch(t.blend){case!0:r.enable(3042);break;case!1:r.disable(3042)}if(t.blendColorOperation||t.blendAlphaOperation){const e=hf("blendColorOperation",t.blendColorOperation||"add"),n=hf("blendAlphaOperation",t.blendAlphaOperation||"add");r.blendEquationSeparate(e,n);const i=df("blendColorSrcFactor",t.blendColorSrcFactor||"one"),s=df("blendColorDstFactor",t.blendColorDstFactor||"zero"),o=df("blendAlphaSrcFactor",t.blendAlphaSrcFactor||"one"),a=df("blendAlphaDstFactor",t.blendAlphaDstFactor||"zero");r.blendFuncSeparate(i,s,o,a)}}(e,t),Ld(i.gl,n),r(e)}finally{i.popState()}}(this.device,r,f.glParameters,()=>{h&&A?this.device.gl.drawElementsInstanced(u,o||0,d,l,a||0):h?this.device.gl.drawElements(u,o||0,d,l):A?this.device.gl.drawArraysInstanced(u,l,o||0,a||0):this.device.gl.drawArrays(u,l,o||0),c&&c.end()}),s.unbindAfterRender(n),!0}async _linkShaders(){const{gl:e}=this.device;if(e.attachShader(this.handle,this.vs.handle),e.attachShader(this.handle,this.fs.handle),Pr.time(4,`linkProgram for ${this.id}`)(),e.linkProgram(this.handle),Pr.timeEnd(4,`linkProgram for ${this.id}`)(),Pr.level,!this.device.features.has("compilation-status-async-webgl")){const e=this._getLinkStatus();return void this._reportLinkStatus(e)}Pr.once(1,"RenderPipeline linking is asynchronous")(),await this._waitForLinkComplete(),Pr.info(2,`RenderPipeline ${this.id} - async linking complete: ${this.linkStatus}`)();const t=this._getLinkStatus();this._reportLinkStatus(t)}async _reportLinkStatus(e){var t;if("success"!==e){const n="link-error"===e?"Link error":"Validation error";switch(this.vs.compilationStatus){case"error":throw this.vs.debugShader(),new Error(`${this} ${n} during compilation of ${this.vs}`);case"pending":await this.vs.asyncCompilationStatus,this.vs.debugShader()}switch(null==(t=this.fs)?void 0:t.compilationStatus){case"error":throw this.fs.debugShader(),new Error(`${this} ${n} during compilation of ${this.fs}`);case"pending":await this.fs.asyncCompilationStatus,this.fs.debugShader()}const r=this.device.gl.getProgramInfoLog(this.handle);this.device.reportError(new Error(`${n} during ${e}: ${r}`),this)(),this.device.debug()}}_getLinkStatus(){const{gl:e}=this.device;return e.getProgramParameter(this.handle,35714)?(e.validateProgram(this.handle),e.getProgramParameter(this.handle,35715)?(this.linkStatus="success","success"):(this.linkStatus="error","validation-error")):(this.linkStatus="error","link-error")}async _waitForLinkComplete(){const e=async e=>await new Promise(t=>setTimeout(t,e));if(!this.device.features.has("compilation-status-async-webgl"))return void(await e(10));const{gl:t}=this.device;for(;;){if(t.getProgramParameter(this.handle,37297))return;await e(10)}}_areTexturesRenderable(){let e=!0;for(const t of this.shaderLayout.bindings)this.bindings[t.name]||this.bindings[t.name.replace(/Uniforms$/,"")]||(Pr.warn(`Binding ${t.name} not found in ${this.id}`)(),e=!1);return e}_applyBindings(){if("success"!==this.linkStatus)return;const{gl:e}=this.device;e.useProgram(this.handle);let t=0,n=0;for(const r of this.shaderLayout.bindings){const i=this.bindings[r.name]||this.bindings[r.name.replace(/Uniforms$/,"")];if(!i)throw new Error(`No value for binding ${r.name} in ${this.id}`);switch(r.type){case"uniform":const{name:s}=r,o=e.getUniformBlockIndex(this.handle,s);if(4294967295===o)throw new Error(`Invalid uniform block name ${s}`);e.uniformBlockBinding(this.handle,n,o),i instanceof af?e.bindBufferBase(35345,n,i.handle):e.bindBufferRange(35345,n,i.buffer.handle,i.offset||0,i.size||i.buffer.byteLength-i.offset),n+=1;break;case"texture":if(!(i instanceof vf||i instanceof yf||i instanceof nf))throw new Error("texture");let a;if(i instanceof vf)a=i.texture;else if(i instanceof yf)a=i;else{if(!(i instanceof nf&&i.colorAttachments[0]instanceof vf))throw new Error("No texture");Pr.warn("Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead")(),a=i.colorAttachments[0].texture}e.activeTexture(33984+t),e.bindTexture(a.glTarget,a.handle),t+=1;break;case"sampler":break;case"storage":case"read-only-storage":throw new Error(`binding type '${r.type}' not supported in WebGL`)}}}_applyUniforms(){for(const e of this.shaderLayout.uniforms||[]){const{name:t,location:n,type:r,textureUnit:i}=e,s=this.uniforms[t]??i;void 0!==s&&Pf(this.device.gl,n,r,s)}}}class Mf extends Hi{constructor(e){super(e,{}),r(this,"device"),r(this,"handle",null),r(this,"commands",[]),this.device=e}_executeCommands(e=this.commands){for(const t of e)switch(t.name){case"copy-buffer-to-buffer":Lf(this.device,t.options);break;case"copy-buffer-to-texture":Nf(this.device,t.options);break;case"copy-texture-to-buffer":Bf(this.device,t.options);break;case"copy-texture-to-texture":Df(this.device,t.options);break;default:throw new Error(t.name)}}}function Lf(e,t){const n=t.sourceBuffer,r=t.destinationBuffer;e.gl.bindBuffer(36662,n.handle),e.gl.bindBuffer(36663,r.handle),e.gl.copyBufferSubData(36662,36663,t.sourceOffset??0,t.destinationOffset??0,t.size),e.gl.bindBuffer(36662,null),e.gl.bindBuffer(36663,null)}function Nf(e,t){throw new Error("Not implemented")}function Bf(e,t){const{sourceTexture:n,mipLevel:r=0,aspect:i="all",width:s=t.sourceTexture.width,height:o=t.sourceTexture.height,depthOrArrayLayers:a=0,origin:A=[0,0],destinationBuffer:l,byteOffset:c=0,bytesPerRow:u,rowsPerImage:h}=t;if("all"!==i)throw new Error("aspect not supported in WebGL");if(0!==r||0!==a||u||h)throw new Error("not implemented");const{framebuffer:d,destroyFramebuffer:f}=Of(n);let p;try{const t=l,n=s||d.width,r=o||d.height,i=Kd(d.colorAttachments[0].texture.props.format),a=i.format,u=i.type;e.gl.bindBuffer(35051,t.handle),p=e.gl.bindFramebuffer(36160,d.handle),e.gl.readPixels(A[0],A[1],n,r,a,u,c)}finally{e.gl.bindBuffer(35051,null),void 0!==p&&e.gl.bindFramebuffer(36160,p),f&&d.destroy()}}function Df(e,t){const{sourceTexture:n,destinationMipLevel:r=0,origin:i=[0,0],destinationOrigin:s=[0,0],destinationTexture:o}=t;let{width:a=t.destinationTexture.width,height:A=t.destinationTexture.height}=t;const{framebuffer:l,destroyFramebuffer:c}=Of(n),[u,h]=i,[d,f,p]=s,g=e.gl.bindFramebuffer(36160,l.handle);let m,_;if(!(o instanceof yf))throw new Error("invalid destination");switch(m=o,a=Number.isFinite(a)?a:m.width,A=Number.isFinite(A)?A:m.height,m._bind(0),_=m.glTarget,_){case 3553:case 34067:e.gl.copyTexSubImage2D(_,r,d,f,u,h,a,A);break;case 35866:case 32879:e.gl.copyTexSubImage3D(_,r,d,f,p,u,h,a,A)}m&&m._unbind(),e.gl.bindFramebuffer(36160,g),c&&l.destroy()}function Of(e){if(e instanceof Si){const{width:t,height:n,id:r}=e;return{framebuffer:e.device.createFramebuffer({id:`framebuffer-for-${r}`,width:t,height:n,colorAttachments:[e]}),destroyFramebuffer:!0}}return{framebuffer:e,destroyFramebuffer:!1}}const Ff=[1,2,4,8];class Uf extends Ui{constructor(e,t){var n;let i;if(super(e,t),r(this,"device"),r(this,"handle",null),r(this,"glParameters",{}),this.device=e,!(null==(n=null==t?void 0:t.parameters)?void 0:n.viewport))if(null==t?void 0:t.framebuffer){const{width:e,height:n}=t.framebuffer;i=[0,0,e,n]}else{const[t,n]=e.getDefaultCanvasContext().getDrawingBufferSize();i=[0,0,t,n]}this.device.pushState(),this.setParameters({viewport:i,...this.props.parameters});const s=this.props.framebuffer;if(this.props.framebuffer&&(null==s?void 0:s.handle)){const e=this.props.framebuffer.colorAttachments.map((e,t)=>36064+t);this.device.gl.drawBuffers(e)}else this.device.gl.drawBuffers([1029]);this.clear()}end(){this.device.popState()}pushDebugGroup(e){}popDebugGroup(){}insertDebugMarker(e){}setParameters(e={}){const t={...this.glParameters};t.framebuffer=this.props.framebuffer||null,this.props.depthReadOnly&&(t.depthMask=!this.props.depthReadOnly),t.stencilMask=this.props.stencilReadOnly?0:1,t[35977]=this.props.discard,e.viewport&&(e.viewport.length>=6?(t.viewport=e.viewport.slice(0,4),t.depthRange=[e.viewport[4],e.viewport[5]]):t.viewport=e.viewport),e.scissorRect&&(t.scissorTest=!0,t.scissor=e.scissorRect),e.blendConstant&&(t.blendColor=e.blendConstant),e.stencilReference&&(t[2967]=e.stencilReference),"colorMask"in e&&(t.colorMask=Ff.map(t=>Boolean(t&e.colorMask))),this.glParameters=t,Ld(this.device.gl,t)}beginOcclusionQuery(e){const t=this.props.occlusionQuerySet;null==t||t.beginOcclusionQuery()}endOcclusionQuery(){const e=this.props.occlusionQuerySet;null==e||e.endOcclusionQuery()}clear(){const e={...this.glParameters};let t=0;this.props.clearColors&&this.props.clearColors.forEach((e,t)=>{e&&this.clearColorBuffer(t,e)}),!1!==this.props.clearColor&&void 0===this.props.clearColors&&(t|=16384,e.clearColor=this.props.clearColor),!1!==this.props.clearDepth&&(t|=256,e.clearDepth=this.props.clearDepth),!1!==this.props.clearStencil&&(t|=1024,e.clearStencil=this.props.clearStencil),0!==t&&bf(this.device.gl,e,()=>{this.device.gl.clear(t)})}clearColorBuffer(e=0,t=[0,0,0,0]){bf(this.device.gl,{framebuffer:this.props.framebuffer},()=>{switch(t.constructor){case Int8Array:case Int16Array:case Int32Array:this.device.gl.clearBufferiv(6144,e,t);break;case Uint8Array:case Uint8ClampedArray:case Uint16Array:case Uint32Array:this.device.gl.clearBufferuiv(6144,e,t);break;case Float32Array:this.device.gl.clearBufferfv(6144,e,t);break;default:throw new Error("clearColorBuffer: color must be typed array")}})}}class jf extends Vi{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle",null),r(this,"commandBuffer"),this.device=e,this.commandBuffer=new Mf(e)}destroy(){}finish(){return this.commandBuffer}beginRenderPass(e){return new Uf(this.device,e)}beginComputePass(e){throw new Error("ComputePass not supported in WebGL")}copyBufferToBuffer(e){this.commandBuffer.commands.push({name:"copy-buffer-to-buffer",options:e})}copyBufferToTexture(e){this.commandBuffer.commands.push({name:"copy-buffer-to-texture",options:e})}copyTextureToBuffer(e){this.commandBuffer.commands.push({name:"copy-texture-to-buffer",options:e})}copyTextureToTexture(e){this.commandBuffer.commands.push({name:"copy-texture-to-texture",options:e})}pushDebugGroup(e){}popDebugGroup(){}insertDebugMarker(e){}resolveQuerySet(e,t,n){}}class Gf extends Ji{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle"),r(this,"buffer",null),r(this,"bufferValue",null),this.device=e,this.handle=this.device.gl.createVertexArray()}get[Symbol.toStringTag](){return"VertexArray"}static isConstantAttributeZeroSupported(e){return"Chrome"==(Ue()?Fe()?"Electron":(Oe.userAgent||"").indexOf("Edge")>-1?"Edge":globalThis.chrome?"Chrome":globalThis.safari?"Safari":globalThis.mozInnerScreenX?"Firefox":"Unknown":"Node")}destroy(){var e;super.destroy(),this.buffer&&(null==(e=this.buffer)||e.destroy()),this.handle&&(this.device.gl.deleteVertexArray(this.handle),this.handle=void 0)}setIndexBuffer(e){const t=e;if(t&&34963!==t.glTarget)throw new Error("Use .setBuffer()");this.device.gl.bindVertexArray(this.handle),this.device.gl.bindBuffer(34963,t?t.handle:null),this.indexBuffer=t,this.device.gl.bindVertexArray(null)}setBuffer(e,t){const n=t;if(34963===n.glTarget)throw new Error("Use .setIndexBuffer()");const{size:r,type:i,stride:s,offset:o,normalized:a,integer:A,divisor:l}=this._getAccessor(e);this.device.gl.bindVertexArray(this.handle),this.device.gl.bindBuffer(34962,n.handle),A?this.device.gl.vertexAttribIPointer(e,r,i,s,o):this.device.gl.vertexAttribPointer(e,r,i,a,s,o),this.device.gl.bindBuffer(34962,null),this.device.gl.enableVertexAttribArray(e),this.device.gl.vertexAttribDivisor(e,l||0),this.attributes[e]=n,this.device.gl.bindVertexArray(null)}setConstantWebGL(e,t){this._enable(e,!1),this.attributes[e]=t}bindBeforeRender(){this.device.gl.bindVertexArray(this.handle),this._applyConstantAttributes()}unbindAfterRender(){this.device.gl.bindVertexArray(null)}_applyConstantAttributes(){for(let e=0;e{for(const t in e)this.setBuffer(t,e[t])})}setBuffer(e,t){const n=this._getVaryingIndex(e),{buffer:r,byteLength:i,byteOffset:s}=this._getBufferRange(t);if(n<0)return this.unusedBuffers[e]=r,void Pr.warn(`${this.id} unusedBuffers varying buffer ${e}`)();this.buffers[n]={buffer:r,byteLength:i,byteOffset:s},this.bindOnUse||this._bindBuffer(n,r,s,i)}getBuffer(e){if(Vf(e))return this.buffers[e]||null;const t=this._getVaryingIndex(e);return t>=0?this.buffers[t]:null}bind(e=this.handle){if("function"!=typeof e)return this.gl.bindTransformFeedback(36386,e),this;let t;return this._bound?t=e():(this.gl.bindTransformFeedback(36386,this.handle),this._bound=!0,t=e(),this._bound=!1,this.gl.bindTransformFeedback(36386,null)),t}unbind(){this.bind(null)}_getBufferRange(e){if(e instanceof af)return{buffer:e,byteOffset:0,byteLength:e.byteLength};const{buffer:t,byteOffset:n=0,byteLength:r=e.buffer.byteLength}=e;return{buffer:t,byteOffset:n,byteLength:r}}_getVaryingIndex(e){if(Vf(e))return Number(e);for(const t of this.layout.varyings||[])if(e===t.name)return t.location;return-1}_bindBuffers(){for(const e in this.buffers){const{buffer:t,byteLength:n,byteOffset:r}=this._getBufferRange(this.buffers[e]);this._bindBuffer(Number(e),t,r,n)}}_unbindBuffers(){for(const e in this.buffers)this.gl.bindBufferBase(35982,Number(e),null)}_bindBuffer(e,t,n=0,r){const i=t&&t.handle;i&&void 0!==r?this.gl.bindBufferRange(35982,e,i,n,r):this.gl.bindBufferBase(35982,e,i)}}function Vf(e){return"number"==typeof e?Number.isInteger(e):/^\d+$/.test(e)}class Wf extends is{constructor(e,t){if(super(e,t),r(this,"device"),r(this,"handle"),r(this,"target",null),r(this,"_queryPending",!1),r(this,"_pollingPromise",null),this.device=e,t.count>1)throw new Error("WebGL QuerySet can only have one value");const n=this.device.gl.createQuery();if(!n)throw new Error("WebGL query not supported");this.handle=n,Object.seal(this)}get[Symbol.toStringTag](){return"Query"}destroy(){this.device.gl.deleteQuery(this.handle)}beginTimestampQuery(){return this._begin(35007)}endTimestampQuery(){this._end()}beginOcclusionQuery(e){return this._begin((null==e?void 0:e.conservative)?36202:35887)}endOcclusionQuery(){this._end()}beginTransformFeedbackQuery(){return this._begin(35976)}endTransformFeedbackQuery(){this._end()}async resolveQuery(){return[await this.pollQuery()]}_begin(e){this._queryPending||(this.target=e,this.device.gl.beginQuery(this.target,this.handle))}_end(){this._queryPending||this.target&&(this.device.gl.endQuery(this.target),this.target=null,this._queryPending=!0)}isResultAvailable(){if(!this._queryPending)return!1;const e=this.device.gl.getQueryParameter(this.handle,34919);return e&&(this._queryPending=!1),e}isTimerDisjoint(){return this.device.gl.getParameter(36795)}getResult(){return this.device.gl.getQueryParameter(this.handle,34918)}getTimerMilliseconds(){return this.getResult()/1e6}pollQuery(e=Number.POSITIVE_INFINITY){if(this._pollingPromise)return this._pollingPromise;let t=0;return this._pollingPromise=new Promise((n,r)=>{const i=()=>{this.isResultAvailable()?(n(this.getResult()),this._pollingPromise=null):t++>e?(r("Timed out"),this._pollingPromise=null):requestAnimationFrame(i)};requestAnimationFrame(i)}),this._pollingPromise}}function Hf(e){switch(e){case 6406:case 33326:case 6403:case 36244:return 1;case 33339:case 33340:case 33328:case 33320:case 33319:return 2;case 6407:case 36248:case 34837:return 3;case 6408:case 36249:case 34836:return 4;default:return 0}}const $f={5124:"sint32",5125:"uint32",5122:"sint16",5123:"uint16",5120:"sint8",5121:"uint8",5126:"float32",5131:"float16",33635:"uint16",32819:"uint16",32820:"uint16",33640:"uint32",35899:"uint32",35902:"uint32",34042:"uint32",36269:"uint32"};function Xf(e){return e instanceof Bi?{framebuffer:e,deleteFramebuffer:!1}:{framebuffer:Qf(e),deleteFramebuffer:!0}}function Qf(e,t){const{device:n,width:r,height:i,id:s}=e;return n.createFramebuffer({...t,id:`framebuffer-for-${s}`,width:r,height:i,colorAttachments:[e]})}class Yf extends ci{constructor(e){var t,n;super({...e,id:e.id||of("webgl-device")}),r(this,"type","webgl"),r(this,"handle"),r(this,"features"),r(this,"limits"),r(this,"info"),r(this,"canvasContext"),r(this,"preferredColorFormat","rgba8unorm"),r(this,"preferredDepthFormat","depth24plus"),r(this,"commandEncoder"),r(this,"lost"),r(this,"_resolveContextLost"),r(this,"gl"),r(this,"_constants"),r(this,"_extensions",{}),r(this,"_polyfilled",!1),r(this,"spectorJS");const i=ci._getCanvasContextProps(e);if(!i)throw new Error("WebGLDevice requires props.createCanvasContext to be set");let s=null==(n=null==(t=i.canvas)?void 0:t.gl)?void 0:n.device;if(s)throw new Error(`WebGL context already attached to device ${s.id}`);this.canvasContext=new rf(this,i),this.lost=new Promise(e=>{this._resolveContextLost=e});const o={...e.webgl};"premultiplied"===i.alphaMode&&(o.premultipliedAlpha=!0),void 0!==e.powerPreference&&(o.powerPreference=e.powerPreference);const a=this.props._handle||function(e,t,n){let r="";const i={preserveDrawingBuffer:!0,...n};let s=null;if(s||(s=e.getContext("webgl2",i)),i.failIfMajorPerformanceCaveat&&(r||(r="Only software GPU is available. Set `failIfMajorPerformanceCaveat: false` to allow.")),s||n.failIfMajorPerformanceCaveat||(i.failIfMajorPerformanceCaveat=!1,s=e.getContext("webgl2",i),s.luma||(s.luma={}),s.luma.softwareRenderer=!0),s||(s=e.getContext("webgl",{}),s&&(s=null,r||(r="Your browser only supports WebGL1"))),!s)throw r||(r="Your browser does not support WebGL"),new Error(`Failed to create WebGL context: ${r}`);const{onContextLost:o,onContextRestored:a}=t;return e.addEventListener("webglcontextlost",e=>o(e),!1),e.addEventListener("webglcontextrestored",e=>a(e),!1),s.luma||(s.luma={}),s}(this.canvasContext.canvas,{onContextLost:e=>{var t;return null==(t=this._resolveContextLost)?void 0:t.call(this,{reason:"destroyed",message:"Entered sleep mode, or too many apps or browser tabs are using the GPU."})},onContextRestored:e=>{}},o);if(!a)throw new Error("WebGL context creation failed");if(s=a.device,s){if(e._reuseDevices)return Pr.log(1,`Not creating a new Device, instead returning a reference to Device ${s.id} already attached to WebGL context`,s)(),s._reused=!0,s;throw new Error(`WebGL context already attached to device ${s.id}`)}this.handle=a,this.gl=a,this.spectorJS=function(e){var t;if(!(e={...hd,...e}).debugSpectorJS)return null;if(!cd&&globalThis.SPECTOR&&!(null==(t=globalThis.luma)?void 0:t.spector)){Pr.probe(1,"SPECTOR found and initialized. Start with `luma.spector.displayUI()`")();const{Spector:e}=globalThis.SPECTOR;cd=new e,globalThis.luma&&(globalThis.luma.spector=cd)}if(!cd)return null;if(ud||(ud=!0,cd.spyCanvases(),null==cd||cd.onCaptureStarted.add(e=>Pr.info("Spector capture started:",e)()),null==cd||cd.onCapture.add(e=>{Pr.info("Spector capture complete:",e)(),null==cd||cd.getResultUI(),null==cd||cd.resultView.display(),null==cd||cd.resultView.addCapture(e)})),e.gl){const t=e.gl,n=t.device;null==cd||cd.startCapture(e.gl,500),t.device=n,new Promise(e=>setTimeout(e,2e3)).then(e=>{Pr.info("Spector capture stopped after 2 seconds")(),null==cd||cd.stopCapture()})}return cd}({...this.props,gl:this.handle}),this.gl.device=this,this.gl._version=2,this.info=function(e,t){const n=e.getParameter(7936),r=e.getParameter(7937);jd(e,"WEBGL_debug_renderer_info",t);const i=t.WEBGL_debug_renderer_info,s=e.getParameter(i?i.UNMASKED_VENDOR_WEBGL:7936)||n,o=e.getParameter(i?i.UNMASKED_RENDERER_WEBGL:7937)||r,a=e.getParameter(7938),A=Gd(s,o),l=function(e,t){return/Metal/i.exec(e)||/Metal/i.exec(t)?"metal":/ANGLE/i.exec(e)||/ANGLE/i.exec(t)?"opengl":"unknown"}(s,o),c=function(e,t){if(/SwiftShader/i.exec(e)||/SwiftShader/i.exec(t))return"cpu";switch(Gd(e,t)){case"intel":return"integrated";case"software":return"cpu";case"unknown":return"unknown";default:return"discrete"}}(s,o);return{type:"webgl",gpu:A,gpuType:c,gpuBackend:l,vendor:s,renderer:o,version:a,shadingLanguage:"glsl",shadingLanguageVersion:300}}(this.gl,this._extensions),this.limits=new tf(this.gl),this.features=new ef(this.gl,this._extensions,this.props._disabledFeatures),this.props._initializeFeatures&&this.features.initializeFeatures(),new Od(this.gl,{log:(...e)=>Pr.log(1,...e)()}).trackState(this.gl,{copyState:!1});const A=e.debugWebGL||e.debug,l=e.debugWebGL;A&&(this.gl=fd(this.gl,{debugWebGL:A,traceWebGL:l}),Pr.warn("WebGL debug mode activated. Performance reduced.")(),e.debugWebGL&&(Pr.level=Math.max(Pr.level,1))),this.commandEncoder=new jf(this,{id:`${this}-command-encoder`})}get[Symbol.toStringTag](){return"WebGLDevice"}toString(){return`${this[Symbol.toStringTag]}(${this.id})`}isVertexFormatSupported(e){return"unorm8x4-bgra"!==e}destroy(){this.props._reuseDevices||this._reused||delete this.gl.device}get isLost(){return this.gl.isContextLost()}getTextureByteAlignment(){return 4}createCanvasContext(e){throw new Error("WebGL only supports a single canvas")}createBuffer(e){const t=this._normalizeBufferProps(e);return new af(this,t)}createTexture(e){return new yf(this,e)}createExternalTexture(e){throw new Error("createExternalTexture() not implemented")}createSampler(e){return new _f(this,e)}createShader(e){return new lf(this,e)}createFramebuffer(e){return new nf(this,e)}createVertexArray(e){return new Gf(this,e)}createTransformFeedback(e){return new zf(this,e)}createQuerySet(e){return new Wf(this,e)}createRenderPipeline(e){return new If(this,e)}createComputePipeline(e){throw new Error("ComputePipeline not supported in WebGL")}createCommandEncoder(e={}){return new jf(this,e)}submit(e){e||(e=this.commandEncoder.finish(),this.commandEncoder.destroy(),this.commandEncoder=this.createCommandEncoder({id:`${this.id}-default-encoder`})),e._executeCommands()}readPixelsToArrayWebGL(e,t){return function(e,t){var n;const{sourceX:r=0,sourceY:i=0,sourceAttachment:s=0}=t||{};let{target:o=null,sourceWidth:a,sourceHeight:A,sourceDepth:l,sourceFormat:c,sourceType:u}=t||{};const{framebuffer:h,deleteFramebuffer:d}=Xf(e),{gl:f,handle:p}=h;a||(a=h.width),A||(A=h.height);const g=null==(n=h.colorAttachments[s])?void 0:n.texture;if(!g)throw new Error(`Invalid framebuffer attachment ${s}`);l=(null==g?void 0:g.depth)||1,c||(c=(null==g?void 0:g.glFormat)||6408),u||(u=(null==g?void 0:g.glType)||5121),m=o,_=u,b=c,v=a,y=A,o=m||(_||(_=5121),new(Ur($f[_]))(v*y*Hf(b)));var m,_,b,v,y;const w=Fr(o);u=u||kf[w];const x=f.bindFramebuffer(36160,p);return f.readBuffer(36064+s),f.readPixels(r,i,a,A,c,u,o),f.readBuffer(36064),f.bindFramebuffer(36160,x||null),d&&h.destroy(),o}(e,t)}readPixelsToBufferWebGL(e,t){return function(e,t){const{target:n,sourceX:r=0,sourceY:i=0,sourceFormat:s=6408,targetByteOffset:o=0}=t||{};let{sourceWidth:a,sourceHeight:A,sourceType:l}=t||{};const{framebuffer:c,deleteFramebuffer:u}=Xf(e);a=a||c.width,A=A||c.height;const h=c;l=l||5121;let d=n;if(!d){const e=o+a*A*Hf(s)*function(e){switch(e){case 5121:return 1;case 33635:case 32819:case 32820:return 2;case 5126:return 4;default:return 0}}(l);d=h.device.createBuffer({byteLength:e})}const f=e.device.createCommandEncoder();return f.copyTextureToBuffer({sourceTexture:e,width:a,height:A,origin:[r,i],destinationBuffer:d,byteOffset:o}),f.destroy(),u&&c.destroy(),d}(e,t)}setParametersWebGL(e){Ld(this.gl,e)}getParametersWebGL(e){return Nd(this.gl,e)}withParametersWebGL(e,t){return bf(this.gl,e,t)}resetWebGL(){Pr.warn("WebGLDevice.resetWebGL is deprecated, use only for debugging")(),Ld(this.gl,bd)}_getDeviceSpecificTextureFormatCapabilities(e){return function(e,t,n){let r=t.create;const i=qd[t.format];return void 0===(null==i?void 0:i.gl)&&(r=!1),(null==i?void 0:i.x)&&(r=r&&Boolean(jd(e,i.x,n))),{format:t.format,create:r&&t.create,render:r&&t.render,filter:r&&t.filter,blend:r&&t.blend,store:r&&t.store}}(this.gl,e,this._extensions)}loseDevice(){var e;let t=!1;const n=this.getExtension("WEBGL_lose_context").WEBGL_lose_context;return n&&(t=!0,n.loseContext()),null==(e=this._resolveContextLost)||e.call(this,{reason:"destroyed",message:"Application triggered context loss"}),t}pushState(){Od.get(this.gl).push()}popState(){Od.get(this.gl).pop()}getGLKey(e,t){const n=Number(e);for(const r in this.gl)if(this.gl[r]===n)return`GL.${r}`;return(null==t?void 0:t.emptyIfUnknown)?"":String(e)}getGLKeys(e){const t={emptyIfUnknown:!0};return Object.entries(e).reduce((e,[n,r])=>(e[`${n}:${this.getGLKey(n,t)}`]=`${r}:${this.getGLKey(r,t)}`,e),{})}setConstantAttributeWebGL(e,t){const n=this.limits.maxVertexAttributes;this._constants=this._constants||new Array(n).fill(null);const r=this._constants[e];switch(r&&function(e,t){if(!e||!t||e.length!==t.length||e.constructor!==t.constructor)return!1;for(let n=0;nGn.error(e.message,e.cause)(),onHover:null,onClick:null,onDragStart:null,onDrag:null,onDragEnd:null,_onMetrics:null,getCursor:({isDragging:e})=>e?"grabbing":"grab",getTooltip:null,debug:!1,drawPickingColors:!1};class Jf{constructor(e){var t;this.width=0,this.height=0,this.userData={},this.device=null,this.canvas=null,this.viewManager=null,this.layerManager=null,this.effectManager=null,this.deckRenderer=null,this.deckPicker=null,this.eventManager=null,this.widgetManager=null,this.tooltip=null,this.animationLoop=null,this.cursorState={isHovering:!1,isDragging:!1},this.stats=new kt({id:"deck.gl"}),this.metrics={fps:0,setPropsTime:0,updateAttributesTime:0,framesRedrawn:0,pickTime:0,pickCount:0,gpuTime:0,gpuTimePerFrame:0,cpuTime:0,cpuTimePerFrame:0,bufferMemory:0,textureMemory:0,renderbufferMemory:0,gpuMemory:0},this._metricsCounter=0,this._needsRedraw="Initial render",this._pickRequest={mode:"hover",x:-1,y:-1,radius:0,event:null},this._lastPointerDownInfo=null,this._onPointerMove=e=>{const{_pickRequest:t}=this;if("pointerleave"===e.type)t.x=-1,t.y=-1,t.radius=0;else{if(e.leftButton||e.rightButton)return;{const n=e.offsetCenter;if(!n)return;t.x=n.x,t.y=n.y,t.radius=this.props.pickingRadius}}this.layerManager&&(this.layerManager.context.mousePosition={x:t.x,y:t.y}),t.event=e},this._onEvent=e=>{const t=Fl[e.type],n=e.offsetCenter;if(!t||!n||!this.layerManager)return;const r=this.layerManager.getLayers(),i=this.deckPicker.getLastPickedObject({x:n.x,y:n.y,layers:r,viewports:this.getViewports(n)},this._lastPointerDownInfo),{layer:s}=i,o=s&&(s[t]||s.props[t]),a=this.props[t];let A=!1;o&&(A=o.call(s,i,e)),A||(null==a||a(i,e),this.widgetManager.onEvent(i,e))},this._onPointerDown=e=>{var t;if("webgpu"===(null==(t=this.device)?void 0:t.type))return;const n=e.offsetCenter,r=this._pick("pickObject","pickObject Time",{x:n.x,y:n.y,radius:this.props.pickingRadius});this._lastPointerDownInfo=r.result[0]||r.emptyInfo},this.props={...Zf,...e},(e=this.props).viewState&&e.initialViewState&&Gn.warn("View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.")(),this.viewState=this.props.initialViewState,e.device&&(this.device=e.device);let n=this.device;if(!n&&e.gl){e.gl instanceof WebGLRenderingContext&&Gn.error("WebGL1 context not supported.")();const r=null==(t=this.props.deviceProps)?void 0:t.onResize;n=_d.attach(e.gl,{...this.props.deviceProps,onResize:(e,t)=>{const{width:n,height:i}=e.canvas;e.drawingBufferWidth=n,e.drawingBufferHeight=i,this._needsRedraw="Canvas resized",null==r||r(e,t)}})}n||(n=this._createDevice(e)),this.animationLoop=this._createAnimationLoop(n,e),this.setProps(e),e._typedArrayManagerProps&&nu.setOptions(e._typedArrayManagerProps),this.animationLoop.start()}finalize(){var e,t,n,r,i,s,o,a,A,l;null==(e=this.animationLoop)||e.stop(),null==(t=this.animationLoop)||t.destroy(),this.animationLoop=null,this._lastPointerDownInfo=null,null==(n=this.layerManager)||n.finalize(),this.layerManager=null,null==(r=this.viewManager)||r.finalize(),this.viewManager=null,null==(i=this.effectManager)||i.finalize(),this.effectManager=null,null==(s=this.deckRenderer)||s.finalize(),this.deckRenderer=null,null==(o=this.deckPicker)||o.finalize(),this.deckPicker=null,null==(a=this.eventManager)||a.destroy(),this.eventManager=null,null==(A=this.widgetManager)||A.finalize(),this.widgetManager=null,this.props.canvas||this.props.device||this.props.gl||!this.canvas||(null==(l=this.canvas.parentElement)||l.removeChild(this.canvas),this.canvas=null)}setProps(e){var t,n,r,i,s,o,a;this.stats.get("setProps Time").timeStart(),"onLayerHover"in e&&Gn.removed("onLayerHover","onHover")(),"onLayerClick"in e&&Gn.removed("onLayerClick","onClick")(),e.initialViewState&&!lh(this.props.initialViewState,e.initialViewState,3)&&(this.viewState=e.initialViewState),Object.assign(this.props,e),this._setCanvasSize(this.props);const A=Object.create(this.props);Object.assign(A,{views:this._getViews(),width:this.width,height:this.height,viewState:this._getViewState()}),e.device&&e.device.id!==(null==(t=this.device)?void 0:t.id)&&(null==(n=this.animationLoop)||n.stop(),this.canvas!==(null==(r=e.device.canvasContext)?void 0:r.canvas)&&(null==(i=this.canvas)||i.remove(),null==(s=this.eventManager)||s.destroy(),this.canvas=null),Gn.log(`recreating animation loop for new device! id=${e.device.id}`)(),this.animationLoop=this._createAnimationLoop(e.device,e),this.animationLoop.start()),null==(o=this.animationLoop)||o.setProps(A),void 0!==e.useDevicePixels&&(null==(a=this.device)?void 0:a.canvasContext)&&this.device.canvasContext.setProps({useDevicePixels:e.useDevicePixels}),this.layerManager&&(this.viewManager.setProps(A),this.layerManager.activateViewport(this.getViewports()[0]),this.layerManager.setProps(A),this.effectManager.setProps(A),this.deckRenderer.setProps(A),this.deckPicker.setProps(A),this.widgetManager.setProps(A)),this.stats.get("setProps Time").timeEnd()}needsRedraw(e={clearRedrawFlags:!1}){if(!this.layerManager)return!1;if(this.props._animate)return"Deck._animate";let t=this._needsRedraw;e.clearRedrawFlags&&(this._needsRedraw=!1);const n=this.viewManager.needsRedraw(e),r=this.layerManager.needsRedraw(e),i=this.effectManager.needsRedraw(e),s=this.deckRenderer.needsRedraw(e);return t=t||n||r||i||s,t}redraw(e){if(!this.layerManager)return;let t=this.needsRedraw({clearRedrawFlags:!0});t=e||t,t&&(this.stats.get("Redraw Count").incrementCount(),this.props._customRender?this.props._customRender(t):this._drawLayers(t))}get isInitialized(){return null!==this.viewManager}getViews(){return bh(this.viewManager),this.viewManager.views}getViewports(e){return bh(this.viewManager),this.viewManager.getViewports(e)}getCanvas(){return this.canvas}pickObject(e){const t=this._pick("pickObject","pickObject Time",e).result;return t.length?t[0]:null}pickMultipleObjects(e){return e.depth=e.depth||10,this._pick("pickObject","pickMultipleObjects Time",e).result}pickObjects(e){return this._pick("pickObjects","pickObjects Time",e)}_addResources(e,t=!1){for(const n in e)this.layerManager.resourceManager.add({resourceId:n,data:e[n],forceUpdate:t})}_removeResources(e){for(const t of e)this.layerManager.resourceManager.remove(t)}_addDefaultEffect(e){this.effectManager.addDefaultEffect(e)}_addDefaultShaderModule(e){this.layerManager.addDefaultShaderModule(e)}_removeDefaultShaderModule(e){var t;null==(t=this.layerManager)||t.removeDefaultShaderModule(e)}_pick(e,t,n){bh(this.deckPicker);const{stats:r}=this;r.get("Pick Count").incrementCount(),r.get(t).timeStart();const i=this.deckPicker[e]({layers:this.layerManager.getLayers(n),views:this.viewManager.getViews(),viewports:this.getViewports(n),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...n});return r.get(t).timeEnd(),i}_createCanvas(e){let t=e.canvas;return"string"==typeof t&&(t=document.getElementById(t),bh(t)),t||(t=document.createElement("canvas"),t.id=e.id||"deckgl-overlay",e.width&&"number"==typeof e.width&&(t.width=e.width),e.height&&"number"==typeof e.height&&(t.height=e.height),(e.parent||document.body).appendChild(t)),Object.assign(t.style,e.style),t}_setCanvasSize(e){var t;if(!this.canvas)return;const{width:n,height:r}=e;if(n||0===n){const e=Number.isFinite(n)?`${n}px`:n;this.canvas.style.width=e}if(r||0===r){const n=Number.isFinite(r)?`${r}px`:r;this.canvas.style.position=(null==(t=e.style)?void 0:t.position)||"absolute",this.canvas.style.height=n}}_updateCanvasSize(){var e,t;const{canvas:n}=this;if(!n)return;const r=n.clientWidth??n.width,i=n.clientHeight??n.height;r===this.width&&i===this.height||(this.width=r,this.height=i,null==(e=this.viewManager)||e.setProps({width:r,height:i}),null==(t=this.layerManager)||t.activateViewport(this.getViewports()[0]),this.props.onResize({width:r,height:i}))}_createAnimationLoop(e,t){const{gl:n,onError:r}=t;return new xu({device:e,autoResizeDrawingBuffer:!n,autoResizeViewport:!1,onInitialize:e=>this._setDevice(e.device),onRender:this._onRenderFrame.bind(this),onError:r})}_createDevice(e){var t,n,r;const i=null==(t=this.props.deviceProps)?void 0:t.createCanvasContext,s="object"==typeof i?i:void 0,o={adapters:[],_cacheShaders:!0,_cachePipelines:!0,...e.deviceProps};o.adapters.includes(_d)||o.adapters.push(_d);const a={alphaMode:"webgpu"===(null==(n=this.props.deviceProps)?void 0:n.type)?"premultiplied":void 0},A=null==(r=this.props.deviceProps)?void 0:r.onResize;return di.createDevice({_reuseDevices:!0,type:"webgl",...o,createCanvasContext:{...a,...s,canvas:this._createCanvas(e),useDevicePixels:this.props.useDevicePixels,autoResize:!0},onResize:(e,t)=>{this._needsRedraw="Canvas resized",null==A||A(e,t)}})}_getViewState(){return this.props.viewState||this.viewState}_getViews(){const{views:e}=this.props,t=Array.isArray(e)?e:e?[e]:[new Oh({id:"default-view"})];return t.length&&this.props.controller&&(t[0].props.controller=this.props.controller),t}_onContextLost(){const{onError:e}=this.props;this.animationLoop&&e&&e(new Error("WebGL context is lost"))}_pickAndCallback(){var e,t,n,r;if("webgpu"===(null==(e=this.device)?void 0:e.type))return;const{_pickRequest:i}=this;if(i.event){const{result:e,emptyInfo:s}=this._pick("pickObject","pickObject Time",i);this.cursorState.isHovering=e.length>0;let o=s,a=!1;for(const n of e)o=n,a=(null==(t=n.layer)?void 0:t.onHover(n,i.event))||a;a||(null==(r=(n=this.props).onHover)||r.call(n,o,i.event),this.widgetManager.onHover(o,i.event)),i.event=null}}_updateCursor(){const e=this.props.parent||this.canvas;e&&(e.style.cursor=this.props.getCursor(this.cursorState))}_setDevice(e){var t,n;if(this.device=e,!this.animationLoop)return;this.canvas||(this.canvas=null==(t=this.device.canvasContext)?void 0:t.canvas,!this.canvas.isConnected&&this.props.parent&&this.props.parent.insertBefore(this.canvas,this.props.parent.firstChild)),"webgl"===this.device.type&&this.device.setParametersWebGL({blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthTest:!0,depthFunc:515}),this.props.onDeviceInitialized(this.device),"webgl"===this.device.type&&this.props.onWebGLInitialized(this.device.gl);const r=new vu;r.play(),this.animationLoop.attachTimeline(r),this.eventManager=new Nl(this.props.parent||this.canvas,{touchAction:this.props.touchAction,recognizers:Object.keys(Ul).map(e=>{var t;const[n,r,i,s]=Ul[e];return{recognizer:new n({...r,...null==(t=this.props.eventRecognizerOptions)?void 0:t[e],event:e}),recognizeWith:i,requestFailure:s}}),events:{pointerdown:this._onPointerDown,pointermove:this._onPointerMove,pointerleave:this._onPointerMove}});for(const s in Fl)this.eventManager.on(s,this._onEvent);this.viewManager=new ch({timeline:r,eventManager:this.eventManager,onViewStateChange:this._onViewStateChange.bind(this),onInteractionStateChange:this._onInteractionStateChange.bind(this),views:this._getViews(),viewState:this._getViewState(),width:this.width,height:this.height});const i=this.viewManager.getViewports()[0];this.layerManager=new Ah(this.device,{deck:this,stats:this.stats,viewport:i,timeline:r}),this.effectManager=new Uh({deck:this,device:this.device}),this.deckRenderer=new Gh(this.device),this.deckPicker=new Qh(this.device),this.widgetManager=new Zh({deck:this,parentElement:null==(n=this.canvas)?void 0:n.parentElement}),this.widgetManager.addDefault(new nd),this.setProps(this.props),this._updateCanvasSize(),this.props.onLoad()}_drawLayers(e,t){var n;const{device:r,gl:i}=this.layerManager.context;this.props.onBeforeRender({device:r,gl:i});const s={target:this.props._framebuffer,layers:this.layerManager.getLayers(),viewports:this.viewManager.getViewports(),onViewportActive:this.layerManager.activateViewport,views:this.viewManager.getViews(),pass:"screen",effects:this.effectManager.getEffects(),...t};null==(n=this.deckRenderer)||n.renderLayers(s),"screen"===s.pass&&this.widgetManager.onRedraw({viewports:s.viewports,layers:s.layers}),this.props.onAfterRender({device:r,gl:i})}_onRenderFrame(){var e;this._getFrameStats(),this._metricsCounter++%60==0&&(this._getMetrics(),this.stats.reset(),Gn.table(4,this.metrics)(),this.props._onMetrics&&this.props._onMetrics(this.metrics)),this._updateCanvasSize(),this._updateCursor(),this.layerManager.updateLayers(),"webgpu"!==(null==(e=this.device)?void 0:e.type)&&this._pickAndCallback(),this.redraw(),this.viewManager&&this.viewManager.updateViewStates()}_onViewStateChange(e){const t=this.props.onViewStateChange(e)||e.viewState;this.viewState&&(this.viewState={...this.viewState,[e.viewId]:t},this.props.viewState||this.viewManager&&this.viewManager.setProps({viewState:this.viewState}))}_onInteractionStateChange(e){this.cursorState.isDragging=e.isDragging||!1,this.props.onInteractionStateChange(e)}_getFrameStats(){const{stats:e}=this;e.get("frameRate").timeEnd(),e.get("frameRate").timeStart();const t=this.animationLoop.stats;e.get("GPU Time").addTime(t.get("GPU Time").lastTiming),e.get("CPU Time").addTime(t.get("CPU Time").lastTiming)}_getMetrics(){const{metrics:e,stats:t}=this;e.fps=t.get("frameRate").getHz(),e.setPropsTime=t.get("setProps Time").time,e.updateAttributesTime=t.get("Update Attributes").time,e.framesRedrawn=t.get("Redraw Count").count,e.pickTime=t.get("pickObject Time").time+t.get("pickMultipleObjects Time").time+t.get("pickObjects Time").time,e.pickCount=t.get("Pick Count").count,e.gpuTime=t.get("GPU Time").time,e.cpuTime=t.get("CPU Time").time,e.gpuTimePerFrame=t.get("GPU Time").getAverageTime(),e.cpuTimePerFrame=t.get("CPU Time").getAverageTime();const n=di.stats.get("Memory Usage");e.bufferMemory=n.get("Buffer Memory").count,e.textureMemory=n.get("Texture Memory").count,e.renderbufferMemory=n.get("Renderbuffer Memory").count,e.gpuMemory=n.get("GPU Memory").count}}Jf.defaultProps=Zf,Jf.VERSION=$n;const ep=Fr;function tp(e,t,n){const r="webgpu"===n&&"uint8"===t.type?"unorm8":t.type;return{attribute:e,format:t.size>1?`${r}x${t.size}`:t.type,byteOffset:t.offset||0}}function np(e){return e.stride||e.size*e.bytesPerElement}function rp(e,t){t.offset&&Gn.removed("shaderAttribute.offset","vertexOffset, elementOffset")();const n=np(e),r=(void 0!==t.vertexOffset?t.vertexOffset:e.vertexOffset||0)*n+(t.elementOffset||0)*e.bytesPerElement+(e.offset||0);return{...t,offset:r,stride:n}}class ip{constructor(e,t,n){this._buffer=null,this.device=e,this.id=t.id||"",this.size=t.size||1;const r=t.logicalType||t.type,i="float64"===r;let s,{defaultValue:o}=t;o=Number.isFinite(o)?[o]:o||new Array(this.size).fill(0),s=i?"float32":!r&&t.isIndexed?"uint32":r||"float32";let a=function(e){switch(e){case"float64":return Float64Array;case"uint8":case"unorm8":return Uint8ClampedArray;default:return Ur(e)}}(r||s);this.doublePrecision=i,i&&!1===t.fp64&&(a=Float32Array),this.value=null,this.settings={...t,defaultType:a,defaultValue:o,logicalType:r,type:s,normalized:s.includes("norm"),size:this.size,bytesPerElement:a.BYTES_PER_ELEMENT},this.state={...n,externalBuffer:null,bufferAccessor:this.settings,allocatedValue:null,numInstances:0,bounds:null,constant:!1}}get isConstant(){return this.state.constant}get buffer(){return this._buffer}get byteOffset(){const e=this.getAccessor();return e.vertexOffset?e.vertexOffset*np(e):0}get numInstances(){return this.state.numInstances}set numInstances(e){this.state.numInstances=e}delete(){this._buffer&&(this._buffer.delete(),this._buffer=null),nu.release(this.state.allocatedValue)}getBuffer(){return this.state.constant?null:this.state.externalBuffer||this._buffer}getValue(e=this.id,t=null){const n={};if(this.state.constant){const r=this.value;if(t){const i=rp(this.getAccessor(),t),s=i.offset/r.BYTES_PER_ELEMENT,o=i.size||this.size;n[e]=r.subarray(s,s+o)}else n[e]=r}else n[e]=this.getBuffer();return this.doublePrecision&&(this.value instanceof Float64Array?n[`${e}64Low`]=n[e]:n[`${e}64Low`]=new Float32Array(this.size)),n}_getBufferLayout(e=this.id,t=null){const n=this.getAccessor(),r=[],i={name:this.id,byteStride:np(n),attributes:r};if(this.doublePrecision){const i=function(e,t){const n=rp(e,t);return{high:n,low:{...n,offset:n.offset+4*e.size}}}(n,t||{});r.push(tp(e,{...n,...i.high},this.device.type),tp(`${e}64Low`,{...n,...i.low},this.device.type))}else if(t){const i=rp(n,t);r.push(tp(e,{...n,...i},this.device.type))}else r.push(tp(e,n,this.device.type));return i}setAccessor(e){this.state.bufferAccessor=e}getAccessor(){return this.state.bufferAccessor}getBounds(){if(this.state.bounds)return this.state.bounds;let e=null;if(this.state.constant&&this.value){const t=Array.from(this.value);e=[t,t]}else{const{value:t,numInstances:n,size:r}=this,i=n*r;if(t&&i&&t.length>=i){const n=new Array(r).fill(1/0),s=new Array(r).fill(-1/0);for(let e=0;es[i]&&(s[i]=r)}e=[n,s]}}return this.state.bounds=e,e}setData(e){const{state:t}=this;let n;n=ArrayBuffer.isView(e)?{value:e}:e instanceof Br?{buffer:e}:e;const r={...this.settings,...n};if(ArrayBuffer.isView(n.value)){if(!n.type)if(this.doublePrecision&&n.value instanceof Float64Array)r.type="float32";else{const e=ep(n.value);r.type=r.normalized?e.replace("int","norm"):e}r.bytesPerElement=n.value.BYTES_PER_ELEMENT,r.stride=np(r)}if(t.bounds=null,n.constant){let e=n.value;if(e=this._normalizeValue(e,[],0),this.settings.normalized&&(e=this.normalizeConstant(e)),t.constant&&this._areValuesEqual(e,this.value))return!1;t.externalBuffer=null,t.constant=!0,this.value=ArrayBuffer.isView(e)?e:new Float32Array(e)}else if(n.buffer){const e=n.buffer;t.externalBuffer=e,t.constant=!1,this.value=n.value||null}else if(n.value){this._checkExternalBuffer(n);let e=n.value;t.externalBuffer=null,t.constant=!1,this.value=e;let{buffer:i}=this;const s=np(r),o=(r.vertexOffset||0)*s;if(this.doublePrecision&&e instanceof Float64Array&&(e=au(e,r)),this.settings.isIndexed){const t=this.settings.defaultType;e.constructor!==t&&(e=new t(e))}const a=e.byteLength+o+2*s;(!i||i.byteLength(e+128)/255*2-1);case"snorm16":return new Float32Array(e).map(e=>(e+32768)/65535*2-1);case"unorm8":return new Float32Array(e).map(e=>e/255);case"unorm16":return new Float32Array(e).map(e=>e/65535);default:return e}}_normalizeValue(e,t,n){const{defaultValue:r,size:i}=this.settings;if(Number.isFinite(e))return t[n]=e,t;if(!e){let e=i;for(;--e>=0;)t[n+e]=r[e];return t}switch(i){case 4:t[n+3]=Number.isFinite(e[3])?e[3]:r[3];case 3:t[n+2]=Number.isFinite(e[2])?e[2]:r[2];case 2:t[n+1]=Number.isFinite(e[1])?e[1]:r[1];case 1:t[n+0]=Number.isFinite(e[0])?e[0]:r[0];break;default:let s=i;for(;--s>=0;)t[n+s]=Number.isFinite(e[s])?e[s]:r[s]}return t}_areValuesEqual(e,t){if(!e||!t)return!1;const{size:n}=this;for(let r=0;r0&&(op.length=e.length,r=op):r=sp,(t>0||Number.isFinite(n))&&(r=(Array.isArray(r)?r:Array.from(r)).slice(t,n),i.index=t-1),{iterable:r,objectInfo:i}}function Ap(e){return e&&e[Symbol.asyncIterator]}function lp(e,t){const{size:n,stride:r,offset:i,startIndices:s,nested:o}=t,a=e.BYTES_PER_ELEMENT,A=r?r/a:n,l=i?i/a:0,c=Math.floor((e.length-l)/A);return(t,{index:r,target:i})=>{if(!s){const t=r*A+l;for(let r=0;re},spring:{stiffness:.05,damping:.5}};function dp(e,t){if(!e)return null;Number.isFinite(e)&&(e={type:"interpolation",duration:e});const n=e.type||"interpolation";return{...hp[n],...t,...e,type:n}}class fp extends ip{constructor(e,t){super(e,t,{startIndices:null,lastExternalBuffer:null,binaryValue:null,binaryAccessor:null,needsUpdate:!0,needsRedraw:!1,layoutChanged:!1,updateRanges:up}),this.constant=!1,this.settings.update=t.update||(t.accessor?this._autoUpdater:void 0),Object.seal(this.settings),Object.seal(this.state),this._validateAttributeUpdaters()}get startIndices(){return this.state.startIndices}set startIndices(e){this.state.startIndices=e}needsUpdate(){return this.state.needsUpdate}needsRedraw({clearChangedFlags:e=!1}={}){const t=this.state.needsRedraw;return this.state.needsRedraw=t&&!e,t}layoutChanged(){return this.state.layoutChanged}setAccessor(e){var t,n,r;(t=this.state).layoutChanged||(t.layoutChanged=(n=e,r=this.getAccessor(),!(n.type===r.type&&n.size===r.size&&np(n)===np(r)&&(n.offset||0)===(r.offset||0)))),super.setAccessor(e)}getUpdateTriggers(){const{accessor:e}=this.settings;return[this.id].concat("function"!=typeof e&&e||[])}supportsTransition(){return Boolean(this.settings.transition)}getTransitionSetting(e){if(!e||!this.supportsTransition())return null;const{accessor:t}=this.settings,n=this.settings.transition;return dp(Array.isArray(t)?e[t.find(t=>e[t])]:e[t],n)}setNeedsUpdate(e=this.id,t){if(this.state.needsUpdate=this.state.needsUpdate||e,this.setNeedsRedraw(e),t){const{startRow:e=0,endRow:n=1/0}=t;this.state.updateRanges=function(e,t){if(e===up)return e;if(t[0]<0&&(t[0]=0),t[0]>=t[1])return e;const n=[],r=e.length;let i=0;for(let s=0;st[1]?n.push(r):t=[Math.min(r[0],t[0]),Math.max(r[1],t[1])]}return n.splice(i,0,t),n}(this.state.updateRanges,[e,n])}else this.state.updateRanges=up}clearNeedsUpdate(){this.state.needsUpdate=!1,this.state.updateRanges=cp}setNeedsRedraw(e=this.id){this.state.needsRedraw=this.state.needsRedraw||e}allocate(e){const{state:t,settings:n}=this;return!n.noAlloc&&!!n.update&&(super.allocate(e,t.updateRanges!==up),!0)}updateBuffer({numInstances:e,data:t,props:n,context:r}){if(!this.needsUpdate())return!1;const{state:{updateRanges:i},settings:{update:s,noAlloc:o}}=this;let a=!0;if(s){for(const[o,a]of i)s.call(r,this,{data:t,startRow:o,endRow:a,props:n,numInstances:e});if(this.value)if(this.constant||!this.buffer||this.buffer.byteLengthi[u]),bh("function"==typeof d,`accessor "${u}" is not a function`);let f=e.getVertexOffset(n);const{iterable:p,objectInfo:g}=ap(t,n,r);for(const m of p){g.index++;let t=d(m,g);if(h&&(t=h.call(this,t)),c){const n=(g.indexl?A.set(t,f):(e._normalizeValue(t,g.target,0),sh({target:A,source:g.target,start:f,count:n}));f+=n*l}else e._normalizeValue(t,A,f),f+=l}}_validateAttributeUpdaters(){const{settings:e}=this;if(!e.noAlloc&&"function"!=typeof e.update)throw new Error(`Attribute ${this.id} missing update or accessor`)}_checkAttributeArray(){const{value:e}=this,t=Math.min(4,this.size);if(e&&e.length>=t){let n=!0;switch(t){case 4:n=n&&Number.isFinite(e[3]);case 3:n=n&&Number.isFinite(e[2]);case 2:n=n&&Number.isFinite(e[1]);case 1:n=n&&Number.isFinite(e[0]);break;default:n=!1}if(!n)throw new Error(`Illegal attribute generated for ${this.id}`)}}}function pp(e){const{source:t,target:n,start:r=0,size:i,getData:s}=e,o=e.end||n.length,a=t.length,A=o-r;if(a>A)return void n.set(t.subarray(0,A),r);if(n.set(t,r),!s)return;let l=a;for(;le}){const a=n.doublePrecision&&n.value instanceof Float64Array?2:1,A=n.size*a,l=n.byteOffset,c=n.settings.bytesPerElement<4?l/n.settings.bytesPerElement*4:l,u=n.startIndices,h=s&&u,d=n.isConstant;if(!h&&t&&r>=i)return t;const f=n.value instanceof Float64Array?Float32Array:n.value.constructor,p=d?n.value:new f(n.getBuffer().readSyncWebGL(l,i*f.BYTES_PER_ELEMENT).buffer);if(n.settings.normalized&&!d){const e=o;o=(t,r)=>n.normalizeConstant(e(t,r))}const g=d?(e,t)=>o(p,t):(e,t)=>o(p.subarray(e+l,e+l+A),t),m=t?new Float32Array(t.readSyncWebGL(c,4*r).buffer):new Float32Array(0),_=new Float32Array(i);return function({source:e,target:t,size:n,getData:r,sourceStartIndices:i,targetStartIndices:s}){if(!i||!s)return pp({source:e,target:t,size:n,getData:r}),t;let o=0,a=0;const A=r&&((e,t)=>r(e+a,t)),l=Math.min(i.length,s.length);for(let c=1;c EPSILON || length(aTo - aCur) > EPSILON;\n vIsTransitioningFlag = isTransitioning ? 1.0 : 0.0;\n\n vNext = getNextValue(aCur, aPrev, aTo);\n gl_Position = vec4(0, 0, 0, 1);\n gl_PointSize = 100.0;\n}\n",fs:"#version 300 es\n#define SHADER_NAME spring-transition-is-transitioning-fragment-shader\n\nin float vIsTransitioningFlag;\n\nout vec4 fragColor;\n\nvoid main(void) {\n if (vIsTransitioningFlag == 0.0) {\n discard;\n }\n fragColor = vec4(1.0);\n}",bufferLayout:[{name:"aPrev",format:r},{name:"aCur",format:r},{name:"aTo",format:t.getBufferLayout().attributes[0].format}],varyings:["vNext"],modules:[Ep],defines:{ATTRIBUTE_TYPE:n},parameters:{depthCompare:"always",blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"}})}(e,t)}start(e,t){const n=this.currentLength,r=this.currentStartIndices;super.start(e,t);const{buffers:i,attribute:s}=this;for(let a=0;a<2;a++)i[a]=vp({device:this.device,buffer:i[a],attribute:s,fromLength:n,toLength:this.currentLength,fromStartIndices:r,getData:e.enter});i[2]=bp({device:this.device,source:i[0],target:i[2]}),this.setBuffer(i[1]);const{model:o}=this.transform;o.setVertexCount(Math.floor(this.currentLength/s.size)),s.isConstant?o.setConstantAttributes({aTo:s.value}):o.setAttributes({aTo:s.getBuffer()})}onUpdate(){const{buffers:e,transform:t,framebuffer:n,transition:r}=this,i=this.settings;t.model.setAttributes({aPrev:e[0],aCur:e[1]}),t.transformFeedback.setBuffers({vNext:e[2]});const s={stiffness:i.stiffness,damping:i.damping};t.model.shaderInputs.setProps({spring:s}),t.run({framebuffer:n,discard:!1,parameters:{viewport:[0,0,1,1]},clearColor:[0,0,0,0]}),_p(e),this.setBuffer(e[1]),this.device.readPixelsToArrayWebGL(n)[0]>0||r.end()}delete(){super.delete(),this.transform.destroy(),this.texture.destroy(),this.framebuffer.destroy()}}};class Sp{constructor(e,{id:t,timeline:n}){if(!e)throw new Error("AttributeTransitionManager is constructed without device");this.id=t,this.device=e,this.timeline=n,this.transitions={},this.needsRedraw=!1,this.numInstances=1}finalize(){for(const e in this.transitions)this._removeTransition(e)}update({attributes:e,transitions:t,numInstances:n}){this.numInstances=n||1;for(const r in e){const n=e[r],i=n.getTransitionSetting(t);i&&this._updateAttribute(r,n,i)}for(const r in this.transitions){const n=e[r];n&&n.getTransitionSetting(t)||this._removeTransition(r)}}hasAttribute(e){const t=this.transitions[e];return t&&t.inProgress}getAttributes(){const e={};for(const t in this.transitions){const n=this.transitions[t];n.inProgress&&(e[t]=n.attributeInTransition)}return e}run(){if(0===this.numInstances)return!1;for(const t in this.transitions)this.transitions[t].update()&&(this.needsRedraw=!0);const e=this.needsRedraw;return this.needsRedraw=!1,e}_removeTransition(e){this.transitions[e].delete(),delete this.transitions[e]}_updateAttribute(e,t,n){const r=this.transitions[e];let i=!r||r.type!==n.type;if(i){r&&this._removeTransition(e);const s=Tp[n.type];s?this.transitions[e]=new s({attribute:t,timeline:this.timeline,device:this.device}):(Gn.error(`unsupported transition type '${n.type}'`)(),i=!1)}(i||t.needsRedraw())&&(this.needsRedraw=!0,this.transitions[e].start(n,this.numInstances))}}const Cp="attributeManager.invalidate";class kp{constructor(e,{id:t="attribute-manager",stats:n,timeline:r}={}){this.mergeBoundsMemoized=Gl(Au),this.id=t,this.device=e,this.attributes={},this.updateTriggers={},this.needsRedraw=!0,this.userData={},this.stats=n,this.attributeTransitionManager=new Sp(e,{id:`${t}-transitions`,timeline:r}),Object.seal(this)}finalize(){for(const e in this.attributes)this.attributes[e].delete();this.attributeTransitionManager.finalize()}getNeedsRedraw(e={clearRedrawFlags:!1}){const t=this.needsRedraw;return this.needsRedraw=this.needsRedraw&&!e.clearRedrawFlags,t&&this.id}setNeedsRedraw(){this.needsRedraw=!0}add(e){this._add(e)}addInstanced(e){this._add(e,{stepMode:"instance"})}remove(e){for(const t of e)void 0!==this.attributes[t]&&(this.attributes[t].delete(),delete this.attributes[t])}invalidate(e,t){const n=this._invalidateTrigger(e,t);Wn(Cp,this,e,n)}invalidateAll(e){for(const t in this.attributes)this.attributes[t].setNeedsUpdate(t,e);Wn(Cp,this,"all")}update({data:e,numInstances:t,startIndices:n=null,transitions:r,props:i={},buffers:s={},context:o={}}){let a=!1;Wn("attributeManager.updateStart",this),this.stats&&this.stats.get("Update Attributes").timeStart();for(const A in this.attributes){const r=this.attributes[A],l=r.settings.accessor;r.startIndices=n,r.numInstances=t,i[A]&&Gn.removed(`props.${A}`,`data.attributes.${A}`)(),r.setExternalBuffer(s[A])||r.setBinaryValue("string"==typeof l?s[l]:void 0,e.startIndices)||"string"==typeof l&&!s[l]&&r.setConstantValue(o,i[l])||r.needsUpdate()&&(a=!0,this._updateAttribute({attribute:r,numInstances:t,data:e,props:i,context:o})),this.needsRedraw=this.needsRedraw||r.needsRedraw()}a&&Wn("attributeManager.updateEnd",this,t),this.stats&&this.stats.get("Update Attributes").timeEnd(),this.attributeTransitionManager.update({attributes:this.attributes,numInstances:t,transitions:r})}updateTransition(){const{attributeTransitionManager:e}=this,t=e.run();return this.needsRedraw=this.needsRedraw||t,t}getAttributes(){return{...this.attributes,...this.attributeTransitionManager.getAttributes()}}getBounds(e){const t=e.map(e=>{var t;return null==(t=this.attributes[e])?void 0:t.getBounds()});return this.mergeBoundsMemoized(t)}getChangedAttributes(e={clearChangedFlags:!1}){const{attributes:t,attributeTransitionManager:n}=this,r={...n.getAttributes()};for(const i in t){const s=t[i];s.needsRedraw(e)&&!n.hasAttribute(i)&&(r[i]=s)}return r}getBufferLayouts(e){return Object.values(this.getAttributes()).map(t=>t.getBufferLayout(e))}_add(e,t){for(const n in e){const r=e[n],i={...r,id:n,size:(r.isIndexed?1:r.size)||1,...t};this.attributes[n]=new fp(this.device,i)}this._mapUpdateTriggersToAttributes()}_mapUpdateTriggersToAttributes(){const e={};for(const t in this.attributes)this.attributes[t].getUpdateTriggers().forEach(n=>{e[n]||(e[n]=[]),e[n].push(t)});this.updateTriggers=e}_invalidateTrigger(e,t){const{attributes:n,updateTriggers:r}=this,i=r[e];return i&&i.forEach(e=>{const r=n[e];r&&r.setNeedsUpdate(r.id,t)}),i}_updateAttribute(e){const{attribute:t,numInstances:n}=e;Wn("attribute.updateStart",t),t.constant?t.setConstantValue(e.context,t.value):(t.allocate(n)&&Wn("attribute.allocate",t,n),t.updateBuffer(e)&&(this.needsRedraw=!0,Wn("attribute.updateEnd",t,n)))}}const Rp=1e-5;function Pp(e,t,n,r,i){const s=t-e;return(n-t)*i+-s*r+s+t}function Ip(e,t){if(Array.isArray(e)){let n=0;for(let r=0;r0}add(e,t,n,r){const{transitions:i}=this;if(i.has(e)){const n=i.get(e),{value:r=n.settings.fromValue}=n;t=r,this.remove(e)}if(!(r=dp(r)))return;const s=Mp[r.type];if(!s)return void Gn.error(`unsupported transition type '${r.type}'`)();const o=new s(this.timeline);o.start({...r,fromValue:t,toValue:n}),i.set(e,o)}remove(e){const{transitions:t}=this;t.has(e)&&(t.get(e).cancel(),t.delete(e))}update(){const e={};for(const[t,n]of this.transitions)n.update(),e[t]=n.value,n.inProgress||this.remove(t);return e}clear(){for(const e of this.transitions.keys())this.remove(e)}}function Np(e,t){if(!e.transitions)return!1;const n={},r=e[Zu];let i=!1;for(const s in e.transitions){const o=r[s],a=o&&o.type;("number"===a||"color"===a||"array"===a)&&Dp(e[s],t[s],o)&&(n[s]=!0,i=!0)}return!!i&&n}function Bp({newProps:e,oldProps:t,ignoreProps:n={},propTypes:r={},triggerName:i="props"}){if(t===e)return!1;if("object"!=typeof e||null===e)return`${i} changed shallowly`;if("object"!=typeof t||null===t)return`${i} changed shallowly`;for(const s of Object.keys(e))if(!(s in n)){if(!(s in t))return`${i}.${s} added`;const n=Dp(e[s],t[s],r[s]);if(n)return`${i}.${s} ${n}`}for(const s of Object.keys(t))if(!(s in n)){if(!(s in e))return`${i}.${s} dropped`;if(!Object.hasOwnProperty.call(e,s)){const n=Dp(e[s],t[s],r[s]);if(n)return`${i}.${s} ${n}`}}return!1}function Dp(e,t,n){let r=n&&n.equal;return r&&!r(e,t,n)?"changed deeply":r||(r=e&&t&&e.equals,!r||r.call(e,t))?r||t===e?null:"changed shallowly":"changed deeply"}function Op(e,t){if(null===t)return!0;const n=t.extensions,{extensions:r}=e;if(r===n)return!1;if(!n||!r)return!0;if(r.length!==n.length)return!0;for(let i=0;i"project64"===e.name))){const e=n.modules.findIndex(e=>"project32"===e.name);e>=0&&n.modules.splice(e,1)}if("inject"in t)if(e.inject){const r={...e.inject};for(const e in t.inject)r[e]=(r[e]||"")+t.inject[e];n.inject=r}else n.inject=t.inject;return n}const jp={minFilter:"linear",mipmapFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},Gp={},zp={boolean:{validate:(e,t)=>!0,equal:(e,t,n)=>Boolean(e)===Boolean(t)},number:{validate:(e,t)=>Number.isFinite(e)&&(!("max"in t)||e<=t.max)&&(!("min"in t)||e>=t.min)},color:{validate:(e,t)=>t.optional&&!e||Hp(e)&&(3===e.length||4===e.length),equal:(e,t,n)=>lh(e,t,1)},accessor:{validate(e,t){const n=$p(e);return"function"===n||n===$p(t.value)},equal:(e,t,n)=>"function"==typeof t||lh(e,t,1)},array:{validate:(e,t)=>t.optional&&!e||Hp(e),equal(e,t,n){const{compare:r}=n,i=Number.isInteger(r)?r:r?1:0;return r?lh(e,t,i):e===t}},object:{equal(e,t,n){if(n.ignore)return!0;const{compare:r}=n,i=Number.isInteger(r)?r:r?1:0;return r?lh(e,t,i):e===t}},function:{validate:(e,t)=>t.optional&&!e||"function"==typeof e,equal:(e,t,n)=>!n.compare&&!1!==n.ignore||e===t},data:{transform:(e,t,n)=>{if(!e)return e;const{dataTransform:r}=n.props;return r?r(e):"string"==typeof e.shape&&e.shape.endsWith("-table")&&Array.isArray(e.data)?e.data:e}},image:{transform:(e,t,n)=>{const r=n.context;return r&&r.device?function(e,t,n,r){if(n instanceof Si)return n;n.constructor&&"Object"!==n.constructor.name&&(n={data:n});let i=null;n.compressed&&(i={minFilter:"linear",mipmapFilter:n.data.length>1?"nearest":"linear"});const{width:s,height:o}=n.data,a=t.createTexture({...n,sampler:{...jp,...i,...r},mipLevels:t.getMipLevelCount(s,o)});return a.generateMipmapsWebGL(),Gp[a.id]=e,a}(n.id,r.device,e,{...t.parameters,...n.props.textureParameters}):null},release:(e,t,n)=>{var r,i;r=n.id,(i=e)&&i instanceof Si&&Gp[i.id]===r&&(i.delete(),delete Gp[i.id])}}};function Vp(e,t){switch($p(t)){case"object":return Wp(e,t);case"array":return Wp(e,{type:"array",value:t,compare:!1});case"boolean":return Wp(e,{type:"boolean",value:t});case"number":return Wp(e,{type:"number",value:t});case"function":return Wp(e,{type:"function",value:t,compare:!0});default:return{name:e,type:"unknown",value:t}}}function Wp(e,t){return"type"in t?{name:e,...zp[t.type],...t}:"value"in t?{name:e,type:$p(t.value),...t}:{name:e,type:"object",value:t}}function Hp(e){return Array.isArray(e)||ArrayBuffer.isView(e)}function $p(e){return Hp(e)?"array":null===e?"null":typeof e}function Xp(e,t){if(!(e instanceof Zp.constructor))return{};let n="_mergedDefaultProps";if(t)for(const r of t){const e=r.constructor;e&&(n+=`:${e.extensionName||e.name}`)}return qp(e,n)||(e[n]=function(e,t){if(!e.prototype)return null;const n=Xp(Object.getPrototypeOf(e)),r=function(e){const t={},n={},r={};for(const[i,s]of Object.entries(e)){const e=null==s?void 0:s.deprecatedFor;if(e)r[i]=Array.isArray(e)?e:[e];else{const e=Vp(i,s);t[i]=e,n[i]=e.value}}return{propTypes:t,defaultProps:n,deprecatedProps:r}}(qp(e,"defaultProps")||{}),i=Object.assign(Object.create(null),n,r.defaultProps),s=Object.assign(Object.create(null),null==n?void 0:n[Zu],r.propTypes),o=Object.assign(Object.create(null),null==n?void 0:n[Ju],r.deprecatedProps);for(const a of t){const e=Xp(a.constructor);e&&(Object.assign(i,e),Object.assign(s,e[Zu]),Object.assign(o,e[Ju]))}return function(e,t){const n=function(e){const t=e.componentName;return t||Gn.warn(`${e.name}.componentName not specified`)(),t||e.name}(t);Object.defineProperties(e,{id:{writable:!0,value:n}})}(i,e),function(e,t){const n={},r={};for(const i in t){const e=t[i],{name:s,value:o}=e;e.async&&(n[s]=o,r[s]=Qp(s))}e[eh]=n,e[th]={},Object.defineProperties(e,r)}(i,s),function(e,t){for(const n in t)Object.defineProperty(e,n,{enumerable:!1,set(e){const r=`${this.id}: ${n}`;for(const i of t[n])Yp(this,i)||(this[i]=e);Gn.deprecated(r,t[n].join("/"))()}})}(i,o),i[Zu]=s,i[Ju]=o,0!==t.length||Yp(e,"_propTypes")||(e._propTypes=s),i}(e,t||[]))}function Qp(e){return{enumerable:!0,set(t){"string"==typeof t||t instanceof Promise||Ap(t)?this[th][e]=t:this[nh][e]=t},get(){if(this[nh]){if(e in this[nh])return this[nh][e]||this[eh][e];if(e in this[th]){const t=this[Ku]&&this[Ku].internalState;if(t&&t.hasAsyncProp(e))return t.getAsyncProp(e)||this[eh][e]}}return this[eh][e]}}}function Yp(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function qp(e,t){return Yp(e,t)&&e[t]}let Kp=0;class Zp{constructor(...e){this.props=function(e,t){let n;for(let s=t.length-1;s>=0;s--){const e=t[s];"extensions"in e&&(n=e.extensions)}const r=Xp(e.constructor,n),i=Object.create(r);i[Ku]=e,i[th]={},i[nh]={};for(let s=0;s{},this.oldProps=null,this.oldAsyncProps=null}finalize(){for(const e in this.asyncProps){const t=this.asyncProps[e];t&&t.type&&t.type.release&&t.type.release(t.resolvedValue,t.type,this.component)}this.asyncProps={},this.component=null,this.resetOldProps()}getOldProps(){return this.oldAsyncProps||this.oldProps||Jp}resetOldProps(){this.oldAsyncProps=null,this.oldProps=this.component?this.component.props:null}hasAsyncProp(e){return e in this.asyncProps}getAsyncProp(e){const t=this.asyncProps[e];return t&&t.resolvedValue}isAsyncPropLoading(e){if(e){const t=this.asyncProps[e];return Boolean(t&&t.pendingLoadCount>0&&t.pendingLoadCount!==t.resolvedLoadCount)}for(const t in this.asyncProps)if(this.isAsyncPropLoading(t))return!0;return!1}reloadAsyncProp(e,t){this._watchPromise(e,Promise.resolve(t))}setAsyncProps(e){this.component=e[Ku]||this.component;const t=e[nh]||{},n=e[th]||e,r=e[eh]||{};for(const i in t){const e=t[i];this._createAsyncPropData(i,r[i]),this._updateAsyncProp(i,e),t[i]=this.getAsyncProp(i)}for(const i in n){const e=n[i];this._createAsyncPropData(i,r[i]),this._updateAsyncProp(i,e)}}_fetch(e,t){return null}_onResolve(e,t){}_onError(e,t){}_updateAsyncProp(e,t){this._didAsyncInputValueChange(e,t)&&("string"==typeof t&&(t=this._fetch(e,t)),t instanceof Promise?this._watchPromise(e,t):Ap(t)?this._resolveAsyncIterable(e,t):this._setPropValue(e,t))}_freezeAsyncOldProps(){if(!this.oldAsyncProps&&this.oldProps){this.oldAsyncProps=Object.create(this.oldProps);for(const e in this.asyncProps)Object.defineProperty(this.oldAsyncProps,e,{enumerable:!0,value:this.oldProps[e]})}}_didAsyncInputValueChange(e,t){const n=this.asyncProps[e];return t!==n.resolvedValue&&t!==n.lastValue&&(n.lastValue=t,!0)}_setPropValue(e,t){this._freezeAsyncOldProps();const n=this.asyncProps[e];n&&(t=this._postProcessValue(n,t),n.resolvedValue=t,n.pendingLoadCount++,n.resolvedLoadCount=n.pendingLoadCount)}_setAsyncPropValue(e,t,n){const r=this.asyncProps[e];r&&n>=r.resolvedLoadCount&&void 0!==t&&(this._freezeAsyncOldProps(),r.resolvedValue=t,r.resolvedLoadCount=n,this.onAsyncPropUpdated(e,t))}_watchPromise(e,t){const n=this.asyncProps[e];if(n){n.pendingLoadCount++;const r=n.pendingLoadCount;t.then(t=>{this.component&&(t=this._postProcessValue(n,t),this._setAsyncPropValue(e,t,r),this._onResolve(e,t))}).catch(t=>{this._onError(e,t)})}}async _resolveAsyncIterable(e,t){if("data"!==e)return void this._setPropValue(e,t);const n=this.asyncProps[e];if(!n)return;n.pendingLoadCount++;const r=n.pendingLoadCount;let i=[],s=0;for await(const o of t){if(!this.component)return;const{dataTransform:t}=this.component.props;i=t?t(o,i):i.concat(o),Object.defineProperty(i,"__diff",{enumerable:!1,value:[{startRow:s,endRow:i.length}]}),s=i.length,this._setAsyncPropValue(e,i,r)}this._onResolve(e,i)}_postProcessValue(e,t){const n=e.type;return n&&this.component&&(n.release&&n.release(e.resolvedValue,n,this.component),n.transform)?n.transform(t,n,this.component):t}_createAsyncPropData(e,t){if(!this.asyncProps[e]){const n=this.component&&this.component.props[Zu];this.asyncProps[e]={type:n&&n[e],lastValue:null,resolvedValue:t,pendingLoadCount:0,resolvedLoadCount:0}}}}class tg extends eg{constructor({attributeManager:e,layer:t}){super(t),this.attributeManager=e,this.needsRedraw=!0,this.needsUpdate=!0,this.subLayers=null,this.usesPickingColorCache=!1}get layer(){return this.component}_fetch(e,t){const n=this.layer,r=null==n?void 0:n.props.fetch;return r?r(t,{propName:e,layer:n}):super._fetch(e,t)}_onResolve(e,t){const n=this.layer;if(n){const r=n.props.onDataLoad;"data"===e&&r&&r(t,{propName:e,layer:n})}}_onError(e,t){const n=this.layer;n&&n.raiseError(t,`loading ${e} of ${this.layer}`)}}const ng=2**24-1,rg=Object.freeze([]),ig=Gl(({oldViewport:e,viewport:t})=>e.equals(t));let sg=new Uint8ClampedArray(0);const og={data:{type:"data",value:rg,async:!0},dataComparator:{type:"function",value:null,optional:!0},_dataDiff:{type:"function",value:e=>e&&e.__diff,optional:!0},dataTransform:{type:"function",value:null,optional:!0},onDataLoad:{type:"function",value:null,optional:!0},onError:{type:"function",value:null,optional:!0},fetch:{type:"function",value:(e,{propName:t,layer:n,loaders:r,loadOptions:i,signal:s})=>{const{resourceManager:o}=n.context;i=i||n.getLoadOptions(),r=r||n.props.loaders,s&&(i={...i,fetch:{...null==i?void 0:i.fetch,signal:s}});let a=o.contains(e);return a||i||(o.add({resourceId:e,data:xn(e,r),persistent:!1}),a=!0),a?o.subscribe({resourceId:e,onChange:e=>{var r;return null==(r=n.internalState)?void 0:r.reloadAsyncProp(t,e)},consumerId:n.id,requestId:t}):xn(e,r,i)}},updateTriggers:{},visible:!0,pickable:!1,opacity:{type:"number",min:0,max:1,value:1},operation:"draw",onHover:{type:"function",value:null,optional:!0},onClick:{type:"function",value:null,optional:!0},onDragStart:{type:"function",value:null,optional:!0},onDrag:{type:"function",value:null,optional:!0},onDragEnd:{type:"function",value:null,optional:!0},coordinateSystem:Bl.DEFAULT,coordinateOrigin:{type:"array",value:[0,0,0],compare:!0},modelMatrix:{type:"array",value:null,compare:!0,optional:!0},wrapLongitude:!1,positionFormat:"XYZ",colorFormat:"RGBA",parameters:{type:"object",value:{},optional:!0,compare:2},loadOptions:{type:"object",value:null,optional:!0,ignore:!0},transitions:null,extensions:[],loaders:{type:"array",value:[],optional:!0,ignore:!0},getPolygonOffset:{type:"function",value:({layerIndex:e})=>[0,100*-e]},highlightedObjectIndex:null,autoHighlight:!1,highlightColor:{type:"accessor",value:[0,0,128,128]}};class ag extends Zp{constructor(){super(...arguments),this.internalState=null,this.lifecycle="Awaiting state",this.parent=null}static get componentName(){return Object.prototype.hasOwnProperty.call(this,"layerName")?this.layerName:""}get root(){let e=this;for(;e.parent;)e=e.parent;return e}toString(){return`${this.constructor.layerName||this.constructor.name}({id: '${this.props.id}'})`}project(e){bh(this.internalState);const t=this.internalState.viewport||this.context.viewport,n=mu(e,{viewport:t,modelMatrix:this.props.modelMatrix,coordinateOrigin:this.props.coordinateOrigin,coordinateSystem:this.props.coordinateSystem}),[r,i,s]=yc(n,t.pixelProjectionMatrix);return 2===e.length?[r,i]:[r,i,s]}unproject(e){return bh(this.internalState),(this.internalState.viewport||this.context.viewport).unproject(e)}projectPosition(e,t){return bh(this.internalState),function(e,t){const{viewport:n,coordinateSystem:r,coordinateOrigin:i,modelMatrix:s,fromCoordinateSystem:o,fromCoordinateOrigin:a}=function(e){const{viewport:t,modelMatrix:n,coordinateOrigin:r}=e;let{coordinateSystem:i,fromCoordinateSystem:s,fromCoordinateOrigin:o}=e;return i===Bl.DEFAULT&&(i=t.isGeospatial?Bl.LNGLAT:Bl.CARTESIAN),void 0===s&&(s=i),void 0===o&&(o=r),{viewport:t,coordinateSystem:i,coordinateOrigin:r,modelMatrix:n,fromCoordinateSystem:s,fromCoordinateOrigin:o}}(t),{autoOffset:A=!0}=t,{geospatialOrigin:l=pu,shaderCoordinateOrigin:c=pu,offsetMode:u=!1}=A?Ql(n,r,i):{},h=mu(e,{viewport:n,modelMatrix:s,coordinateSystem:o,coordinateOrigin:a,offsetMode:u});if(u){const e=n.projectPosition(l||c);$a(h,h,e)}return h}(e,{viewport:this.internalState.viewport||this.context.viewport,modelMatrix:this.props.modelMatrix,coordinateOrigin:this.props.coordinateOrigin,coordinateSystem:this.props.coordinateSystem,...t})}get isComposite(){return!1}get isDrawable(){return!0}setState(e){this.setChangeFlags({stateChanged:!0}),Object.assign(this.state,e),this.setNeedsRedraw()}setNeedsRedraw(){this.internalState&&(this.internalState.needsRedraw=!0)}setNeedsUpdate(){this.internalState&&(this.context.layerManager.setNeedsUpdate(String(this)),this.internalState.needsUpdate=!0)}get isLoaded(){return!!this.internalState&&!this.internalState.isAsyncPropLoading()}get wrapLongitude(){return this.props.wrapLongitude}isPickable(){return this.props.pickable&&this.props.visible}getModels(){const e=this.state;return e&&(e.models||e.model&&[e.model])||[]}setShaderModuleProps(...e){for(const t of this.getModels())t.shaderInputs.setProps(...e)}getAttributeManager(){return this.internalState&&this.internalState.attributeManager}getCurrentLayer(){return this.internalState&&this.internalState.layer}getLoadOptions(){return this.props.loadOptions}use64bitPositions(){const{coordinateSystem:e}=this.props;return e===Bl.DEFAULT||e===Bl.LNGLAT||e===Bl.CARTESIAN}onHover(e,t){return this.props.onHover&&this.props.onHover(e,t)||!1}onClick(e,t){return this.props.onClick&&this.props.onClick(e,t)||!1}nullPickingColor(){return[0,0,0]}encodePickingColor(e,t=[]){return t[0]=e+1&255,t[1]=e+1>>8&255,t[2]=e+1>>8>>8&255,t}decodePickingColor(e){bh(e instanceof Uint8Array);const[t,n,r]=e;return t+256*n+65536*r-1}getNumInstances(){return Number.isFinite(this.props.numInstances)?this.props.numInstances:this.state&&void 0!==this.state.numInstances?this.state.numInstances:function(e){if(null===(t=e)||"object"!=typeof t)throw new Error("count(): argument not an object");var t;if("function"==typeof e.count)return e.count();if(Number.isFinite(e.size))return e.size;if(Number.isFinite(e.length))return e.length;if(function(e){return null!==e&&"object"==typeof e&&e.constructor===Object}(e))return Object.keys(e).length;throw new Error("count(): argument not a container")}(this.props.data)}getStartIndices(){return this.props.startIndices?this.props.startIndices:this.state&&this.state.startIndices?this.state.startIndices:null}getBounds(){var e;return null==(e=this.getAttributeManager())?void 0:e.getBounds(["positions","instancePositions"])}getShaders(e){e=Up(e,{disableWarnings:!0,modules:this.context.defaultShaderModules});for(const t of this.props.extensions)e=Up(e,t.getShaders.call(this,t));return e}shouldUpdateState(e){return e.changeFlags.propsOrDataChanged}updateState(e){const t=this.getAttributeManager(),{dataChanged:n}=e.changeFlags;if(n&&t)if(Array.isArray(n))for(const r of n)t.invalidateAll(r);else t.invalidateAll();if(t){const{props:n}=e,r=this.internalState.hasPickingBuffer,i=Number.isInteger(n.highlightedObjectIndex)||n.pickable||n.extensions.some(e=>e.getNeedsPickingBuffer.call(this,e));if(r!==i){this.internalState.hasPickingBuffer=i;const{pickingColors:e,instancePickingColors:n}=t.attributes,r=e||n;r&&(i&&r.constant&&(r.constant=!1,t.invalidate(r.id)),r.value||i||(r.constant=!0,r.value=[0,0,0]))}}}finalizeState(e){for(const n of this.getModels())n.destroy();const t=this.getAttributeManager();t&&t.finalize(),this.context&&this.context.resourceManager.unsubscribe({consumerId:this.id}),this.internalState&&(this.internalState.uniformTransitions.clear(),this.internalState.finalize())}draw(e){for(const t of this.getModels())t.draw(e.renderPass)}getPickingInfo({info:e,mode:t,sourceLayer:n}){const{index:r}=e;return r>=0&&Array.isArray(this.props.data)&&(e.object=this.props.data[r]),e}raiseError(e,t){var n,r,i,s;t&&(e=new Error(`${t}: ${e.message}`,{cause:e})),(null==(r=(n=this.props).onError)?void 0:r.call(n,e))||null==(s=null==(i=this.context)?void 0:i.onError)||s.call(i,e,this)}getNeedsRedraw(e={clearRedrawFlags:!1}){return this._getNeedsRedraw(e)}needsUpdate(){return!!this.internalState&&(this.internalState.needsUpdate||this.hasUniformTransition()||this.shouldUpdateState(this._getUpdateParams()))}hasUniformTransition(){var e;return(null==(e=this.internalState)?void 0:e.uniformTransitions.active)||!1}activateViewport(e){if(!this.internalState)return;const t=this.internalState.viewport;this.internalState.viewport=e,t&&ig({oldViewport:t,viewport:e})||(this.setChangeFlags({viewportChanged:!0}),this.isComposite?this.needsUpdate()&&this.setNeedsUpdate():this._update())}invalidateAttribute(e="all"){const t=this.getAttributeManager();t&&("all"===e?t.invalidateAll():t.invalidate(e))}updateAttributes(e){let t=!1;for(const n in e)e[n].layoutChanged()&&(t=!0);for(const n of this.getModels())this._setModelAttributes(n,e,t)}_updateAttributes(){const e=this.getAttributeManager();if(!e)return;const t=this.props,n=this.getNumInstances(),r=this.getStartIndices();e.update({data:t.data,numInstances:n,startIndices:r,props:t,transitions:t.transitions,buffers:t.data.attributes,context:this});const i=e.getChangedAttributes({clearChangedFlags:!0});this.updateAttributes(i)}_updateAttributeTransition(){const e=this.getAttributeManager();e&&e.updateTransition()}_updateUniformTransition(){const{uniformTransitions:e}=this.internalState;if(e.active){const t=e.update(),n=Object.create(this.props);for(const e in t)Object.defineProperty(n,e,{value:t[e]});return n}return this.props}calculateInstancePickingColors(e,{numInstances:t}){if(e.constant)return;const n=Math.floor(sg.length/4);if(this.internalState.usesPickingColorCache=!0,nng&&Gn.warn("Layer has too many data objects. Picking might not be able to distinguish all objects.")(),sg=nu.allocate(sg,t,{size:4,copy:!0,maxCount:Math.max(t,ng)});const e=Math.floor(sg.length/4),r=[0,0,0];for(let t=n;t(Gn.deprecated("layer.state.attributeManager","layer.getAttributeManager()")(),e)}),this.internalState.uniformTransitions=new Lp(this.context.timeline),this.internalState.onAsyncPropUpdated=this._onAsyncPropUpdated.bind(this),this.internalState.setAsyncProps(this.props),this.initializeState(this.context);for(const t of this.props.extensions)t.initializeState.call(this,this.context,t);this.setChangeFlags({dataChanged:"init",propsChanged:"init",viewportChanged:!0,extensionsChanged:!0}),this._update()}_transferState(e){Wn("layer.matched",this,this===e);const{state:t,internalState:n}=e;this!==e&&(this.internalState=n,this.state=t,this.internalState.setAsyncProps(this.props),this._diffProps(this.props,this.internalState.getOldProps()))}_update(){const e=this.needsUpdate();if(Wn("layer.update",this,e),!e)return;const t=this.props,n=this.context,r=this.internalState,i=n.viewport,s=this._updateUniformTransition();r.propsInTransition=s,n.viewport=r.viewport||i,this.props=s;try{const e=this._getUpdateParams(),t=this.getModels();if(n.device)this.updateState(e);else try{this.updateState(e)}catch(o){}for(const n of this.props.extensions)n.updateState.call(this,e,n);this.setNeedsRedraw(),this._updateAttributes();const r=this.getModels()[0]!==t[0];this._postUpdate(e,r)}finally{n.viewport=i,this.props=t,this._clearChangeFlags(),r.needsUpdate=!1,r.resetOldProps()}}_finalize(){Wn("layer.finalize",this),this.finalizeState(this.context);for(const e of this.props.extensions)e.finalizeState.call(this,this.context,e)}_drawLayer({renderPass:e,shaderModuleProps:t=null,uniforms:n={},parameters:r={}}){this._updateAttributeTransition();const i=this.props,s=this.context;this.props=this.internalState.propsInTransition||i;try{t&&this.setShaderModuleProps(t);const{getPolygonOffset:i}=this.props,o=i&&i(n)||[0,0];s.device instanceof Yf&&s.device.setParametersWebGL({polygonOffset:o});for(const e of this.getModels())"webgpu"===e.device.type?e.setParameters({...e.parameters,...r}):e.setParameters(r);if(s.device instanceof Yf)s.device.withParametersWebGL(r,()=>{const i={renderPass:e,shaderModuleProps:t,uniforms:n,parameters:r,context:s};for(const e of this.props.extensions)e.draw.call(this,i,e);this.draw(i)});else{const i={renderPass:e,shaderModuleProps:t,uniforms:n,parameters:r,context:s};for(const e of this.props.extensions)e.draw.call(this,i,e);this.draw(i)}}finally{this.props=i}}getChangeFlags(){var e;return null==(e=this.internalState)?void 0:e.changeFlags}setChangeFlags(e){if(!this.internalState)return;const{changeFlags:t}=this.internalState;for(const r in e)if(e[r]){let n=!1;if("dataChanged"===r){const i=e[r],s=t[r];i&&Array.isArray(s)&&(t.dataChanged=Array.isArray(i)?s.concat(i):i,n=!0)}t[r]||(t[r]=e[r],n=!0),n&&Wn("layer.changeFlag",this,r,e)}const n=Boolean(t.dataChanged||t.updateTriggersChanged||t.propsChanged||t.extensionsChanged);t.propsOrDataChanged=n,t.somethingChanged=n||t.viewportChanged||t.stateChanged}_clearChangeFlags(){this.internalState.changeFlags={dataChanged:!1,propsChanged:!1,updateTriggersChanged:!1,viewportChanged:!1,stateChanged:!1,extensionsChanged:!1,propsOrDataChanged:!1,somethingChanged:!1}}_diffProps(e,t){var n;const r=function(e,t){const n=Bp({newProps:e,oldProps:t,propTypes:e[Zu],ignoreProps:{data:null,updateTriggers:null,extensions:null,transitions:null}}),r=function(e,t){if(null===t)return"oldProps is null, initial diff";let n=!1;const{dataComparator:r,_dataDiff:i}=e;return r?r(e.data,t.data)||(n="Data comparator detected a change"):e.data!==t.data&&(n="A new data container was supplied"),n&&i&&(n=i(e.data,t.data)||n),n}(e,t);let i=!1;return r||(i=function(e,t){if(null===t)return{all:!0};if("all"in e.updateTriggers&&Fp(e,t,"all"))return{all:!0};const n={};let r=!1;for(const i in e.updateTriggers)"all"!==i&&Fp(e,t,i)&&(n[i]=!0,r=!0);return!!r&&n}(e,t)),{dataChanged:r,propsChanged:n,updateTriggersChanged:i,extensionsChanged:Op(e,t),transitionsChanged:Np(e,t)}}(e,t);if(r.updateTriggersChanged)for(const i in r.updateTriggersChanged)r.updateTriggersChanged[i]&&this.invalidateAttribute(i);if(r.transitionsChanged)for(const i in r.transitionsChanged)this.internalState.uniformTransitions.add(i,t[i],e[i],null==(n=e.transitions)?void 0:n[i]);return this.setChangeFlags(r)}validateProps(){!function(e){const t=e[Zu];for(const n in t){const r=t[n],{validate:i}=r;if(i&&!i(e[n],r))throw new Error(`Invalid prop ${n}: ${e[n]}`)}}(this.props)}updateAutoHighlight(e){this.props.autoHighlight&&!Number.isInteger(this.props.highlightedObjectIndex)&&this._updateAutoHighlight(e)}_updateAutoHighlight(e){const t={highlightedObjectColor:e.picked?e.color:null},{highlightColor:n}=this.props;e.picked&&"function"==typeof n&&(t.highlightColor=n(e)),this.setShaderModuleProps({picking:t}),this.setNeedsRedraw()}_getAttributeManager(){const e=this.context;return new kp(e.device,{id:this.props.id,stats:e.stats,timeline:e.timeline})}_postUpdate(e,t){const{props:n,oldProps:r}=e,i=this.state.model;(null==i?void 0:i.isInstanced)&&i.setInstanceCount(this.getNumInstances());const{autoHighlight:s,highlightedObjectIndex:o,highlightColor:a}=n;if(t||r.autoHighlight!==s||r.highlightedObjectIndex!==o||r.highlightColor!==a){const e={};Array.isArray(a)&&(e.highlightColor=a),(t||r.autoHighlight!==s||o!==r.highlightedObjectIndex)&&(e.highlightedObjectColor=Number.isFinite(o)&&o>=0?this.encodePickingColor(o):null),this.setShaderModuleProps({picking:e})}}_getUpdateParams(){return{props:this.props,oldProps:this.internalState.getOldProps(),context:this.context,changeFlags:this.internalState.changeFlags}}_getNeedsRedraw(e){if(!this.internalState)return!1;let t=!1;t=t||this.internalState.needsRedraw&&this.id;const n=this.getAttributeManager(),r=!!n&&n.getNeedsRedraw(e);if(t=t||r,t)for(const i of this.props.extensions)i.onNeedsRedraw.call(this,i);return this.internalState.needsRedraw=this.internalState.needsRedraw&&!e.clearRedrawFlags,t}_onAsyncPropUpdated(){this._diffProps(this.props,this.internalState.getOldProps()),this.setNeedsUpdate()}}ag.defaultProps=og,ag.layerName="Layer";class Ag extends ag{get isComposite(){return!0}get isDrawable(){return!1}get isLoaded(){return super.isLoaded&&this.getSubLayers().every(e=>e.isLoaded)}getSubLayers(){return this.internalState&&this.internalState.subLayers||[]}initializeState(e){}setState(e){super.setState(e),this.setNeedsUpdate()}getPickingInfo({info:e}){const{object:t}=e;return t&&t.__source&&t.__source.parent&&t.__source.parent.id===this.id?(e.object=t.__source.object,e.index=t.__source.index,e):e}filterSubLayer(e){return!0}shouldRenderSubLayer(e,t){return t&&t.length}getSubLayerClass(e,t){const{_subLayerProps:n}=this.props;return n&&n[e]&&n[e].type||t}getSubLayerRow(e,t,n){return e.__source={parent:this,object:t,index:n},e}getSubLayerAccessor(e){if("function"==typeof e){const t={index:-1,data:this.props.data,target:[]};return(n,r)=>n&&n.__source?(t.index=n.__source.index,e(n.__source.object,t)):e(n,r)}return e}getSubLayerProps(e={}){var t;const{opacity:n,pickable:r,visible:i,parameters:s,getPolygonOffset:o,highlightedObjectIndex:a,autoHighlight:A,highlightColor:l,coordinateSystem:c,coordinateOrigin:u,wrapLongitude:h,positionFormat:d,modelMatrix:f,extensions:p,fetch:g,operation:m,_subLayerProps:_}=this.props,b={id:"",updateTriggers:{},opacity:n,pickable:r,visible:i,parameters:s,getPolygonOffset:o,highlightedObjectIndex:a,autoHighlight:A,highlightColor:l,coordinateSystem:c,coordinateOrigin:u,wrapLongitude:h,positionFormat:d,modelMatrix:f,extensions:p,fetch:g,operation:m},v=_&&e.id&&_[e.id],y=v&&v.updateTriggers,w=e.id||"sublayer";if(v){const t=this.props[Zu],n=e.type?e.type._propTypes:{};for(const e in v){const r=n[e]||t[e];r&&"accessor"===r.type&&(v[e]=this.getSubLayerAccessor(v[e]))}}Object.assign(b,e,v),b.id=`${this.props.id}-${w}`,b.updateTriggers={all:null==(t=this.props.updateTriggers)?void 0:t.all,...e.updateTriggers,...y};for(const x of p){const e=x.getSubLayerProps.call(this,x);e&&Object.assign(b,e,{updateTriggers:Object.assign(b.updateTriggers,e.updateTriggers)})}return b}_updateAutoHighlight(e){for(const t of this.getSubLayers())t.updateAutoHighlight(e)}_getAttributeManager(){return null}_postUpdate(e,t){let n=this.internalState.subLayers;const r=!n||this.needsUpdate();r&&(n=rh(this.renderLayers(),Boolean),this.internalState.subLayers=n),Wn("compositeLayer.renderLayers",this,r,n);for(const i of n)i.parent=this}}Ag.layerName="CompositeLayer";const lg=Math.PI/180,cg=180/Math.PI,ug=6370972,hg=256;function dg(){const e=4018225162502676e-20,t=Math.PI/180*hg;return{unitsPerMeter:[e,e,e],unitsPerMeter2:[0,0,0],metersPerUnit:[24886.609375,24886.609375,24886.609375],unitsPerDegree:[t,t,e],unitsPerDegree2:[0,0,0],degreesPerUnit:[1/t,1/t,24886.609375]}}class fg extends du{constructor(e={}){const{longitude:t=0,zoom:n=0,nearZMultiplier:r=.5,farZMultiplier:i=1,resolution:s=10}=e;let{latitude:o=0,height:a,altitude:A=1.5,fovy:l}=e;o=Math.max(Math.min(o,hc),-85.051129),a=a||1,l?A=vc(l):l=bc(A);const c=1/Math.PI/Math.cos(o*Math.PI/180),u=Math.pow(2,n)*c,h=e.nearZ??r,d=e.farZ??(A+512*u/a)*i,f=(new dA).lookAt({eye:[0,-A,0],up:[0,0,1]});f.rotateX(o*lg),f.rotateZ(-t*lg),f.scale(u/a),super({...e,height:a,viewMatrix:f,longitude:t,latitude:o,zoom:n,distanceScales:dg(),fovy:l,focalDistance:A,near:h,far:d}),this.scale=u,this.latitude=o,this.longitude=t,this.resolution=s}get projectionMode(){return Dl.GLOBE}getDistanceScales(){return this.distanceScales}getBounds(e={}){const t={targetZ:e.z||0},n=this.unproject([0,this.height/2],t),r=this.unproject([this.width/2,0],t),i=this.unproject([this.width,this.height/2],t),s=this.unproject([this.width/2,this.height],t);return i[0]this.longitude&&(n[0]-=360),[Math.min(n[0],i[0],r[0],s[0]),Math.min(n[1],i[1],r[1],s[1]),Math.max(n[0],i[0],r[0],s[0]),Math.max(n[1],i[1],r[1],s[1])]}unproject(e,{topLeft:t=!0,targetZ:n}={}){const[r,i,s]=e,o=t?i:this.height-i,{pixelUnprojectionMatrix:a}=this;let A;if(Number.isFinite(s))A=pg(a,[r,o,s,1]);else{const e=pg(a,[r,o,-1,1]),t=pg(a,[r,o,1,1]),i=((n||0)/ug+1)*hg,s=Xa($a([],e,t)),l=Xa(e),c=Xa(t),u=(4*l*c-(s-l-c)**2)/16*4/s;A=function(e,t,n,r){const i=t[0],s=t[1],o=t[2];return e[0]=i+r*(n[0]-i),e[1]=s+r*(n[1]-s),e[2]=o+r*(n[2]-o),e}([],e,t,(Math.sqrt(l-u)-Math.sqrt(Math.max(0,i*i-u)))/Math.sqrt(s))}const[l,c,u]=this.unprojectPosition(A);return Number.isFinite(s)?[l,c,u]:Number.isFinite(n)?[l,c,n]:[l,c]}projectPosition(e){const[t,n,r=0]=e,i=t*lg,s=n*lg,o=Math.cos(s),a=(r/ug+1)*hg;return[Math.sin(i)*o*a,-Math.cos(i)*o*a,Math.sin(s)*a]}unprojectPosition(e){const[t,n,r]=e,i=function(e){const t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}(e),s=Math.asin(r/i);return[Math.atan2(t,-n)*cg,s*cg,(i/hg-1)*ug]}projectFlat(e){return e}unprojectFlat(e){return e}panByPosition(e,t){const n=this.unproject(t);return{longitude:e[0]-n[0]+this.longitude,latitude:e[1]-n[1]+this.latitude}}}function pg(e,t){const n=sA([],t,e);return iA(n,n,1/n[3]),n}class gg extends Bh{applyConstraints(e){const{maxZoom:t,minZoom:n,zoom:r}=e;e.zoom=Ma(r,n,t);const{longitude:i,latitude:s}=e;return(i<-180||i>180)&&(e.longitude=function(e){const t=e%360;return t<0?360+t:t}(i+180)-180),e.latitude=Ma(s,-85.051129,hc),e}}class mg extends Lh{constructor(){super(...arguments),this.ControllerState=gg,this.transition={transitionDuration:300,transitionInterpolator:new xh(["longitude","latitude","zoom"])},this.dragMode="pan"}setProps(e){super.setProps(e),this.dragRotate=!1,this.touchRotate=!1}}class _g extends fh{constructor(e={}){super(e)}getViewportType(e){return e.zoom>12?fu:fg}get ControllerType(){return mg}}_g.displayName="GlobeView";class bg{constructor(e){this.indexStarts=[0],this.vertexStarts=[0],this.vertexCount=0,this.instanceCount=0;const{attributes:t={}}=e;this.typedArrayManager=nu,this.attributes={},this._attributeDefs=t,this.opts=e,this.updateGeometry(e)}updateGeometry(e){Object.assign(this.opts,e);const{data:t,buffers:n={},getGeometry:r,geometryBuffer:i,positionFormat:s,dataChanged:o,normalize:a=!0}=this.opts;if(this.data=t,this.getGeometry=r,this.positionSize=i&&i.size||("XY"===s?2:3),this.buffers=n,this.normalize=a,i&&(bh(t.startIndices),this.getGeometry=this.getGeometryFromBuffer(i),a||(n.vertexPositions=i)),this.geometryBuffer=n.vertexPositions,Array.isArray(o))for(const A of o)this._rebuildGeometry(A);else this._rebuildGeometry()}updatePartialGeometry({startRow:e,endRow:t}){this._rebuildGeometry({startRow:e,endRow:t})}getGeometryFromBuffer(e){const t=e.value||e;return ArrayBuffer.isView(t)?lp(t,{size:this.positionSize,offset:e.offset,stride:e.stride,startIndices:this.data.startIndices}):null}_allocate(e,t){const{attributes:n,buffers:r,_attributeDefs:i,typedArrayManager:s}=this;for(const o in i)if(o in r)s.release(n[o]),n[o]=null;else{const r=i[o];r.copy=t,n[o]=s.allocate(n[o],e,r)}}_forEachGeometry(e,t,n){const{data:r,getGeometry:i}=this,{iterable:s,objectInfo:o}=ap(r,t,n);for(const a of s)o.index++,e(i?i(a,o):null,o.index)}_rebuildGeometry(e){if(!this.data)return;let{indexStarts:t,vertexStarts:n,instanceCount:r}=this;const{data:i,geometryBuffer:s}=this,{startRow:o=0,endRow:a=1/0}=e||{},A={};if(e||(t=[0],n=[0]),this.normalize||!s)this._forEachGeometry((e,t)=>{const r=e&&this.normalizeGeometry(e);A[t]=r,n[t+1]=n[t]+(r?this.getGeometrySize(r):0)},o,a),r=n[n.length-1];else if(n=i.startIndices,r=n[i.length]||0,ArrayBuffer.isView(s))r=r||s.length/this.positionSize;else if(s instanceof Br){const e=4*this.positionSize;r=r||s.byteLength/e}else if(s.buffer){const e=s.stride||4*this.positionSize;r=r||s.buffer.byteLength/e}else if(s.value){const e=s.value,t=s.stride/e.BYTES_PER_ELEMENT||this.positionSize;r=r||e.length/t}this._allocate(r,Boolean(e)),this.indexStarts=t,this.vertexStarts=n,this.instanceCount=r;const l={};this._forEachGeometry((e,i)=>{const s=A[i]||e;l.vertexStart=n[i],l.indexStart=t[i];const o=i0){let i=!0;for(let s=0;st[2]&&(n|=2),e[1]t[3]&&(n|=8),n}function Cg(e,t){const{size:n=2,broken:r=!1,gridResolution:i=10,gridOffset:s=[0,0],startIndex:o=0,endIndex:a=e.length}=t||{},A=(a-o)/n;let l=[];const c=[l],u=Eg(e,0,n,o);let h,d;const f=Pg(u,i,s,[]),p=[];wg(l,u);for(let g=1;gn&&(l=[],c.push(l),wg(l,u)),d=Sg(h,f)}wg(l,h),xg(u,h)}return r?c:c[0]}function kg(e,t=null,n){if(!e.length)return[];const{size:r=2,gridResolution:i=10,gridOffset:s=[0,0],edgeTypes:o=!1}=n||{},a=[],A=[{pos:e,types:o?new Array(e.length/r).fill(1):null,holes:t||[]}],l=[[],[]];let c=[];for(;A.length;){const{pos:e,types:t,holes:n}=A.shift();Mg(e,r,n[0]||e.length,l),c=Pg(l[0],i,s,c);const u=Sg(l[1],c);if(u){let i=Rg(e,t,r,0,n[0]||e.length,c,u);const s={pos:i[0].pos,types:i[0].types,holes:[]},a={pos:i[1].pos,types:i[1].types,holes:[]};A.push(s,a);for(let A=0;A=0?(wg(l,d)&&u.push(p),v+=f):u.length&&(u[u.length-1]=0),xg(g,d),m=f,_=p;return[b?{pos:A,types:t&&c}:null,v?{pos:l,types:t&&u}:null]}function Pg(e,t,n,r){const i=Math.floor((e[0]-n[0])/t)*t+n[0],s=Math.floor((e[1]-n[1])/t)*t+n[1];return r[0]=i,r[1]=s,r[2]=i+t,r[3]=s+t,r}function Ig(e,t,n){8&n?(e[1]+=t,e[3]+=t):4&n?(e[1]-=t,e[3]-=t):2&n?(e[0]+=t,e[2]+=t):1&n&&(e[0]-=t,e[2]-=t)}function Mg(e,t,n,r){let i=1/0,s=-1/0,o=1/0,a=-1/0;for(let A=0;As?t:s,o=na?n:a}return r[0][0]=i,r[0][1]=o,r[1][0]=s,r[1][1]=a,r}function Lg(e,t){for(let n=0;ni&&(i=t,s=o-1)}return s}function Bg(e,t,n,r,i=85.051129){const s=e[n],o=e[r-t];if(Math.abs(s-o)>180){const r=Eg(e,0,t,n);r[0]+=360*Math.round((o-s)/360),wg(e,r),r[1]=Math.sign(r[1])*i,wg(e,r),r[0]=s,wg(e,r)}}function Dg(e,t,n,r){let i,s=e[0];for(let o=n;o180||t<-180)&&(i-=360*Math.round(t/360)),e[o]=s=i}}function Og(e,t){let n;const r=e.length/t;for(let s=0;s=r),i=i.flatMap(e=>[e[0],e[1]]),vg(i,-1));const s=n>0,o=r+1,a=s?3*o+1:r,A=2*Math.PI/r,l=new Uint16Array(s?3*r*2:0),c=new Float32Array(3*a),u=new Float32Array(3*a);let h=0;if(s){for(let e=0;e",extruded:"f32",stroked:"f32",isStroke:"f32",coverage:"f32",elevationScale:"f32",edgeDistance:"f32",widthScale:"f32",widthMinPixels:"f32",widthMaxPixels:"f32",radiusUnits:"i32",widthUnits:"i32"}},Gg=[0,0,0,255],zg={diskResolution:{type:"number",min:4,value:20},vertices:null,radius:{type:"number",min:0,value:1e3},angle:{type:"number",value:0},offset:{type:"array",value:[0,0]},coverage:{type:"number",min:0,max:1,value:1},elevationScale:{type:"number",min:0,value:1},radiusUnits:"meters",lineWidthUnits:"meters",lineWidthScale:1,lineWidthMinPixels:0,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,extruded:!0,wireframe:!1,filled:!0,stroked:!1,flatShading:!1,getPosition:{type:"accessor",value:e=>e.position},getFillColor:{type:"accessor",value:Gg},getLineColor:{type:"accessor",value:Gg},getLineWidth:{type:"accessor",value:1},getElevation:{type:"accessor",value:1e3},material:!0,getColor:{deprecatedFor:["getFillColor","getLineColor"]}};class Vg extends ag{getShaders(){const e={},{flatShading:t}=this.props;return t&&(e.FLAT_SHADING=1),super.getShaders({vs:"#version 300 es\n#define SHADER_NAME column-layer-vertex-shader\nin vec3 positions;\nin vec3 normals;\nin vec3 instancePositions;\nin float instanceElevations;\nin vec3 instancePositions64Low;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin float instanceStrokeWidths;\nin vec3 instancePickingColors;\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec3 cameraPosition;\nout vec4 position_commonspace;\n#endif\nvoid main(void) {\ngeometry.worldPosition = instancePositions;\nvec4 color = column.isStroke ? instanceLineColors : instanceFillColors;\nmat2 rotationMatrix = mat2(cos(column.angle), sin(column.angle), -sin(column.angle), cos(column.angle));\nfloat elevation = 0.0;\nfloat strokeOffsetRatio = 1.0;\nif (column.extruded) {\nelevation = instanceElevations * (positions.z + 1.0) / 2.0 * column.elevationScale;\n} else if (column.stroked) {\nfloat widthPixels = clamp(\nproject_size_to_pixel(instanceStrokeWidths * column.widthScale, column.widthUnits),\ncolumn.widthMinPixels, column.widthMaxPixels) / 2.0;\nfloat halfOffset = project_pixel_size(widthPixels) / project_size(column.edgeDistance * column.coverage * column.radius);\nif (column.isStroke) {\nstrokeOffsetRatio -= sign(positions.z) * halfOffset;\n} else {\nstrokeOffsetRatio -= halfOffset;\n}\n}\nfloat shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\nfloat dotRadius = column.radius * column.coverage * shouldRender;\ngeometry.pickingColor = instancePickingColors;\nvec3 centroidPosition = vec3(instancePositions.xy, instancePositions.z + elevation);\nvec3 centroidPosition64Low = instancePositions64Low;\nvec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius;\nif (column.radiusUnits == UNIT_METERS) {\noffset = project_size(offset);\n}\nvec3 pos = vec3(offset, 0.);\nDECKGL_FILTER_SIZE(pos, geometry);\ngl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\ngeometry.normal = project_normal(vec3(rotationMatrix * normals.xy, normals.z));\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nif (column.extruded && !column.isStroke) {\n#ifdef FLAT_SHADING\ncameraPosition = project.cameraPosition;\nposition_commonspace = geometry.position;\nvColor = vec4(color.rgb, color.a * layer.opacity);\n#else\nvec3 lightColor = lighting_getLightColor(color.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, color.a * layer.opacity);\n#endif\n} else {\nvColor = vec4(color.rgb, color.a * layer.opacity);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#version 300 es\n#define SHADER_NAME column-layer-fragment-shader\nprecision highp float;\nout vec4 fragColor;\nin vec4 vColor;\n#ifdef FLAT_SHADING\nin vec3 cameraPosition;\nin vec4 position_commonspace;\n#endif\nvoid main(void) {\nfragColor = vColor;\ngeometry.uv = vec2(0.);\n#ifdef FLAT_SHADING\nif (column.extruded && !column.isStroke && !bool(picking.isActive)) {\nvec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\nfragColor.rgb = lighting_getLightColor(vColor.rgb, cameraPosition, position_commonspace.xyz, normal);\n}\n#endif\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n",defines:e,modules:[tc,t?IA:PA,Lc,jg]})}initializeState(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:"float64",fp64:this.use64bitPositions(),transition:!0,accessor:"getPosition"},instanceElevations:{size:1,transition:!0,accessor:"getElevation"},instanceFillColors:{size:this.props.colorFormat.length,type:"unorm8",transition:!0,accessor:"getFillColor",defaultValue:Gg},instanceLineColors:{size:this.props.colorFormat.length,type:"unorm8",transition:!0,accessor:"getLineColor",defaultValue:Gg},instanceStrokeWidths:{size:1,accessor:"getLineWidth",transition:!0}})}updateState(e){var t;super.updateState(e);const{props:n,oldProps:r,changeFlags:i}=e,s=i.extensionsChanged||n.flatShading!==r.flatShading;s&&(null==(t=this.state.models)||t.forEach(e=>e.destroy()),this.setState(this._getModels()),this.getAttributeManager().invalidateAll());const o=this.getNumInstances();this.state.fillModel.setInstanceCount(o),this.state.wireframeModel.setInstanceCount(o),(s||n.diskResolution!==r.diskResolution||n.vertices!==r.vertices||(n.extruded||n.stroked)!==(r.extruded||r.stroked))&&this._updateGeometry(n)}getGeometry(e,t,n){const r=new Fg({radius:1,height:n?2:0,vertices:t,nradial:e});let i=0;if(t)for(let s=0;s=e.length&&(t+=1-e.length/r);const i=t*r;return n[0]=e[i],n[1]=e[i+1],n[2]=3===r&&e[i+2]||0,n}isClosed(e){if(!this.normalize)return Boolean(this.opts.loop);const{positionSize:t}=this,n=e.length-t;return e[0]===e[n]&&e[1]===e[n+1]&&(2===t||e[2]===e[n+2])}}function Hg(e){return Array.isArray(e[0])}const $g="uniform pathUniforms {\n float widthScale;\n float widthMinPixels;\n float widthMaxPixels;\n float jointType;\n float capType;\n float miterLimit;\n bool billboard;\n highp int widthUnits;\n} path;\n",Xg={name:"path",vs:$g,fs:$g,uniformTypes:{widthScale:"f32",widthMinPixels:"f32",widthMaxPixels:"f32",jointType:"f32",capType:"f32",miterLimit:"f32",billboard:"f32",widthUnits:"i32"}},Qg=[0,0,0,255],Yg={widthUnits:"meters",widthScale:{type:"number",min:0,value:1},widthMinPixels:{type:"number",min:0,value:0},widthMaxPixels:{type:"number",min:0,value:Number.MAX_SAFE_INTEGER},jointRounded:!1,capRounded:!1,miterLimit:{type:"number",min:0,value:4},billboard:!1,_pathType:null,getPath:{type:"accessor",value:e=>e.path},getColor:{type:"accessor",value:Qg},getWidth:{type:"accessor",value:1},rounded:{deprecatedFor:["jointRounded","capRounded"]}},qg={enter:(e,t)=>t.length?t.subarray(t.length-e.length):e};class Kg extends ag{getShaders(){return super.getShaders({vs:"#version 300 es\n#define SHADER_NAME path-layer-vertex-shader\nin vec2 positions;\nin float instanceTypes;\nin vec3 instanceStartPositions;\nin vec3 instanceEndPositions;\nin vec3 instanceLeftPositions;\nin vec3 instanceRightPositions;\nin vec3 instanceLeftPositions64Low;\nin vec3 instanceStartPositions64Low;\nin vec3 instanceEndPositions64Low;\nin vec3 instanceRightPositions64Low;\nin float instanceStrokeWidths;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nuniform float opacity;\nout vec4 vColor;\nout vec2 vCornerOffset;\nout float vMiterLength;\nout vec2 vPathPosition;\nout float vPathLength;\nout float vJointType;\nconst float EPSILON = 0.001;\nconst vec3 ZERO_OFFSET = vec3(0.0);\nfloat flipIfTrue(bool flag) {\nreturn -(float(flag) * 2. - 1.);\n}\nvec3 getLineJoinOffset(\nvec3 prevPoint, vec3 currPoint, vec3 nextPoint,\nvec2 width\n) {\nbool isEnd = positions.x > 0.0;\nfloat sideOfPath = positions.y;\nfloat isJoint = float(sideOfPath == 0.0);\nvec3 deltaA3 = (currPoint - prevPoint);\nvec3 deltaB3 = (nextPoint - currPoint);\nmat3 rotationMatrix;\nbool needsRotation = !path.billboard && project_needs_rotation(currPoint, rotationMatrix);\nif (needsRotation) {\ndeltaA3 = deltaA3 * rotationMatrix;\ndeltaB3 = deltaB3 * rotationMatrix;\n}\nvec2 deltaA = deltaA3.xy / width;\nvec2 deltaB = deltaB3.xy / width;\nfloat lenA = length(deltaA);\nfloat lenB = length(deltaB);\nvec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\nvec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\nvec2 perpA = vec2(-dirA.y, dirA.x);\nvec2 perpB = vec2(-dirB.y, dirB.x);\nvec2 tangent = dirA + dirB;\ntangent = length(tangent) > 0. ? normalize(tangent) : perpA;\nvec2 miterVec = vec2(-tangent.y, tangent.x);\nvec2 dir = isEnd ? dirA : dirB;\nvec2 perp = isEnd ? perpA : perpB;\nfloat L = isEnd ? lenA : lenB;\nfloat sinHalfA = abs(dot(miterVec, perp));\nfloat cosHalfA = abs(dot(dirA, miterVec));\nfloat turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\nfloat cornerPosition = sideOfPath * turnDirection;\nfloat miterSize = 1.0 / max(sinHalfA, EPSILON);\nmiterSize = mix(\nmin(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\nmiterSize,\nstep(0.0, cornerPosition)\n);\nvec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n* (sideOfPath + isJoint * turnDirection);\nbool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\nbool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\nbool isCap = isStartCap || isEndCap;\nif (isCap) {\noffsetVec = mix(perp * sideOfPath, dir * path.capType * 4.0 * flipIfTrue(isStartCap), isJoint);\nvJointType = path.capType;\n} else {\nvJointType = path.jointType;\n}\nvPathLength = L;\nvCornerOffset = offsetVec;\nvMiterLength = dot(vCornerOffset, miterVec * turnDirection);\nvMiterLength = isCap ? isJoint : vMiterLength;\nvec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\nvPathPosition = vec2(\ndot(offsetFromStartOfPath, perp),\ndot(offsetFromStartOfPath, dir)\n);\ngeometry.uv = vPathPosition;\nfloat isValid = step(instanceTypes, 3.5);\nvec3 offset = vec3(offsetVec * width * isValid, 0.0);\nif (needsRotation) {\noffset = rotationMatrix * offset;\n}\nreturn offset;\n}\nvoid clipLine(inout vec4 position, vec4 refPosition) {\nif (position.w < EPSILON) {\nfloat r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\nposition = refPosition + (position - refPosition) * r;\n}\n}\nvoid main() {\ngeometry.pickingColor = instancePickingColors;\nvColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);\nfloat isEnd = positions.x;\nvec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd);\nvec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd);\nvec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\nvec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd);\nvec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd);\nvec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd);\ngeometry.worldPosition = currPosition;\nvec2 widthPixels = vec2(clamp(\nproject_size_to_pixel(instanceStrokeWidths * path.widthScale, path.widthUnits),\npath.widthMinPixels, path.widthMaxPixels) / 2.0);\nvec3 width;\nif (path.billboard) {\nvec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\nvec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\nvec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\nclipLine(prevPositionScreen, currPositionScreen);\nclipLine(nextPositionScreen, currPositionScreen);\nclipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\nwidth = vec3(widthPixels, 0.0);\nDECKGL_FILTER_SIZE(width, geometry);\nvec3 offset = getLineJoinOffset(\nprevPositionScreen.xyz / prevPositionScreen.w,\ncurrPositionScreen.xyz / currPositionScreen.w,\nnextPositionScreen.xyz / nextPositionScreen.w,\nproject_pixel_size_to_clipspace(width.xy)\n);\nDECKGL_FILTER_GL_POSITION(currPositionScreen, geometry);\ngl_Position = vec4(currPositionScreen.xyz + offset * currPositionScreen.w, currPositionScreen.w);\n} else {\nprevPosition = project_position(prevPosition, prevPosition64Low);\ncurrPosition = project_position(currPosition, currPosition64Low);\nnextPosition = project_position(nextPosition, nextPosition64Low);\nwidth = vec3(project_pixel_size(widthPixels), 0.0);\nDECKGL_FILTER_SIZE(width, geometry);\nvec3 offset = getLineJoinOffset(prevPosition, currPosition, nextPosition, width.xy);\ngeometry.position = vec4(currPosition + offset, 1.0);\ngl_Position = project_common_position_to_clipspace(geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#version 300 es\n#define SHADER_NAME path-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nin vec2 vCornerOffset;\nin float vMiterLength;\nin vec2 vPathPosition;\nin float vPathLength;\nin float vJointType;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = vPathPosition;\nif (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {\nif (vJointType > 0.5 && length(vCornerOffset) > 1.0) {\ndiscard;\n}\nif (vJointType < 0.5 && vMiterLength > path.miterLimit + 1.0) {\ndiscard;\n}\n}\nfragColor = vColor;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n",modules:[tc,Lc,Xg]})}get wrapLongitude(){return!1}getBounds(){var e;return null==(e=this.getAttributeManager())?void 0:e.getBounds(["vertexPositions"])}initializeState(){const e=!0;this.getAttributeManager().addInstanced({vertexPositions:{size:3,vertexOffset:1,type:"float64",fp64:this.use64bitPositions(),transition:qg,accessor:"getPath",update:this.calculatePositions,noAlloc:e,shaderAttributes:{instanceLeftPositions:{vertexOffset:0},instanceStartPositions:{vertexOffset:1},instanceEndPositions:{vertexOffset:2},instanceRightPositions:{vertexOffset:3}}},instanceTypes:{size:1,type:"uint8",update:this.calculateSegmentTypes,noAlloc:e},instanceStrokeWidths:{size:1,accessor:"getWidth",transition:qg,defaultValue:1},instanceColors:{size:this.props.colorFormat.length,type:"unorm8",accessor:"getColor",transition:qg,defaultValue:Qg},instancePickingColors:{size:4,type:"uint8",accessor:(e,{index:t,target:n})=>this.encodePickingColor(e&&e.__source?e.__source.index:t,n)}}),this.setState({pathTesselator:new Wg({fp64:this.use64bitPositions()})})}updateState(e){var t;super.updateState(e);const{props:n,changeFlags:r}=e,i=this.getAttributeManager();if(r.dataChanged||r.updateTriggersChanged&&(r.updateTriggersChanged.all||r.updateTriggersChanged.getPath)){const{pathTesselator:e}=this.state,t=n.data.attributes||{};e.updateGeometry({data:n.data,geometryBuffer:t.getPath,buffers:t,normalize:!n._pathType,loop:"loop"===n._pathType,getGeometry:n.getPath,positionFormat:n.positionFormat,wrapLongitude:n.wrapLongitude,resolution:this.context.viewport.resolution,dataChanged:r.dataChanged}),this.setState({numInstances:e.instanceCount,startIndices:e.vertexStarts}),r.dataChanged||i.invalidateAll()}r.extensionsChanged&&(null==(t=this.state.model)||t.destroy(),this.state.model=this._getModel(),i.invalidateAll())}getPickingInfo(e){const t=super.getPickingInfo(e),{index:n}=t,r=this.props.data;return r[0]&&r[0].__source&&(t.object=r.find(e=>e.__source.index===n)),t}disablePickingIndex(e){const t=this.props.data;if(t[0]&&t[0].__source)for(let n=0;n80*i){s=a=e[0],o=c=e[1];for(var b=i;ba&&(a=u),d>c&&(c=d);f=0!==(f=Math.max(a-s,c-o))?32767/f:0}return r(m,_,i,s,o,f,0),_}function t(e,t,n,r,i){var s,o;if(i===T(e,t,n,r)>0)for(s=t;s=t;s-=r)o=w(s,e[s],e[s+1],o);return o&&g(o,o.next)&&(x(o),o=o.next),o}function n(e,t){if(!e)return e;t||(t=e);var n,r=e;do{if(n=!1,r.steiner||!g(r,r.next)&&0!==p(r.prev,r,r.next))r=r.next;else{if(x(r),(r=t=r.prev)===r.next)break;n=!0}}while(n||r!==t);return t}function r(e,t,A,l,c,h,d){if(e){!d&&h&&function(e,t,n,r){var i=e;do{0===i.z&&(i.z=u(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,function(e){var t,n,r,i,s,o,a,A,l=1;do{for(n=e,e=null,s=null,o=0;n;){for(o++,r=n,a=0,t=0;t0||A>0&&r;)0!==a&&(0===A||!r||n.z<=r.z)?(i=n,n=n.nextZ,a--):(i=r,r=r.nextZ,A--),s?s.nextZ=i:e=i,i.prevZ=s,s=i;n=r}s.nextZ=null,l*=2}while(o>1)}(i)}(e,l,c,h);for(var f,p,g=e;e.prev!==e.next;)if(f=e.prev,p=e.next,h?s(e,l,c,h):i(e))t.push(f.i/A|0),t.push(e.i/A|0),t.push(p.i/A|0),x(e),e=p.next,g=p.next;else if((e=p)===g){d?1===d?r(e=o(n(e),t,A),t,A,l,c,h,2):2===d&&a(e,t,A,l,c,h):r(n(e),t,A,l,c,h,1);break}}}function i(e){var t=e.prev,n=e,r=e.next;if(p(t,n,r)>=0)return!1;for(var i=t.x,s=n.x,o=r.x,a=t.y,A=n.y,l=r.y,c=is?i>o?i:o:s>o?s:o,f=a>A?a>l?a:l:A>l?A:l,g=r.next;g!==t;){if(g.x>=c&&g.x<=h&&g.y>=u&&g.y<=f&&d(i,a,s,A,o,l,g.x,g.y)&&p(g.prev,g,g.next)>=0)return!1;g=g.next}return!0}function s(e,t,n,r){var i=e.prev,s=e,o=e.next;if(p(i,s,o)>=0)return!1;for(var a=i.x,A=s.x,l=o.x,c=i.y,h=s.y,f=o.y,g=aA?a>l?a:l:A>l?A:l,b=c>h?c>f?c:f:h>f?h:f,v=u(g,m,t,n,r),y=u(_,b,t,n,r),w=e.prevZ,x=e.nextZ;w&&w.z>=v&&x&&x.z<=y;){if(w.x>=g&&w.x<=_&&w.y>=m&&w.y<=b&&w!==i&&w!==o&&d(a,c,A,h,l,f,w.x,w.y)&&p(w.prev,w,w.next)>=0)return!1;if(w=w.prevZ,x.x>=g&&x.x<=_&&x.y>=m&&x.y<=b&&x!==i&&x!==o&&d(a,c,A,h,l,f,x.x,x.y)&&p(x.prev,x,x.next)>=0)return!1;x=x.nextZ}for(;w&&w.z>=v;){if(w.x>=g&&w.x<=_&&w.y>=m&&w.y<=b&&w!==i&&w!==o&&d(a,c,A,h,l,f,w.x,w.y)&&p(w.prev,w,w.next)>=0)return!1;w=w.prevZ}for(;x&&x.z<=y;){if(x.x>=g&&x.x<=_&&x.y>=m&&x.y<=b&&x!==i&&x!==o&&d(a,c,A,h,l,f,x.x,x.y)&&p(x.prev,x,x.next)>=0)return!1;x=x.nextZ}return!0}function o(e,t,r){var i=e;do{var s=i.prev,o=i.next.next;!g(s,o)&&m(s,i,i.next,o)&&v(s,o)&&v(o,s)&&(t.push(s.i/r|0),t.push(i.i/r|0),t.push(o.i/r|0),x(i),x(i.next),i=e=o),i=i.next}while(i!==e);return n(i)}function a(e,t,i,s,o,a){var A=e;do{for(var l=A.next.next;l!==A.prev;){if(A.i!==l.i&&f(A,l)){var c=y(A,l);return A=n(A,A.next),c=n(c,c.next),r(A,t,i,s,o,a,0),void r(c,t,i,s,o,a,0)}l=l.next}A=A.next}while(A!==e)}function A(e,t){return e.x-t.x}function l(e,t){var r=function(e,t){var n,r=t,i=e.x,s=e.y,o=-1/0;do{if(s<=r.y&&s>=r.next.y&&r.next.y!==r.y){var a=r.x+(s-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(a<=i&&a>o&&(o=a,n=r.x=r.x&&r.x>=u&&i!==r.x&&d(sn.x||r.x===n.x&&c(n,r)))&&(n=r,f=A)),r=r.next}while(r!==l);return n}(e,t);if(!r)return t;var i=y(r,e);return n(i,i.next),n(r,r.next)}function c(e,t){return p(e.prev,e,t.prev)<0&&p(t.next,e,e.next)<0}function u(e,t,n,r,i){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*i|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-r)*i|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function h(e){var t=e,n=e;do{(t.x=(e-o)*(s-a)&&(e-o)*(r-a)>=(n-o)*(t-a)&&(n-o)*(s-a)>=(i-o)*(r-a)}function f(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&m(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&(v(e,t)&&v(t,e)&&function(e,t){var n=e,r=!1,i=(e.x+t.x)/2,s=(e.y+t.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&i<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==e);return r}(e,t)&&(p(e.prev,e,t.prev)||p(e,t.prev,t))||g(e,t)&&p(e.prev,e,e.next)>0&&p(t.prev,t,t.next)>0)}function p(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function g(e,t){return e.x===t.x&&e.y===t.y}function m(e,t,n,r){var i=b(p(e,t,n)),s=b(p(e,t,r)),o=b(p(n,r,e)),a=b(p(n,r,t));return i!==s&&o!==a||!(0!==i||!_(e,n,t))||!(0!==s||!_(e,r,t))||!(0!==o||!_(n,e,r))||!(0!==a||!_(n,t,r))}function _(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function b(e){return e>0?1:e<0?-1:0}function v(e,t){return p(e.prev,e,e.next)<0?p(e,t,e.next)>=0&&p(e,e.prev,t)>=0:p(e,t,e.prev)<0||p(e,e.next,t)<0}function y(e,t){var n=new E(e.i,e.x,e.y),r=new E(t.i,t.x,t.y),i=e.next,s=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,s.next=r,r.prev=s,r}function w(e,t,n,r){var i=new E(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function x(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function E(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function T(e,t,n,r){for(var i=0,s=t,o=n-r;s0&&(r+=e[i-1].length,n.holes.push(r))}return n},Jg.exports}();const tm=W(em),nm={};function rm(e){return"positions"in e?e.positions:e}function im(e){return"holeIndices"in e?e.holeIndices:null}function sm(e,t,n,r,i){let s=t;const o=n.length;for(let a=0;a=1&&e[0].length>=2&&Number.isFinite(e[0][0])}(e)){let i=0;for(const[s,o]of e.entries())i=sm(n,i,o,t,0===s?1:-1),r.push(i);return r.pop(),{positions:n,holeIndices:r}}return sm(n,0,e,t,1),n}function Am(e,t,n){const r=e.length/3;let i=0;for(let s=0;se/t));let s=rm(e);const o=r&&3===t;if(n){const e=s.length;s=s.slice();const r=[];for(let i=0;it&&e>r||(t>r?(n||(s=s.slice()),lm(s,0,2,1)):(n||(s=s.slice()),lm(s,2,0,1)))}return tm(s,i,t)}(e,this.positionSize,this.opts.preproject,this.opts.full3d);a=o.allocate(a,r+l.length,{copy:!0});for(let c=0;c2?s[a*i+2]:0;r[3*o]=e,r[3*o+1]=t,r[3*o+2]=n}}_updateVertexValid(e,{vertexStart:t,geometrySize:n}){const{positionSize:r}=this,i=this.attributes.vertexValid,s=e&&im(e);if(e&&e.edgeTypes?i.set(e.edgeTypes,t):i.fill(1,t,t+n),s)for(let o=0;o0&&!Number.isFinite(e[0])}const hm="uniform solidPolygonUniforms {\n bool extruded;\n bool isWireframe;\n float elevationScale;\n} solidPolygon;\n",dm={name:"solidPolygon",vs:hm,fs:hm,uniformTypes:{extruded:"f32",isWireframe:"f32",elevationScale:"f32"}},fm="in vec4 fillColors;\nin vec4 lineColors;\nin vec3 pickingColors;\nout vec4 vColor;\nstruct PolygonProps {\nvec3 positions;\nvec3 positions64Low;\nvec3 normal;\nfloat elevations;\n};\nvec3 project_offset_normal(vec3 vector) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\nproject.coordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\nreturn normalize(vector * project.commonUnitsPerWorldUnit);\n}\nreturn project_normal(vector);\n}\nvoid calculatePosition(PolygonProps props) {\nvec3 pos = props.positions;\nvec3 pos64Low = props.positions64Low;\nvec3 normal = props.normal;\nvec4 colors = solidPolygon.isWireframe ? lineColors : fillColors;\ngeometry.worldPosition = props.positions;\ngeometry.pickingColor = pickingColors;\nif (solidPolygon.extruded) {\npos.z += props.elevations * solidPolygon.elevationScale;\n}\ngl_Position = project_position_to_clipspace(pos, pos64Low, vec3(0.), geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nif (solidPolygon.extruded) {\n#ifdef IS_SIDE_VERTEX\nnormal = project_offset_normal(normal);\n#else\nnormal = project_normal(normal);\n#endif\ngeometry.normal = normal;\nvec3 lightColor = lighting_getLightColor(colors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, colors.a * layer.opacity);\n} else {\nvColor = vec4(colors.rgb, colors.a * layer.opacity);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n",pm=`#version 300 es\n#define SHADER_NAME solid-polygon-layer-vertex-shader\nin vec3 vertexPositions;\nin vec3 vertexPositions64Low;\nin float elevations;\n${fm}\nvoid main(void) {\nPolygonProps props;\nprops.positions = vertexPositions;\nprops.positions64Low = vertexPositions64Low;\nprops.elevations = elevations;\nprops.normal = vec3(0.0, 0.0, 1.0);\ncalculatePosition(props);\n}\n`,gm=`#version 300 es\n#define SHADER_NAME solid-polygon-layer-vertex-shader-side\n#define IS_SIDE_VERTEX\nin vec2 positions;\nin vec3 vertexPositions;\nin vec3 nextVertexPositions;\nin vec3 vertexPositions64Low;\nin vec3 nextVertexPositions64Low;\nin float elevations;\nin float instanceVertexValid;\n${fm}\nvoid main(void) {\nif(instanceVertexValid < 0.5){\ngl_Position = vec4(0.);\nreturn;\n}\nPolygonProps props;\nvec3 pos;\nvec3 pos64Low;\nvec3 nextPos;\nvec3 nextPos64Low;\n#if RING_WINDING_ORDER_CW == 1\npos = vertexPositions;\npos64Low = vertexPositions64Low;\nnextPos = nextVertexPositions;\nnextPos64Low = nextVertexPositions64Low;\n#else\npos = nextVertexPositions;\npos64Low = nextVertexPositions64Low;\nnextPos = vertexPositions;\nnextPos64Low = vertexPositions64Low;\n#endif\nprops.positions = mix(pos, nextPos, positions.x);\nprops.positions64Low = mix(pos64Low, nextPos64Low, positions.x);\nprops.normal = vec3(\npos.y - nextPos.y + (pos64Low.y - nextPos64Low.y),\nnextPos.x - pos.x + (nextPos64Low.x - pos64Low.x),\n0.0);\nprops.elevations = elevations * positions.y;\ncalculatePosition(props);\n}\n`,mm=[0,0,0,255],_m={filled:!0,extruded:!1,wireframe:!1,_normalize:!0,_windingOrder:"CW",_full3d:!1,elevationScale:{type:"number",min:0,value:1},getPolygon:{type:"accessor",value:e=>e.polygon},getElevation:{type:"accessor",value:1e3},getFillColor:{type:"accessor",value:mm},getLineColor:{type:"accessor",value:mm},material:!0},bm={enter:(e,t)=>t.length?t.subarray(t.length-e.length):e};class vm extends ag{getShaders(e){return super.getShaders({vs:"top"===e?pm:gm,fs:"#version 300 es\n#define SHADER_NAME solid-polygon-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nout vec4 fragColor;\nvoid main(void) {\nfragColor = vColor;\ngeometry.uv = vec2(0.);\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n",defines:{RING_WINDING_ORDER_CW:this.props._normalize||"CCW"!==this.props._windingOrder?1:0},modules:[tc,PA,Lc,dm]})}get wrapLongitude(){return!1}getBounds(){var e;return null==(e=this.getAttributeManager())?void 0:e.getBounds(["vertexPositions"])}initializeState(){const{viewport:e}=this.context;let{coordinateSystem:t}=this.props;const{_full3d:n}=this.props;let r;e.isGeospatial&&t===Bl.DEFAULT&&(t=Bl.LNGLAT),t===Bl.LNGLAT&&(r=n?e.projectPosition.bind(e):e.projectFlat.bind(e)),this.setState({numInstances:0,polygonTesselator:new cm({preproject:r,fp64:this.use64bitPositions(),IndexType:Uint32Array})});const i=this.getAttributeManager(),s=!0;i.remove(["instancePickingColors"]),i.add({indices:{size:1,isIndexed:!0,update:this.calculateIndices,noAlloc:s},vertexPositions:{size:3,type:"float64",stepMode:"dynamic",fp64:this.use64bitPositions(),transition:bm,accessor:"getPolygon",update:this.calculatePositions,noAlloc:s,shaderAttributes:{nextVertexPositions:{vertexOffset:1}}},instanceVertexValid:{size:1,type:"uint16",stepMode:"instance",update:this.calculateVertexValid,noAlloc:s},elevations:{size:1,stepMode:"dynamic",transition:bm,accessor:"getElevation"},fillColors:{size:this.props.colorFormat.length,type:"unorm8",stepMode:"dynamic",transition:bm,accessor:"getFillColor",defaultValue:mm},lineColors:{size:this.props.colorFormat.length,type:"unorm8",stepMode:"dynamic",transition:bm,accessor:"getLineColor",defaultValue:mm},pickingColors:{size:4,type:"uint8",stepMode:"dynamic",accessor:(e,{index:t,target:n})=>this.encodePickingColor(e&&e.__source?e.__source.index:t,n)}})}getPickingInfo(e){const t=super.getPickingInfo(e),{index:n}=t,r=this.props.data;return r[0]&&r[0].__source&&(t.object=r.find(e=>e.__source.index===n)),t}disablePickingIndex(e){const t=this.props.data;if(t[0]&&t[0].__source)for(let n=0;ne.destroy()),this.setState(this._getModels()),s.invalidateAll())}updateGeometry({props:e,oldProps:t,changeFlags:n}){if(n.dataChanged||n.updateTriggersChanged&&(n.updateTriggersChanged.all||n.updateTriggersChanged.getPolygon)){const{polygonTesselator:t}=this.state,r=e.data.attributes||{};t.updateGeometry({data:e.data,normalize:e._normalize,geometryBuffer:r.getPolygon,buffers:r,getGeometry:e.getPolygon,positionFormat:e.positionFormat,wrapLongitude:e.wrapLongitude,resolution:this.context.viewport.resolution,fp64:this.use64bitPositions(),dataChanged:n.dataChanged,full3d:e._full3d}),this.setState({numInstances:t.instanceCount,startIndices:t.vertexStarts}),n.dataChanged||this.getAttributeManager().invalidateAll()}}_getModels(){const{id:e,filled:t,extruded:n}=this.props;let r,i,s;if(t){const t=this.getShaders("top");t.defines.NON_INSTANCED_MODEL=1;const n=this.getAttributeManager().getBufferLayouts({isInstanced:!1});r=new Vu(this.context.device,{...t,id:`${e}-top`,topology:"triangle-list",bufferLayout:n,isIndexed:!0,userData:{excludeAttributes:{instanceVertexValid:!0}}})}if(n){const t=this.getAttributeManager().getBufferLayouts({isInstanced:!0});i=new Vu(this.context.device,{...this.getShaders("side"),id:`${e}-side`,bufferLayout:t,geometry:new Xu({topology:"triangle-strip",attributes:{positions:{size:2,value:new Float32Array([1,0,0,0,1,1,0,1])}}}),isInstanced:!0,userData:{excludeAttributes:{indices:!0}}}),s=new Vu(this.context.device,{...this.getShaders("side"),id:`${e}-wireframe`,bufferLayout:t,geometry:new Xu({topology:"line-strip",attributes:{positions:{size:2,value:new Float32Array([1,0,0,0,0,1,1,1])}}}),isInstanced:!0,userData:{excludeAttributes:{indices:!0}}})}return{models:[i,s,r].filter(Boolean),topModel:r,sideModel:i,wireframeModel:s}}calculateIndices(e){const{polygonTesselator:t}=this.state;e.startIndices=t.indexStarts,e.value=t.get("indices")}calculatePositions(e){const{polygonTesselator:t}=this.state;e.startIndices=t.vertexStarts,e.value=t.get("positions")}calculateVertexValid(e){e.value=this.state.polygonTesselator.get("vertexValid")}}vm.defaultProps=_m,vm.layerName="SolidPolygonLayer";const ym=[0,0,0,255],wm={stroked:!0,filled:!0,extruded:!1,elevationScale:1,wireframe:!1,_normalize:!0,_windingOrder:"CW",lineWidthUnits:"meters",lineWidthScale:1,lineWidthMinPixels:0,lineWidthMaxPixels:Number.MAX_SAFE_INTEGER,lineJointRounded:!1,lineMiterLimit:4,getPolygon:{type:"accessor",value:e=>e.polygon},getFillColor:{type:"accessor",value:[0,0,0,255]},getLineColor:{type:"accessor",value:ym},getLineWidth:{type:"accessor",value:1},getElevation:{type:"accessor",value:1e3},material:!0};class xm extends Ag{initializeState(){this.state={paths:[],pathsDiff:null},this.props.getLineDashArray&&Gn.removed("getLineDashArray","PathStyleExtension")()}updateState({changeFlags:e}){const t=e.dataChanged||e.updateTriggersChanged&&(e.updateTriggersChanged.all||e.updateTriggersChanged.getPolygon);if(t&&Array.isArray(e.dataChanged)){const t=this.state.paths.slice(),n=e.dataChanged.map(e=>function({data:e,getIndex:t,dataRange:n,replace:r}){const{startRow:i=0,endRow:s=1/0}=n,o=e.length;let a=o,A=o;for(let u=0;uu&&n>=i&&(a=u),n>=s){A=u;break}}let l=a;const c=A-a!==r.length?e.slice(A):void 0;for(let u=0;ue.__source.index,dataRange:e,replace:this._getPaths(e)}));this.setState({paths:t,pathsDiff:n})}else t&&this.setState({paths:this._getPaths(),pathsDiff:null})}_getPaths(e={}){const{data:t,getPolygon:n,positionFormat:r,_normalize:i}=this.props,s=[],o="XY"===r?2:3,{startRow:a,endRow:A}=e,{iterable:l,objectInfo:c}=ap(t,a,A);for(const u of l){c.index++;let e=n(u,c);i&&(e=am(e,o));const{holeIndices:t}=e,r=e.positions||e;if(t)for(let n=0;n<=t.length;n++){const e=r.slice(t[n-1]||0,t[n]||r.length);s.push(this.getSubLayerRow({path:e},u,c.index))}else s.push(this.getSubLayerRow({path:r},u,c.index))}return s}renderLayers(){const{data:e,_dataDiff:t,stroked:n,filled:r,extruded:i,wireframe:s,_normalize:o,_windingOrder:a,elevationScale:A,transitions:l,positionFormat:c}=this.props,{lineWidthUnits:u,lineWidthScale:h,lineWidthMinPixels:d,lineWidthMaxPixels:f,lineJointRounded:p,lineMiterLimit:g,lineDashJustified:m}=this.props,{getFillColor:_,getLineColor:b,getLineWidth:v,getLineDashArray:y,getElevation:w,getPolygon:x,updateTriggers:E,material:T}=this.props,{paths:S,pathsDiff:C}=this.state,k=this.getSubLayerClass("fill",vm),R=this.getSubLayerClass("stroke",Kg),P=this.shouldRenderSubLayer("fill",S)&&new k({_dataDiff:t,extruded:i,elevationScale:A,filled:r,wireframe:s,_normalize:o,_windingOrder:a,getElevation:w,getFillColor:_,getLineColor:i&&s?b:ym,material:T,transitions:l},this.getSubLayerProps({id:"fill",updateTriggers:E&&{getPolygon:E.getPolygon,getElevation:E.getElevation,getFillColor:E.getFillColor,lineColors:i&&s,getLineColor:E.getLineColor}}),{data:e,positionFormat:c,getPolygon:x});return[!i&&P,!i&&n&&this.shouldRenderSubLayer("stroke",S)&&new R({_dataDiff:C&&(()=>C),widthUnits:u,widthScale:h,widthMinPixels:d,widthMaxPixels:f,jointRounded:p,miterLimit:g,dashJustified:m,_pathType:"loop",transitions:l&&{getWidth:l.getLineWidth,getColor:l.getLineColor,getPath:l.getPolygon},getColor:this.getSubLayerAccessor(b),getWidth:this.getSubLayerAccessor(v),getDashArray:this.getSubLayerAccessor(y)},this.getSubLayerProps({id:"stroke",updateTriggers:E&&{getWidth:E.getLineWidth,getColor:E.getLineColor,getDashArray:E.getLineDashArray}}),{data:S,positionFormat:c,getPath:e=>e.path}),i&&P]}}xm.layerName="PolygonLayer",xm.defaultProps=wm;var Em=function(e){var t,n=void 0!==(e=e||{})?e:{},r={};for(t in n)n.hasOwnProperty(t)&&(r[t]=n[t]);var i,s="";"undefined"!=typeof document&&document.currentScript&&(s=document.currentScript.src),s=0!==s.indexOf("blob:")?s.substr(0,s.lastIndexOf("/")+1):"",i=function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){if(200==r.status||0==r.status&&r.response)t(r.response);else{var i=V(e);i?t(i.buffer):n()}},r.onerror=n,r.send(null)};var o=n.print||function(){}.bind(),a=n.printErr||function(){}.bind();for(t in r)r.hasOwnProperty(t)&&(n[t]=r[t]);r=null,n.arguments&&n.arguments;var A=0,l=!1;function c(e){var t=n["_"+e];return t||ne("Assertion failed: "+("Cannot call unknown function "+e+", make sure it is exported")),t}var u,h,d,f,p,g,m,_="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function b(e,t){return e?function(e,t,n){for(var r=t+n,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.subarray&&_)return _.decode(e.subarray(t,i));for(var s="";t>10,56320|1023&l)}}else s+=String.fromCharCode((31&o)<<6|a)}else s+=String.fromCharCode(o)}return s}(d,e,t):""}function v(e,t){return e%t>0&&(e+=t-e%t),e}function y(e){u=e,n.HEAP8=h=new Int8Array(e),n.HEAP16=f=new Int16Array(e),n.HEAP32=p=new Int32Array(e),n.HEAPU8=d=new Uint8Array(e),n.HEAPU16=new Uint16Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=g=new Float32Array(e),n.HEAPF64=m=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var w=n.TOTAL_MEMORY||33554432;function x(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var r=t.func;"number"==typeof r?void 0===t.arg?n.dynCall_v(r):n.dynCall_vi(r,t.arg):r(void 0===t.arg?null:t.arg)}else t()}}w=(u=n.buffer?n.buffer:new ArrayBuffer(w)).byteLength,y(u),p[7156]=5271536;var E=[],T=[],S=[],C=[];function k(e){E.unshift(e)}function R(e){C.unshift(e)}var P=Math.abs,I=Math.ceil,M=Math.floor,L=Math.min,N=0,B=null;n.preloadedImages={},n.preloadedAudios={};var D,O,F=null,U="data:application/octet-stream;base64,";function j(e){return String.prototype.startsWith?e.startsWith(U):0===e.indexOf(U)}function G(){return h.length}F="data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAAQAAAAQAAAADAAAABgAAAAUAAAACAAAAAAAAAAIAAAADAAAAAQAAAAQAAAAGAAAAAAAAAAUAAAADAAAABgAAAAQAAAAFAAAAAAAAAAEAAAACAAAABAAAAAUAAAAGAAAAAAAAAAIAAAADAAAAAQAAAAUAAAACAAAAAAAAAAEAAAADAAAABgAAAAQAAAAGAAAAAAAAAAUAAAACAAAAAQAAAAQAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAAAAAAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAYAAAAAAAAABQAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAYAAAAAAAAAAwAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAABAAAAAAAAAABAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAgAAAAQAAAADAAAACAAAAAEAAAAHAAAABgAAAAkAAAAAAAAAAwAAAAIAAAACAAAABgAAAAoAAAALAAAAAAAAAAEAAAAFAAAAAwAAAA0AAAABAAAABwAAAAQAAAAMAAAAAAAAAAQAAAB/AAAADwAAAAgAAAADAAAAAAAAAAwAAAAFAAAAAgAAABIAAAAKAAAACAAAAAAAAAAQAAAABgAAAA4AAAALAAAAEQAAAAEAAAAJAAAAAgAAAAcAAAAVAAAACQAAABMAAAADAAAADQAAAAEAAAAIAAAABQAAABYAAAAQAAAABAAAAAAAAAAPAAAACQAAABMAAAAOAAAAFAAAAAEAAAAHAAAABgAAAAoAAAALAAAAGAAAABcAAAAFAAAAAgAAABIAAAALAAAAEQAAABcAAAAZAAAAAgAAAAYAAAAKAAAADAAAABwAAAANAAAAGgAAAAQAAAAPAAAAAwAAAA0AAAAaAAAAFQAAAB0AAAADAAAADAAAAAcAAAAOAAAAfwAAABEAAAAbAAAACQAAABQAAAAGAAAADwAAABYAAAAcAAAAHwAAAAQAAAAIAAAADAAAABAAAAASAAAAIQAAAB4AAAAIAAAABQAAABYAAAARAAAACwAAAA4AAAAGAAAAIwAAABkAAAAbAAAAEgAAABgAAAAeAAAAIAAAAAUAAAAKAAAAEAAAABMAAAAiAAAAFAAAACQAAAAHAAAAFQAAAAkAAAAUAAAADgAAABMAAAAJAAAAKAAAABsAAAAkAAAAFQAAACYAAAATAAAAIgAAAA0AAAAdAAAABwAAABYAAAAQAAAAKQAAACEAAAAPAAAACAAAAB8AAAAXAAAAGAAAAAsAAAAKAAAAJwAAACUAAAAZAAAAGAAAAH8AAAAgAAAAJQAAAAoAAAAXAAAAEgAAABkAAAAXAAAAEQAAAAsAAAAtAAAAJwAAACMAAAAaAAAAKgAAAB0AAAArAAAADAAAABwAAAANAAAAGwAAACgAAAAjAAAALgAAAA4AAAAUAAAAEQAAABwAAAAfAAAAKgAAACwAAAAMAAAADwAAABoAAAAdAAAAKwAAACYAAAAvAAAADQAAABoAAAAVAAAAHgAAACAAAAAwAAAAMgAAABAAAAASAAAAIQAAAB8AAAApAAAALAAAADUAAAAPAAAAFgAAABwAAAAgAAAAHgAAABgAAAASAAAANAAAADIAAAAlAAAAIQAAAB4AAAAxAAAAMAAAABYAAAAQAAAAKQAAACIAAAATAAAAJgAAABUAAAA2AAAAJAAAADMAAAAjAAAALgAAAC0AAAA4AAAAEQAAABsAAAAZAAAAJAAAABQAAAAiAAAAEwAAADcAAAAoAAAANgAAACUAAAAnAAAANAAAADkAAAAYAAAAFwAAACAAAAAmAAAAfwAAACIAAAAzAAAAHQAAAC8AAAAVAAAAJwAAACUAAAAZAAAAFwAAADsAAAA5AAAALQAAACgAAAAbAAAAJAAAABQAAAA8AAAALgAAADcAAAApAAAAMQAAADUAAAA9AAAAFgAAACEAAAAfAAAAKgAAADoAAAArAAAAPgAAABwAAAAsAAAAGgAAACsAAAA+AAAALwAAAEAAAAAaAAAAKgAAAB0AAAAsAAAANQAAADoAAABBAAAAHAAAAB8AAAAqAAAALQAAACcAAAAjAAAAGQAAAD8AAAA7AAAAOAAAAC4AAAA8AAAAOAAAAEQAAAAbAAAAKAAAACMAAAAvAAAAJgAAACsAAAAdAAAARQAAADMAAABAAAAAMAAAADEAAAAeAAAAIQAAAEMAAABCAAAAMgAAADEAAAB/AAAAPQAAAEIAAAAhAAAAMAAAACkAAAAyAAAAMAAAACAAAAAeAAAARgAAAEMAAAA0AAAAMwAAAEUAAAA2AAAARwAAACYAAAAvAAAAIgAAADQAAAA5AAAARgAAAEoAAAAgAAAAJQAAADIAAAA1AAAAPQAAAEEAAABLAAAAHwAAACkAAAAsAAAANgAAAEcAAAA3AAAASQAAACIAAAAzAAAAJAAAADcAAAAoAAAANgAAACQAAABIAAAAPAAAAEkAAAA4AAAARAAAAD8AAABNAAAAIwAAAC4AAAAtAAAAOQAAADsAAABKAAAATgAAACUAAAAnAAAANAAAADoAAAB/AAAAPgAAAEwAAAAsAAAAQQAAACoAAAA7AAAAPwAAAE4AAABPAAAAJwAAAC0AAAA5AAAAPAAAAEgAAABEAAAAUAAAACgAAAA3AAAALgAAAD0AAAA1AAAAMQAAACkAAABRAAAASwAAAEIAAAA+AAAAKwAAADoAAAAqAAAAUgAAAEAAAABMAAAAPwAAAH8AAAA4AAAALQAAAE8AAAA7AAAATQAAAEAAAAAvAAAAPgAAACsAAABUAAAARQAAAFIAAABBAAAAOgAAADUAAAAsAAAAVgAAAEwAAABLAAAAQgAAAEMAAABRAAAAVQAAADEAAAAwAAAAPQAAAEMAAABCAAAAMgAAADAAAABXAAAAVQAAAEYAAABEAAAAOAAAADwAAAAuAAAAWgAAAE0AAABQAAAARQAAADMAAABAAAAALwAAAFkAAABHAAAAVAAAAEYAAABDAAAANAAAADIAAABTAAAAVwAAAEoAAABHAAAAWQAAAEkAAABbAAAAMwAAAEUAAAA2AAAASAAAAH8AAABJAAAANwAAAFAAAAA8AAAAWAAAAEkAAABbAAAASAAAAFgAAAA2AAAARwAAADcAAABKAAAATgAAAFMAAABcAAAANAAAADkAAABGAAAASwAAAEEAAAA9AAAANQAAAF4AAABWAAAAUQAAAEwAAABWAAAAUgAAAGAAAAA6AAAAQQAAAD4AAABNAAAAPwAAAEQAAAA4AAAAXQAAAE8AAABaAAAATgAAAEoAAAA7AAAAOQAAAF8AAABcAAAATwAAAE8AAABOAAAAPwAAADsAAABdAAAAXwAAAE0AAABQAAAARAAAAEgAAAA8AAAAYwAAAFoAAABYAAAAUQAAAFUAAABeAAAAZQAAAD0AAABCAAAASwAAAFIAAABgAAAAVAAAAGIAAAA+AAAATAAAAEAAAABTAAAAfwAAAEoAAABGAAAAZAAAAFcAAABcAAAAVAAAAEUAAABSAAAAQAAAAGEAAABZAAAAYgAAAFUAAABXAAAAZQAAAGYAAABCAAAAQwAAAFEAAABWAAAATAAAAEsAAABBAAAAaAAAAGAAAABeAAAAVwAAAFMAAABmAAAAZAAAAEMAAABGAAAAVQAAAFgAAABIAAAAWwAAAEkAAABjAAAAUAAAAGkAAABZAAAAYQAAAFsAAABnAAAARQAAAFQAAABHAAAAWgAAAE0AAABQAAAARAAAAGoAAABdAAAAYwAAAFsAAABJAAAAWQAAAEcAAABpAAAAWAAAAGcAAABcAAAAUwAAAE4AAABKAAAAbAAAAGQAAABfAAAAXQAAAE8AAABaAAAATQAAAG0AAABfAAAAagAAAF4AAABWAAAAUQAAAEsAAABrAAAAaAAAAGUAAABfAAAAXAAAAE8AAABOAAAAbQAAAGwAAABdAAAAYAAAAGgAAABiAAAAbgAAAEwAAABWAAAAUgAAAGEAAAB/AAAAYgAAAFQAAABnAAAAWQAAAG8AAABiAAAAbgAAAGEAAABvAAAAUgAAAGAAAABUAAAAYwAAAFAAAABpAAAAWAAAAGoAAABaAAAAcQAAAGQAAABmAAAAUwAAAFcAAABsAAAAcgAAAFwAAABlAAAAZgAAAGsAAABwAAAAUQAAAFUAAABeAAAAZgAAAGUAAABXAAAAVQAAAHIAAABwAAAAZAAAAGcAAABbAAAAYQAAAFkAAAB0AAAAaQAAAG8AAABoAAAAawAAAG4AAABzAAAAVgAAAF4AAABgAAAAaQAAAFgAAABnAAAAWwAAAHEAAABjAAAAdAAAAGoAAABdAAAAYwAAAFoAAAB1AAAAbQAAAHEAAABrAAAAfwAAAGUAAABeAAAAcwAAAGgAAABwAAAAbAAAAGQAAABfAAAAXAAAAHYAAAByAAAAbQAAAG0AAABsAAAAXQAAAF8AAAB1AAAAdgAAAGoAAABuAAAAYgAAAGgAAABgAAAAdwAAAG8AAABzAAAAbwAAAGEAAABuAAAAYgAAAHQAAABnAAAAdwAAAHAAAABrAAAAZgAAAGUAAAB4AAAAcwAAAHIAAABxAAAAYwAAAHQAAABpAAAAdQAAAGoAAAB5AAAAcgAAAHAAAABkAAAAZgAAAHYAAAB4AAAAbAAAAHMAAABuAAAAawAAAGgAAAB4AAAAdwAAAHAAAAB0AAAAZwAAAHcAAABvAAAAcQAAAGkAAAB5AAAAdQAAAH8AAABtAAAAdgAAAHEAAAB5AAAAagAAAHYAAAB4AAAAbAAAAHIAAAB1AAAAeQAAAG0AAAB3AAAAbwAAAHMAAABuAAAAeQAAAHQAAAB4AAAAeAAAAHMAAAByAAAAcAAAAHkAAAB3AAAAdgAAAHkAAAB0AAAAeAAAAHcAAAB1AAAAcQAAAHYAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABAAAABQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAACAAAABQAAAAEAAAAAAAAA/////wEAAAAAAAAAAwAAAAQAAAACAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAABQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAUAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAUAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAD/////AQAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAUAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAD//////////wEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAAAAAAAAAAABAAAAAgAAAAYAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAAFAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAAAAAAAAAAABAAAAAwAAAAcAAAAGAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADgAAAAIAAAAAAAAAAAAAAAEAAAAAAAAACQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAAAAAAAAAAAAAEAAAAEAAAACAAAAAoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAAAAAAAAAAAAQAAAAsAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAAQAAAAwAAAAQAAAADAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAAAAAAAAAAABAAAACgAAABMAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAEAAAANAAAAEQAAAA0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAABAAAADgAAABIAAAAPAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAAAAAAAAQAAAP//////////EwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAASAAAAAAAAABgAAAAAAAAAIQAAAAAAAAAeAAAAAAAAACAAAAADAAAAMQAAAAEAAAAwAAAAAwAAADIAAAADAAAACAAAAAAAAAAFAAAABQAAAAoAAAAFAAAAFgAAAAAAAAAQAAAAAAAAABIAAAAAAAAAKQAAAAEAAAAhAAAAAAAAAB4AAAAAAAAABAAAAAAAAAAAAAAABQAAAAIAAAAFAAAADwAAAAEAAAAIAAAAAAAAAAUAAAAFAAAAHwAAAAEAAAAWAAAAAAAAABAAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAA4AAAAAAAAACgAAAAAAAAALAAAAAAAAABEAAAADAAAAGAAAAAEAAAAXAAAAAwAAABkAAAADAAAAAAAAAAAAAAABAAAABQAAAAkAAAAFAAAABQAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEgAAAAEAAAAKAAAAAAAAAAsAAAAAAAAABAAAAAEAAAADAAAABQAAAAcAAAAFAAAACAAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAEAAAAAEAAAAFAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAVAAAAAAAAACYAAAAAAAAACQAAAAAAAAATAAAAAAAAACIAAAADAAAADgAAAAEAAAAUAAAAAwAAACQAAAADAAAAAwAAAAAAAAANAAAABQAAAB0AAAAFAAAAAQAAAAAAAAAHAAAAAAAAABUAAAAAAAAABgAAAAEAAAAJAAAAAAAAABMAAAAAAAAABAAAAAIAAAAMAAAABQAAABoAAAAFAAAAAAAAAAEAAAADAAAAAAAAAA0AAAAFAAAAAgAAAAEAAAABAAAAAAAAAAcAAAAAAAAAGgAAAAAAAAAqAAAAAAAAADoAAAAAAAAAHQAAAAAAAAArAAAAAAAAAD4AAAADAAAAJgAAAAEAAAAvAAAAAwAAAEAAAAADAAAADAAAAAAAAAAcAAAABQAAACwAAAAFAAAADQAAAAAAAAAaAAAAAAAAACoAAAAAAAAAFQAAAAEAAAAdAAAAAAAAACsAAAAAAAAABAAAAAMAAAAPAAAABQAAAB8AAAAFAAAAAwAAAAEAAAAMAAAAAAAAABwAAAAFAAAABwAAAAEAAAANAAAAAAAAABoAAAAAAAAAHwAAAAAAAAApAAAAAAAAADEAAAAAAAAALAAAAAAAAAA1AAAAAAAAAD0AAAADAAAAOgAAAAEAAABBAAAAAwAAAEsAAAADAAAADwAAAAAAAAAWAAAABQAAACEAAAAFAAAAHAAAAAAAAAAfAAAAAAAAACkAAAAAAAAAKgAAAAEAAAAsAAAAAAAAADUAAAAAAAAABAAAAAQAAAAIAAAABQAAABAAAAAFAAAADAAAAAEAAAAPAAAAAAAAABYAAAAFAAAAGgAAAAEAAAAcAAAAAAAAAB8AAAAAAAAAMgAAAAAAAAAwAAAAAAAAADEAAAADAAAAIAAAAAAAAAAeAAAAAwAAACEAAAADAAAAGAAAAAMAAAASAAAAAwAAABAAAAADAAAARgAAAAAAAABDAAAAAAAAAEIAAAADAAAANAAAAAMAAAAyAAAAAAAAADAAAAAAAAAAJQAAAAMAAAAgAAAAAAAAAB4AAAADAAAAUwAAAAAAAABXAAAAAwAAAFUAAAADAAAASgAAAAMAAABGAAAAAAAAAEMAAAAAAAAAOQAAAAEAAAA0AAAAAwAAADIAAAAAAAAAGQAAAAAAAAAXAAAAAAAAABgAAAADAAAAEQAAAAAAAAALAAAAAwAAAAoAAAADAAAADgAAAAMAAAAGAAAAAwAAAAIAAAADAAAALQAAAAAAAAAnAAAAAAAAACUAAAADAAAAIwAAAAMAAAAZAAAAAAAAABcAAAAAAAAAGwAAAAMAAAARAAAAAAAAAAsAAAADAAAAPwAAAAAAAAA7AAAAAwAAADkAAAADAAAAOAAAAAMAAAAtAAAAAAAAACcAAAAAAAAALgAAAAMAAAAjAAAAAwAAABkAAAAAAAAAJAAAAAAAAAAUAAAAAAAAAA4AAAADAAAAIgAAAAAAAAATAAAAAwAAAAkAAAADAAAAJgAAAAMAAAAVAAAAAwAAAAcAAAADAAAANwAAAAAAAAAoAAAAAAAAABsAAAADAAAANgAAAAMAAAAkAAAAAAAAABQAAAAAAAAAMwAAAAMAAAAiAAAAAAAAABMAAAADAAAASAAAAAAAAAA8AAAAAwAAAC4AAAADAAAASQAAAAMAAAA3AAAAAAAAACgAAAAAAAAARwAAAAMAAAA2AAAAAwAAACQAAAAAAAAAQAAAAAAAAAAvAAAAAAAAACYAAAADAAAAPgAAAAAAAAArAAAAAwAAAB0AAAADAAAAOgAAAAMAAAAqAAAAAwAAABoAAAADAAAAVAAAAAAAAABFAAAAAAAAADMAAAADAAAAUgAAAAMAAABAAAAAAAAAAC8AAAAAAAAATAAAAAMAAAA+AAAAAAAAACsAAAADAAAAYQAAAAAAAABZAAAAAwAAAEcAAAADAAAAYgAAAAMAAABUAAAAAAAAAEUAAAAAAAAAYAAAAAMAAABSAAAAAwAAAEAAAAAAAAAASwAAAAAAAABBAAAAAAAAADoAAAADAAAAPQAAAAAAAAA1AAAAAwAAACwAAAADAAAAMQAAAAMAAAApAAAAAwAAAB8AAAADAAAAXgAAAAAAAABWAAAAAAAAAEwAAAADAAAAUQAAAAMAAABLAAAAAAAAAEEAAAAAAAAAQgAAAAMAAAA9AAAAAAAAADUAAAADAAAAawAAAAAAAABoAAAAAwAAAGAAAAADAAAAZQAAAAMAAABeAAAAAAAAAFYAAAAAAAAAVQAAAAMAAABRAAAAAwAAAEsAAAAAAAAAOQAAAAAAAAA7AAAAAAAAAD8AAAADAAAASgAAAAAAAABOAAAAAwAAAE8AAAADAAAAUwAAAAMAAABcAAAAAwAAAF8AAAADAAAAJQAAAAAAAAAnAAAAAwAAAC0AAAADAAAANAAAAAAAAAA5AAAAAAAAADsAAAAAAAAARgAAAAMAAABKAAAAAAAAAE4AAAADAAAAGAAAAAAAAAAXAAAAAwAAABkAAAADAAAAIAAAAAMAAAAlAAAAAAAAACcAAAADAAAAMgAAAAMAAAA0AAAAAAAAADkAAAAAAAAALgAAAAAAAAA8AAAAAAAAAEgAAAADAAAAOAAAAAAAAABEAAAAAwAAAFAAAAADAAAAPwAAAAMAAABNAAAAAwAAAFoAAAADAAAAGwAAAAAAAAAoAAAAAwAAADcAAAADAAAAIwAAAAAAAAAuAAAAAAAAADwAAAAAAAAALQAAAAMAAAA4AAAAAAAAAEQAAAADAAAADgAAAAAAAAAUAAAAAwAAACQAAAADAAAAEQAAAAMAAAAbAAAAAAAAACgAAAADAAAAGQAAAAMAAAAjAAAAAAAAAC4AAAAAAAAARwAAAAAAAABZAAAAAAAAAGEAAAADAAAASQAAAAAAAABbAAAAAwAAAGcAAAADAAAASAAAAAMAAABYAAAAAwAAAGkAAAADAAAAMwAAAAAAAABFAAAAAwAAAFQAAAADAAAANgAAAAAAAABHAAAAAAAAAFkAAAAAAAAANwAAAAMAAABJAAAAAAAAAFsAAAADAAAAJgAAAAAAAAAvAAAAAwAAAEAAAAADAAAAIgAAAAMAAAAzAAAAAAAAAEUAAAADAAAAJAAAAAMAAAA2AAAAAAAAAEcAAAAAAAAAYAAAAAAAAABoAAAAAAAAAGsAAAADAAAAYgAAAAAAAABuAAAAAwAAAHMAAAADAAAAYQAAAAMAAABvAAAAAwAAAHcAAAADAAAATAAAAAAAAABWAAAAAwAAAF4AAAADAAAAUgAAAAAAAABgAAAAAAAAAGgAAAAAAAAAVAAAAAMAAABiAAAAAAAAAG4AAAADAAAAOgAAAAAAAABBAAAAAwAAAEsAAAADAAAAPgAAAAMAAABMAAAAAAAAAFYAAAADAAAAQAAAAAMAAABSAAAAAAAAAGAAAAAAAAAAVQAAAAAAAABXAAAAAAAAAFMAAAADAAAAZQAAAAAAAABmAAAAAwAAAGQAAAADAAAAawAAAAMAAABwAAAAAwAAAHIAAAADAAAAQgAAAAAAAABDAAAAAwAAAEYAAAADAAAAUQAAAAAAAABVAAAAAAAAAFcAAAAAAAAAXgAAAAMAAABlAAAAAAAAAGYAAAADAAAAMQAAAAAAAAAwAAAAAwAAADIAAAADAAAAPQAAAAMAAABCAAAAAAAAAEMAAAADAAAASwAAAAMAAABRAAAAAAAAAFUAAAAAAAAAXwAAAAAAAABcAAAAAAAAAFMAAAAAAAAATwAAAAAAAABOAAAAAAAAAEoAAAADAAAAPwAAAAEAAAA7AAAAAwAAADkAAAADAAAAbQAAAAAAAABsAAAAAAAAAGQAAAAFAAAAXQAAAAEAAABfAAAAAAAAAFwAAAAAAAAATQAAAAEAAABPAAAAAAAAAE4AAAAAAAAAdQAAAAQAAAB2AAAABQAAAHIAAAAFAAAAagAAAAEAAABtAAAAAAAAAGwAAAAAAAAAWgAAAAEAAABdAAAAAQAAAF8AAAAAAAAAWgAAAAAAAABNAAAAAAAAAD8AAAAAAAAAUAAAAAAAAABEAAAAAAAAADgAAAADAAAASAAAAAEAAAA8AAAAAwAAAC4AAAADAAAAagAAAAAAAABdAAAAAAAAAE8AAAAFAAAAYwAAAAEAAABaAAAAAAAAAE0AAAAAAAAAWAAAAAEAAABQAAAAAAAAAEQAAAAAAAAAdQAAAAMAAABtAAAABQAAAF8AAAAFAAAAcQAAAAEAAABqAAAAAAAAAF0AAAAAAAAAaQAAAAEAAABjAAAAAQAAAFoAAAAAAAAAaQAAAAAAAABYAAAAAAAAAEgAAAAAAAAAZwAAAAAAAABbAAAAAAAAAEkAAAADAAAAYQAAAAEAAABZAAAAAwAAAEcAAAADAAAAcQAAAAAAAABjAAAAAAAAAFAAAAAFAAAAdAAAAAEAAABpAAAAAAAAAFgAAAAAAAAAbwAAAAEAAABnAAAAAAAAAFsAAAAAAAAAdQAAAAIAAABqAAAABQAAAFoAAAAFAAAAeQAAAAEAAABxAAAAAAAAAGMAAAAAAAAAdwAAAAEAAAB0AAAAAQAAAGkAAAAAAAAAdwAAAAAAAABvAAAAAAAAAGEAAAAAAAAAcwAAAAAAAABuAAAAAAAAAGIAAAADAAAAawAAAAEAAABoAAAAAwAAAGAAAAADAAAAeQAAAAAAAAB0AAAAAAAAAGcAAAAFAAAAeAAAAAEAAAB3AAAAAAAAAG8AAAAAAAAAcAAAAAEAAABzAAAAAAAAAG4AAAAAAAAAdQAAAAEAAABxAAAABQAAAGkAAAAFAAAAdgAAAAEAAAB5AAAAAAAAAHQAAAAAAAAAcgAAAAEAAAB4AAAAAQAAAHcAAAAAAAAAcgAAAAAAAABwAAAAAAAAAGsAAAAAAAAAZAAAAAAAAABmAAAAAAAAAGUAAAADAAAAUwAAAAEAAABXAAAAAwAAAFUAAAADAAAAdgAAAAAAAAB4AAAAAAAAAHMAAAAFAAAAbAAAAAEAAAByAAAAAAAAAHAAAAAAAAAAXAAAAAEAAABkAAAAAAAAAGYAAAAAAAAAdQAAAAAAAAB5AAAABQAAAHcAAAAFAAAAbQAAAAEAAAB2AAAAAAAAAHgAAAAAAAAAXwAAAAEAAABsAAAAAQAAAHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAGAAAAAgAAAAUAAAABAAAABAAAAAAAAAAAAAAABQAAAAMAAAABAAAABgAAAAQAAAACAAAAAAAAAH6iBfbytuk/Gq6akm/58z/Xrm0Liez0P5doSdOpSwRAWs602ULg8D/dT7Rcbo/1v1N1RQHFNOM/g9Snx7HW3L8HWsP8Q3jfP6VwOLosutk/9rjk1YQcxj+gnmKMsNn6P/HDeuPFY+M/YHwDjqKhB0Ci19/fCVrbP4UxKkDWOP6/pvljWa09tL9wi7wrQXjnv/Z6yLImkM2/3yTlOzY14D+m+WNZrT20PzwKVQnrQwNA9nrIsiaQzT/g40rFrRQFwPa45NWEHMa/kbslHEZq97/xw3rjxWPjv4cLC2SMBci/otff3wla27+rKF5oIAv0P1N1RQHFNOO/iDJPGyWHBUAHWsP8Q3jfvwQf/by16gXAfqIF9vK26b8XrO0Vh0r+v9eubQuJ7PS/BxLrA0ZZ479azrTZQuDwv1MK1EuItPw/yscgV9Z6FkAwHBR2WjQMQJNRzXsQ5vY/GlUHVJYKF0DONuFv2lMNQNCGZ28QJfk/0WUwoIL36D8ggDOMQuATQNqMOeAy/wZAWFYOYM+M2z/LWC4uH3oSQDE+LyTsMgRAkJzhRGWFGEDd4soovCQQQKqk0DJMEP8/rGmNdwOLBUAW2X/9xCbjP4hu3dcqJhNAzuYItRvdB0CgzW3zJW/sPxotm/Y2TxRAQAk9XmdDDEC1Kx9MKgT3P1M+NctcghZAFVqcLlb0C0Bgzd3sB2b2P77mZDPUWhZAFROHJpUGCEDAfma5CxXtPz1DWq/zYxRAmhYY5824F0DOuQKWSbAOQNCMqrvu3fs/L6DR22K2wT9nAAxPBU8RQGiN6mW43AFAZhu25b633D8c1YgmzowSQNM25BRKWARArGS08/lNxD+LFssHwmMRQLC5aNcxBgJABL9HT0WRF0CjCmJmOGEOQHsuaVzMP/s/TWJCaGGwBUCeu1PAPLzjP9nqN9DZOBNAKE4JcydbCkCGtbd1qjPzP8dgm9U8jhVAtPeKTkVwDkCeCLss5l37P401XMPLmBdAFd29VMVQDUBg0yA55h75Pz6odcYLCRdApBM4rBrkAkDyAVWgQxbRP4XDMnK20hFAymLlF7EmzD8GUgo9XBHlP3lbK7T9COc/k+OhPthhy7+YGEpnrOvCPzBFhLs15u4/epbqB6H4uz9IuuLF5svev6lzLKY31es/CaQ0envF5z8ZY0xlUADXv7zaz7HYEuI/CfbK1sn16T8uAQfWwxLWPzKn/YuFN94/5KdbC1AFu793fyCSnlfvPzK2y4doAMY/NRg5t1/X6b/shq4QJaHDP5yNIAKPOeI/vpn7BSE30r/X4YQrO6nrv78Ziv/Thto/DqJ1Y6+y5z9l51NaxFrlv8QlA65HOLS/86dxiEc96z+Hj0+LFjneP6LzBZ8LTc2/DaJ1Y6+y579l51NaxFrlP8QlA65HOLQ/8qdxiEc967+Jj0+LFjnev6LzBZ8LTc0/1qdbC1AFuz93fyCSnlfvvzK2y4doAMa/NRg5t1/X6T/vhq4QJaHDv5yNIAKPOeK/wJn7BSE30j/W4YQrO6nrP78Ziv/Thtq/CaQ0envF578XY0xlUADXP7zaz7HYEuK/CvbK1sn16b8rAQfWwxLWvzKn/YuFN96/zWLlF7EmzL8GUgo9XBHlv3lbK7T9COe/kOOhPthhyz+cGEpnrOvCvzBFhLs15u6/c5bqB6H4u79IuuLF5sveP6lzLKY31eu/AQAAAP////8HAAAA/////zEAAAD/////VwEAAP////9hCQAA/////6dBAAD/////kcsBAP/////3kAwA/////8H2VwAAAAAAAAAAAAAAAAACAAAA/////w4AAAD/////YgAAAP////+uAgAA/////8ISAAD/////ToMAAP////8ilwMA/////+4hGQD/////gu2vAAAAAAAAAAAAAAAAAAAAAAACAAAA//////////8BAAAAAwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////AgAAAP//////////AQAAAAAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD/////////////////////AQAAAP///////////////wIAAAD///////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP///////////////////////////////wIAAAD///////////////8BAAAA/////////////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAABAAAA//////////8CAAAA//////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAAAQAAAP//////////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAAAAAAIAAAABAAAAAQAAAAIAAAACAAAAAAAAAAUAAAAFAAAAAAAAAAIAAAACAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAEAAAACAAAAAgAAAAIAAAAAAAAABQAAAAYAAAAAAAAAAgAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAACAAAAAQAAAAMAAAACAAAAAgAAAAAAAAAFAAAABwAAAAAAAAACAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAIAAAABAAAABAAAAAIAAAACAAAAAAAAAAUAAAAIAAAAAAAAAAIAAAACAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAAAAAAABQAAAAkAAAAAAAAAAgAAAAIAAAADAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAIAAAAAAAAAAwAAAA4AAAACAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAgAAAAMAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAgAAAAAAAAADAAAACgAAAAIAAAAAAAAAAgAAAAMAAAABAAAAAAAAAAIAAAACAAAAAwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAACAAAAAAAAAAMAAAALAAAAAgAAAAAAAAACAAAAAwAAAAIAAAAAAAAAAgAAAAIAAAADAAAACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAgAAAAIAAAAAAAAAAwAAAAwAAAACAAAAAAAAAAIAAAADAAAAAwAAAAAAAAACAAAAAgAAAAMAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAACAAAAAgAAAAAAAAADAAAADQAAAAIAAAAAAAAAAgAAAAMAAAAEAAAAAAAAAAIAAAACAAAAAwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAACAAAAAAAAAAMAAAAGAAAAAgAAAAAAAAACAAAAAwAAAA8AAAAAAAAAAgAAAAIAAAADAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAIAAAAAAAAAAwAAAAcAAAACAAAAAAAAAAIAAAADAAAAEAAAAAAAAAACAAAAAgAAAAMAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAACAAAAAgAAAAAAAAADAAAACAAAAAIAAAAAAAAAAgAAAAMAAAARAAAAAAAAAAIAAAACAAAAAwAAAA0AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAACAAAAAAAAAAMAAAAJAAAAAgAAAAAAAAACAAAAAwAAABIAAAAAAAAAAgAAAAIAAAADAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAgAAAAIAAAAAAAAAAwAAAAUAAAACAAAAAAAAAAIAAAADAAAAEwAAAAAAAAACAAAAAgAAAAMAAAAPAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACAAAAAAAAAAIAAAABAAAAEwAAAAIAAAACAAAAAAAAAAUAAAAKAAAAAAAAAAIAAAACAAAAAwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAIAAAAAAAAAAgAAAAEAAAAPAAAAAgAAAAIAAAAAAAAABQAAAAsAAAAAAAAAAgAAAAIAAAADAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAgAAAAAAAAACAAAAAQAAABAAAAACAAAAAgAAAAAAAAAFAAAADAAAAAAAAAACAAAAAgAAAAMAAAASAAAAAAAAAAAAAAAAAAAAAAAAABMAAAACAAAAAAAAAAIAAAABAAAAEQAAAAIAAAACAAAAAAAAAAUAAAANAAAAAAAAAAIAAAACAAAAAwAAABMAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAIAAAAAAAAAAgAAAAEAAAASAAAAAgAAAAIAAAAAAAAABQAAAA4AAAAAAAAAAgAAAAIAAAADAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAEAAAACAAAAAQAAAAAAAAACAAAAAAAAAAUAAAAEAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAQAAAAAAAAABQAAAAAAAAACAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAEAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAQAAAAAAAAABQAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAA6B6FaUp9QQTPXMuL4myJBraiDfBwx9UBYJseitzTIQOL5if9jqZtAnXX+Z+ycb0C3pucbhRBCQG8wJBYqpRRAlWbDCzCY5z/eFWBUEve6P/+qo4Q50Y4/D9YM3iCcYT8fcA2QJSA0P4ADxu0qAAc/BNcGolVJ2j5d9FACqwquPh9z7MthtI9CSUSYJke/YUJQ/64OyjU0Qpi0+HCmFQdCm3GfIVdh2kHsJ11kAyauQYC3UDFJOoFBSJsFV1OwU0FK5fcxX4AmQWhy/zZIt/lACqaCPsBjzUDbdUNIScugQMYQlVJ4MXNANiuq8GTvRUDxTXnulxEZQFZ8QX5kpuw/qmG/JwYFlEAluh3Q6DB+QKn4vyNq0GZAKOXekas+UUB8xabXXhI6QG63C2pLtSNAdDBtyNfLDUDyOcu67ID2P0rCMvRXAeE/Ki2TSVyzyT9Dk+8Sz2uzP5J+w5ARWp0/NQAoOiMuhj9YnP+RyMJwPxgW7TvQVFk/KgsLYF0kQz9g5dAC6IwzQcgHPVvDex1B1XjppodHBkHJq3OMM9fwQNvcmJ7wddlAInGPpQs/w0BRobq5EBmtQJZ2ai7n+ZVAtv2G5E+bgECG+gIfKBlpQK5f8jdI91JAL39sL/WpPEB8rGxhDqklQK6yUf43XhBAxL9y/tK8+D86XyZpgrHiPwAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAP////8AAAAAAAAAAAAAAAABAAAAAAAAAAAAAAD/////AAAAAAAAAAABAAAAAQAAAAAAAAAAAAAA/////wAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAP////8FAAAABQAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAEAAAAAAAAABQAAAAEAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAQABAAABAQAAAAAAAQAAAAEAAAABAAEAAAAAAAAAAAAAAAAAAAAAquJYWJZl+D9jaeZNtj/zPwwdI9KqaeO/qGefXwdHdz+q4lhYlmX4P+OrlPMN3PI/DB0j0qpp47+7SQLV4VIEQKriWFiWZfg/r2kma3tz8T82eQmLqNIGwMRIWXMqSvo/fcCszPux9j+jara6ozTwP6hnn18HR3c/MSoKLequ8r+SabgA2nj0P7jBLbDOHO8/1Ym/ICfH4T+6lxjvlFXHv73m373LRPU/0vXyDVxo7T+ToKRHJXMAQF/33578aPE/pAyy64tD9T8+U/hCvyruPwxv8Y7YYwLAuXYr8NAiCEB4+LDK0Sn0P1Qeuy4j+eo/OMx50n7K7L+TrGB/nyf8v5ehC2fbYPM/aXMKexiT6z8mFRIMjg/zP7yUVwGGBNw/E6opHERf8z/z0wR2g9DqPw4pBpcOhvu/NbA29uWAA8DMaTExyXzyP02biiQ+Ruk/S8jz2/FKBEB1pzZnpbb9P7pQU4wLfPI//7ZcQXeG6D9CqEQvAYoIwDB2VB6sSgRAVyv8H5We8T+EHWF8XNPmPzB2wT8Nrrg/SEi+cX+w4L8of+GtdSDxP1sjk5AdouU/6ZjOVru13r8K0obqI6bxvwVbdNXyhfA/w5GG024n5z+rwmtMzP8BwLw9pSX49QXABe/2uQxP8D+b6wCzCvXkP7uGT87fK+Q/pz/JWw4coj+qoBf2J0nwP/yE3PUo0+I/vFJeHcaC+D96luSIqvntP/bf8sHUYu8/gZNN41mL4z9bhOqVOF4FwO6lmAh1hQhAbCVxbdhk7z+1C8NdDcfiPwG36x/0OQBAx0WJ76c2+D9nlSHXANfuP2HlfZ3gqOE/EwnVlVPg9r96+oHzEH//v5bXzdT1Auw/DM3GwLsA4D9p/8uoKcr+v+U9x5DQVAPAehjSdghb7D9sc1IetODgP8MVwwB1pu6/azPk6OGe978W8t/TUc3rP+0QMvYfP+A/RsG/QpSE8D+l3uwScxzgPwQaifgujuw/k1Vti1I43z8MAwLnSh0GQH5nYnwwZgJAiGUzWC5s6j8WyyI/BbLgPw4iUapGeQJAB3W+imnp/j9BLWR4ssrpP2t+gG5Pstk/cpBsfm6DCMCOpU9dOZsFQEv8nFypHeo/ehJ6i+6S2D9jqlGEmarLv7STC5TRiOa/bC+x8WZD6D9H3yUkWpDZP8gZvmCMuQLAreY19/eRBsCoPOc8UzzpP6KI/QV+y9g/t/MoboyWzT+Hv5q3Zu3Mvy2xROCT4uY/9gQitMMg1T9abAqhWMDkv1oLTavoUfG/PMUJP9CD5j+fHRX3t6fSPz7W2gk6bvs/WRnuHwqN9D8YFturGCTmP1EZczv0b9I/5t4exabB5D/1ESLh5fTEP9X2z6SYweQ/6lv3I2zT0D9zkRGNUNMAQKoSvc4EIfs/Xggt8wQI5T+mJHHg/w/SP4lhT/9t8vQ/DrZ/DbwH7D+XlhbYZrjkP34LIpFt6c4/lwfp8fLX9L+j96CTTf76v3WdNhEv9uM/d8c3o4lV0D/vFdCHVcsFwAHeDq0F1QhApbYqcZiN5D9KoilqByXLPwX0/diA0vq/0fo0GxnxAMBbaTkvlCzjP/RrFrWXrMs/UYTrky7jA0DB9f4FiZYAQEGAk/3QzeE/r/TeqE8t0D/OqjlsnPbvvz8RKU8JOfW/smSEbK/O4T8MzuyPm3DDP/rFtctq9gZAfb1EVEaSA0Dts5dVInnhP18SFMc79MM/7y34cw6LAMDFrRJsZO0DwC2KLvLSYuA/hx5wcUHewz+49SnK/4ruPyeS0PX9a+E/ZxaaLvvZ3z8WPu5T2QS8Pygo4RIvMqa/BJ0Kqsd0279cKW4ay8jdP3b05bmZ364/10/qtdxk2r+Bcz6CDMvpv54qOw+Amdw/qLV71pW7sT/YKc80nIPUP8OfIaBJ77G/LyTuD1un2z+diYu8efWzP1wU7ACkfwjAZroyPL1yBkAmv3lKJJbbPysKSE4W+p0/dIgqY79TA8ATLTOQ3tsGwJ2zweD/Xdg/XO/jXeFUaL8VW2qLFKfov1cA9Aa6XfK/tIa7YGgI2T+f3hu/sxqPv2nXdPpf3Pc/jkw8Jbda8j+tT/z8tGPVP1yBHpJd35k/KYvYOy1s8j/yz+kCQjPrP9+agH7x59g/PZfJ9aBhpr/rDKzvYBb+PwtkiaGCt/c/vb1mVr+f1T/JIHwHc8Govw7aeF6+9vG/Xv7kD6fp979isYioQYHVP7AIQZuSFrG/3z1AdUTnAUDN3XY9O7f9P0AdQ9ljYNQ/dJANJPTOrb8kLECUiiPlP4yF7UgmStA/9xGmXxCG1T9qZzix4W2zv2SGJRJVrPe/Fh9a2M/B/b8IexzFCoPSP9y1QFD2bLe/Q86cWLJe/b+mOOfYm78BwOTjkPAGE9E/8aPCUKu/ub9pPZyLCiUGwBA7Mev/BQlALOmrlRi+0j+AMJ/dKULBv7iLtL6a6QRAEMDV/yajAUDa62dE3crJP1P70RgBUbq/38hVnR6esT/s1tG10Z/Ov/zLwalHPss/dTS9NKTXx78nMcRzCIEHQAabxDsAmQRA0tyLK3gSyT+Aui7nOhDGv5Gs58z3WgHATN3forJuBMCAui7nOhDGP9Lciyt4Esm/WAJyHQ4c7z8UP5HFIs3iP3U0vTSk18c//MvBqUc+y7+cvv8HLg/Kvy1I/mHsI+K/U/vRGAFRuj/a62dE3crJv8p+WV8KlQjAuQ/nOP43B0CAMJ/dKULBPyzpq5UYvtK/ZoU+VoLh4L9etLlRUfvtv/GjwlCrv7k/5OOQ8AYT0b9DfT9FhufXPwUX8hJp+4u/3LVAUPZstz8IexzFCoPSv9+L609E5fQ/q9Fz7X2J7T9qZzix4W2zP/cRpl8QhtW/vtNilqGX+j8MOy7QJoL0P3SQDST0zq0/QB1D2WNg1L8IIjSvGNkDwGB8Jou2GAfAsAhBm5IWsT9isYioQYHVvyS9D3zb6uy/gnwRa7uM9L/JIHwHc8GoP729Zla/n9W/CsAHJZwmAEDEW6OYT1r6Pz2XyfWgYaY/35qAfvHn2L83Tdy4lS30vxf2/gZ0jPq/XIEekl3fmb+tT/z8tGPVvybPr2zJ1/+/K7mJ0ypVAsCf3hu/sxqPPwCGu2BoCNm/5oITrpZn+r+UDUyDP+n/v1zv413hVGg/nbPB4P9d2L9MlmkxNvgCQMtZlKE85v8/KwpIThb6nb8mv3lKJJbbv8+SZsTvOOc/pQCIIOYw0j+diYu8efWzvy8k7g9bp9u/kxYDa+pKtD9XlYvA8HnVv6i1e9aVu7G/nio7D4CZ3L/WR6rNh5EGwCkgQweBkghAdvTluZnfrr9cKW4ay8jdvxbjhr1f1QVAR5C0MzivAkAWPu5T2QS8v2cWmi772d+/cKj4lzLJCEBx2QJfYrMFQIcecHFB3sO/LYou8tJi4L+jr7lhO38BwIcI0Nb7xgTAXxIUxzv0w7/ts5dVInnhv0T+l8DZLfE/MP3FoFvS5D8MzuyPm3DDv7JkhGyvzuG/tzhzRIRc0b9Ovv3/0z7mv6/03qhPLdC/m4CT/dDN4b9dwjU5VCQBQBBJX1ntCv0/9GsWtZesy79baTkvlCzjv1mjYgEz++S/oW6KnOQW8b9KoilqByXLv6W2KnGYjeS/SmaKz3Vx9z+BZB5yxGHwP3fHN6OJVdC/dZ02ES/2478PuaBjLrXaP4/JU81pPaO/fgsikW3pzr+XlhbYZrjkv4tSn7YDbP0/f2LnFKlF9z+mJHHg/w/Sv14ILfMECOW/mfg4qYhR/b+OP+RQDCACwOpb9yNs09C/1fbPpJjB5L9pN2WOVZ3wv3hHy9nxIve/URlzO/Rv0r8YFturGCTmv1d1/KKR8QPA8gsy9qzSB8CfHRX3t6fSvzzFCT/Qg+a/EYStnrzV9r/2QJqI7Lb9v/YEIrTDINW/LbFE4JPi5r/7kQEs5fEDQHunnf4GeQBAooj9BX7L2L+oPOc8Uzzpv+ydYY2SSAfAL4HK6CRTB0BH3yUkWpDZv2wvsfFmQ+i/Ik0Yzruh6T8fM3LoGoDUP3oSeovukti/S/ycXKkd6r9rEv+7UWcHQCRIQe/GfwNAa36Abk+y2b9BLWR4ssrpv9KT87qa0bM/FTyktw823L8WyyI/BbLgv4hlM1gubOq/DizMp9Ki6r8b5ckdjVrzv5NVbYtSON+/BBqJ+C6O7L/dUBFqgyXYv00Wh18r7+q/7RAy9h8/4L8W8t/TUc3rv4RM5DKx3wDAfvWIj94aBcBsc1IetODgv3oY0nYIW+y/oGcTFF54AUDkJqS/FKX6PwzNxsC7AOC/ltfN1PUC7L+5Wrz/zHnzP6688w2rNOc/YeV9neCo4b9nlSHXANfuvw9RsxKjY/s/1V8GteXE8j+1C8NdDcfiv2wlcW3YZO+/IOywaA7Q8b9bFP+4Tg36v4GTTeNZi+O/9t/ywdRi77+tRc3yFR7eP2bkcHXJkLO//ITc9SjT4r+qoBf2J0nwv2YHKoswwfm/iQcLspCjAcCb6wCzCvXkvwXv9rkMT/C/YkuwYAMXBMApCNUai9kIwMORhtNuJ+e/BVt01fKF8L+ZqWEfvIjsP6h693QZYNk/WyOTkB2i5b8of+GtdSDxvwpaaulDSwVADMQAX+lOAECEHWF8XNPmv1cr/B+VnvG/XyFG6opcCMD/mtR32/UEQP+2XEF3hui/ulBTjAt88r/imfCfRP+yP9zbvtc8XeO/TZuKJD5G6b/MaTExyXzyvxiTQeElXOO/rbJRQVGN9L/z0wR2g9DqvxOqKRxEX/O/FDGCEei99j9x8zV4VYTmP2lzCnsYk+u/l6ELZ9tg878pRXacaDT/v3k6GZRqoQXAVB67LiP56r94+LDK0Sn0vwO6pZ9b7wFAvK0nKVcc9j8+U/hCvyruv6QMsuuLQ/W/FPhKFYv46j8MyxaDTOW/v9L18g1caO2/vebfvctE9b/7GD8ZrF3xv3gx1AR9bQDAuMEtsM4c77+SabgA2nj0v5xKFIwxsATArKNSBaKsB0Cjara6ozTwv33ArMz7sfa/dF2U0FcWCcDxL357DJX/P69pJmt7c/G/quJYWJZl+L/YntVJlnrSP4sRLzXM+fe/46uU8w3c8r+q4lhYlmX4v85lu5+QRwRAsI0H/WU8479jaeZNtj/zv6riWFiWZfi/sI0H/WU847/OZbufkEcEQHAoPUBrnss/9exKzDtFtT88wM8kax+gP9OqeKeAYog/MW0ItiZvcj+ph+smvt5bP2lCaV5dEUU/StaUmQDaLz+kK9y22BMYP0O3whZuMwI/IIbgZGWE6z7UkjYaEM3UPuezxwa9cr8+LybxRMnFpz6E1N8DbPiRPsYjySMvK3s+//////8fAAj//////zMQCP////9/MiAI/////28yMAj/////YzJACP///z9iMlAI////N2IyYAj///8zYjJwCP//vzNiMoAI//+rM2IykAj/f6szYjKgCP8PqzNiMrAI/wOrM2IywAi/A6szYjLQCJ8DqzNiMuAImQOrM2Iy8Aj//////z8PCP//////Kx8I/////38pLwj/////Pyk/CP////85KU8I////PzgpXwj///8POClvCP///w44KX8I//8fDjgpjwj//w8OOCmfCP9/DQ44Ka8I/w8NDjgpvwj/DQ0OOCnPCP8MDQ44Kd8IxwwNDjgp7wjEDA0OOCn/CAcAAAAHAAAAAQAAAAIAAAAEAAAAAwAAAAAAAAAAAAAABwAAAAMAAAABAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAAAAQAAAAMAAAAOAAAABgAAAAsAAAACAAAABwAAAAEAAAAYAAAABQAAAAoAAAABAAAABgAAAAAAAAAmAAAABwAAAAwAAAADAAAACAAAAAIAAAAxAAAACQAAAA4AAAAAAAAABQAAAAQAAAA6AAAACAAAAA0AAAAEAAAACQAAAAMAAAA/AAAACwAAAAYAAAAPAAAACgAAABAAAABIAAAADAAAAAcAAAAQAAAACwAAABEAAABTAAAACgAAAAUAAAATAAAADgAAAA8AAABhAAAADQAAAAgAAAARAAAADAAAABIAAABrAAAADgAAAAkAAAASAAAADQAAABMAAAB1AAAADwAAABMAAAARAAAAEgAAABAAAAAGAAAAAgAAAAMAAAAFAAAABAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAwAAAAEAAAAFAAAABAAAAAAAAAAAAAAABwAAAAUAAAADAAAABAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAYAAAAAAAAAAAAAABgtRFT7Ifk/GC1EVPsh+b8YLURU+yEJQBgtRFT7IQnAYWxnb3MuYwBoM05laWdoYm9yUm90YXRpb25zAGNvb3JkaWprLmMAX3VwQXA3Q2hlY2tlZABfdXBBcDdyQ2hlY2tlZABkaXJlY3RlZEVkZ2UuYwBkaXJlY3RlZEVkZ2VUb0JvdW5kYXJ5AGFkamFjZW50RmFjZURpclt0bXBGaWprLmZhY2VdW2ZpamsuZmFjZV0gPT0gS0kAZmFjZWlqay5jAF9mYWNlSWprUGVudFRvQ2VsbEJvdW5kYXJ5AGFkamFjZW50RmFjZURpcltjZW50ZXJJSksuZmFjZV1bZmFjZTJdID09IEtJAF9mYWNlSWprVG9DZWxsQm91bmRhcnkAaDNJbmRleC5jAGNvbXBhY3RDZWxscwBsYXRMbmdUb0NlbGwAY2VsbFRvQ2hpbGRQb3MAdmFsaWRhdGVDaGlsZFBvcwBsYXRMbmcuYwBjZWxsQXJlYVJhZHMyAHBvbHlnb24tPm5leHQgPT0gTlVMTABsaW5rZWRHZW8uYwBhZGROZXdMaW5rZWRQb2x5Z29uAG5leHQgIT0gTlVMTABsb29wICE9IE5VTEwAYWRkTmV3TGlua2VkTG9vcABwb2x5Z29uLT5maXJzdCA9PSBOVUxMAGFkZExpbmtlZExvb3AAY29vcmQgIT0gTlVMTABhZGRMaW5rZWRDb29yZABsb29wLT5maXJzdCA9PSBOVUxMAGlubmVyTG9vcHMgIT0gTlVMTABub3JtYWxpemVNdWx0aVBvbHlnb24AYmJveGVzICE9IE5VTEwAY2FuZGlkYXRlcyAhPSBOVUxMAGZpbmRQb2x5Z29uRm9ySG9sZQBjYW5kaWRhdGVCQm94ZXMgIT0gTlVMTAByZXZEaXIgIT0gSU5WQUxJRF9ESUdJVABsb2NhbGlqLmMAY2VsbFRvTG9jYWxJamsAYmFzZUNlbGwgIT0gb3JpZ2luQmFzZUNlbGwAIShvcmlnaW5PblBlbnQgJiYgaW5kZXhPblBlbnQpAGJhc2VDZWxsID09IG9yaWdpbkJhc2VDZWxsAGJhc2VDZWxsICE9IElOVkFMSURfQkFTRV9DRUxMAGxvY2FsSWprVG9DZWxsACFfaXNCYXNlQ2VsbFBlbnRhZ29uKGJhc2VDZWxsKQBiYXNlQ2VsbFJvdGF0aW9ucyA+PSAwAGdyaWRQYXRoQ2VsbHMAcG9seWZpbGwuYwBpdGVyU3RlcFBvbHlnb25Db21wYWN0ADAAdmVydGV4LmMAdmVydGV4Um90YXRpb25zAGNlbGxUb1ZlcnRleABncmFwaC0+YnVja2V0cyAhPSBOVUxMAHZlcnRleEdyYXBoLmMAaW5pdFZlcnRleEdyYXBoAG5vZGUgIT0gTlVMTABhZGRWZXJ0ZXhOb2Rl";var z="function"==typeof atob?atob:function(e){var t,n,r,i,s,o,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",A="",l=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=a.indexOf(e.charAt(l++))<<2|(i=a.indexOf(e.charAt(l++)))>>4,n=(15&i)<<4|(s=a.indexOf(e.charAt(l++)))>>2,r=(3&s)<<6|(o=a.indexOf(e.charAt(l++))),A+=String.fromCharCode(t),64!==s&&(A+=String.fromCharCode(n)),64!==o&&(A+=String.fromCharCode(r))}while(l=0){if((0|n)>13780509){if(0|(a=0|lt(15,A)))break;A=0|i[(l=A)>>2],l=0|i[l+4>>2]}else c=0|Zt(0|n,0|(a=((0|n)<0)<<31>>31),3,0),l=0|T(),a=0|Xt(0|n,0|a,1,0),a=0|Xt(0|(a=0|Zt(0|c,0|l,0|a,0|T())),0|T(),1,0),l=0|T(),i[A>>2]=a,i[A+4>>2]=l,A=a;if(cn(0|r,0,A<<3),0|s){cn(0|s,0,A<<2),a=0|D(e,t,n,r,s,A,l,0);break}(a=0|$t(A,4))?(c=0|D(e,t,n,r,a,A,l,0),Ht(a),a=c):a=13}else a=2}while(0);return M=o,0|a}function B(e,t,n,r,s){e|=0,t|=0,n|=0,r|=0,s|=0;var o,a,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0;if(a=M,M=M+16|0,g=a+8|0,i[(p=o=a)>>2]=e,i[p+4>>2]=t,(0|n)<0)return M=a,2;if(i[(A=r)>>2]=e,i[A+4>>2]=t,(A=!!(0|s))&&(i[s>>2]=0),0|je(e,t))return M=a,9;i[g>>2]=0;e:do{if((0|n)>=1)if(A)for(d=1,h=0,f=0,p=1,A=e;;){if(!(h|f)){if(0|(A=0|O(A,t,4,g,o)))break e;if(0|je(A=0|i[(t=o)>>2],t=0|i[t+4>>2])){A=9;break e}}if(0|(A=0|O(A,t,0|i[26800+(f<<2)>>2],g,o)))break e;if(A=0|i[(t=o)>>2],t=0|i[t+4>>2],i[(e=r+(d<<3)|0)>>2]=A,i[e+4>>2]=t,i[s+(d<<2)>>2]=p,l=(0|(e=h+1|0))==(0|p),u=6==(0|(c=f+1|0)),0|je(A,t)){A=9;break e}if((0|(p=p+(u&l&1)|0))>(0|n)){A=0;break}d=d+1|0,h=l?0:e,f=l?u?0:c:f}else for(d=1,h=0,f=0,p=1,A=e;;){if(!(h|f)){if(0|(A=0|O(A,t,4,g,o)))break e;if(0|je(A=0|i[(t=o)>>2],t=0|i[t+4>>2])){A=9;break e}}if(0|(A=0|O(A,t,0|i[26800+(f<<2)>>2],g,o)))break e;if(A=0|i[(t=o)>>2],t=0|i[t+4>>2],i[(e=r+(d<<3)|0)>>2]=A,i[e+4>>2]=t,l=(0|(e=h+1|0))==(0|p),u=6==(0|(c=f+1|0)),0|je(A,t)){A=9;break e}if((0|(p=p+(u&l&1)|0))>(0|n)){A=0;break}d=d+1|0,h=l?0:e,f=l?u?0:c:f}else A=0}while(0);return M=a,0|A}function D(e,t,n,r,s,o,a,A){n|=0,r|=0,s|=0,A|=0;var l,c,u,h=0,d=0,f=0,p=0,g=0,m=0,_=0;if(u=M,M=M+16|0,l=u+8|0,c=u,h=0|en(0|(e|=0),0|(t|=0),0|(o|=0),0|(a|=0)),f=0|T(),!(!(0|(_=0|i[(m=p=r+(h<<3)|0)>>2]))&!(0|(m=0|i[m+4>>2]))|(d=(0|_)==(0|e)&(0|m)==(0|t))))do{h=0|Jt(0|(h=0|Xt(0|h,0|f,1,0)),0|T(),0|o,0|a),f=0|T(),d=(0|(m=0|i[(_=p=r+(h<<3)|0)>>2]))==(0|e)&(0|(_=0|i[_+4>>2]))==(0|t)}while(!(!(0|m)&!(0|_)|d));if(h=s+(h<<2)|0,d&&(0|i[h>>2])<=(0|A))return M=u,0;if(i[(_=p)>>2]=e,i[_+4>>2]=t,i[h>>2]=A,(0|A)>=(0|n))return M=u,0;switch(d=A+1|0,i[l>>2]=0,0|(h=0|O(e,t,2,l,c))){case 9:g=9;break;case 0:(h=0|D(0|i[(h=c)>>2],0|i[h+4>>2],n,r,s,o,a,d))||(g=9)}e:do{if(9==(0|g)){switch(i[l>>2]=0,0|(h=0|O(e,t,3,l,c))){case 9:break;case 0:if(0|(h=0|D(0|i[(h=c)>>2],0|i[h+4>>2],n,r,s,o,a,d)))break e;break;default:break e}switch(i[l>>2]=0,0|(h=0|O(e,t,1,l,c))){case 9:break;case 0:if(0|(h=0|D(0|i[(h=c)>>2],0|i[h+4>>2],n,r,s,o,a,d)))break e;break;default:break e}switch(i[l>>2]=0,0|(h=0|O(e,t,5,l,c))){case 9:break;case 0:if(0|(h=0|D(0|i[(h=c)>>2],0|i[h+4>>2],n,r,s,o,a,d)))break e;break;default:break e}switch(i[l>>2]=0,0|(h=0|O(e,t,4,l,c))){case 9:break;case 0:if(0|(h=0|D(0|i[(h=c)>>2],0|i[h+4>>2],n,r,s,o,a,d)))break e;break;default:break e}switch(i[l>>2]=0,0|(h=0|O(e,t,6,l,c))){case 9:break;case 0:if(0|(h=0|D(0|i[(h=c)>>2],0|i[h+4>>2],n,r,s,o,a,d)))break e;break;default:break e}return M=u,0}}while(0);return M=u,0|h}function O(e,t,n,r,s){e|=0,t|=0,s|=0;var o,a,A=0,l=0,c=0,u=0,h=0,d=0,f=0;if((n|=0)>>>0>6)return 1;if(h=(0|i[(r|=0)>>2])%6|0,i[r>>2]=h,(0|h)>0){A=0;do{n=0|be(n),A=A+1|0}while((0|A)<(0|i[r>>2]))}if(h=0|nn(0|e,0|t,45),T(),(a=127&h)>>>0>121)return 5;o=0|Ve(e,t),A=0|nn(0|e,0|t,52),T(),A&=15;e:do{if(A){for(;;){if(c=0|nn(0|e,0|t,0|(l=3*(15-A|0)|0)),T(),7==(0|(c&=7))){t=5;break}if(f=!(0|Qe(A)),A=A+-1|0,d=0|rn(7,0,0|l),t&=~T(),e=0|rn(0|i[(f?432:16)+(28*c|0)+(n<<2)>>2],0,0|l)|e&~d,t|=l=0|T(),!(n=0|i[(f?640:224)+(28*c|0)+(n<<2)>>2])){n=0;break e}if(!A){u=8;break e}}return 0|t}u=8}while(0);8==(0|u)&&(e|=0|rn(0|(f=0|i[848+(28*a|0)+(n<<2)>>2]),0,45),t=T()|-1040385&t,n=0|i[4272+(28*a|0)+(n<<2)>>2],127&~f||(f=0|rn(0|i[848+(28*a|0)+20>>2],0,45),t=T()|-1040385&t,n=0|i[4272+(28*a|0)+20>>2],e=0|He(f|e,t),t=0|T(),i[r>>2]=1+(0|i[r>>2]))),c=0|nn(0|e,0|t,45),T(),c&=127;e:do{if(0|G(c)){t:do{if(1==(0|Ve(e,t))){if((0|a)!=(0|c)){if(0|H(c,0|i[7696+(28*a|0)>>2])){e=0|Xe(e,t),l=1,t=0|T();break}S(27795,26864,533,26872)}switch(0|o){case 3:e=0|He(e,t),t=0|T(),i[r>>2]=1+(0|i[r>>2]),l=0;break t;case 5:e=0|Xe(e,t),t=0|T(),i[r>>2]=5+(0|i[r>>2]),l=0;break t;case 0:return 9;default:return 1}}else l=0}while(0);if((0|n)>0){A=0;do{e=0|We(e,t),t=0|T(),A=A+1|0}while((0|A)!=(0|n))}if((0|a)!=(0|c)){if(!(0|z(c))){if(!!(0|l)|5!=(0|Ve(e,t)))break;i[r>>2]=1+(0|i[r>>2]);break}switch(127&h){case 8:case 118:break e}3!=(0|Ve(e,t))&&(i[r>>2]=1+(0|i[r>>2]))}}else if((0|n)>0){A=0;do{e=0|He(e,t),t=0|T(),A=A+1|0}while((0|A)!=(0|n))}}while(0);return i[r>>2]=((0|i[r>>2])+n|0)%6|0,i[(f=s)>>2]=e,i[f+4>>2]=t,0}function F(e,t,n,r){e|=0,t|=0,n|=0,r|=0;var s,o,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0;if(o=M,M=M+16|0,p=o+8|0,i[(f=s=o)>>2]=e,i[f+4>>2]=t,(0|n)<0)return M=o,2;if(!n)return i[(p=r)>>2]=e,i[p+4>>2]=t,M=o,0;i[p>>2]=0;e:do{if(0|je(e,t))e=9;else{a=0,f=e;do{if(0|(e=0|O(f,t,4,p,s)))break e;if(a=a+1|0,0|je(f=0|i[(t=s)>>2],t=0|i[t+4>>2])){e=9;break e}}while((0|a)<(0|n));i[(d=r)>>2]=f,i[d+4>>2]=t,d=n+-1|0,h=0,e=1;do{if(a=26800+(h<<2)|0,5==(0|h))for(l=0|i[a>>2],A=0,a=e;;){if(0|(e=0|O(0|i[(e=s)>>2],0|i[e+4>>2],l,p,s)))break e;if((0|A)!=(0|d)){if(c=0|i[(u=s)>>2],u=0|i[u+4>>2],i[(e=r+(a<<3)|0)>>2]=c,i[e+4>>2]=u,0|je(c,u)){e=9;break e}e=a+1|0}else e=a;if((0|(A=A+1|0))>=(0|n))break;a=e}else for(l=s,u=0|i[a>>2],c=0,a=e,A=0|i[l>>2],l=0|i[l+4>>2];;){if(0|(e=0|O(A,l,u,p,s)))break e;if(A=0|i[(l=s)>>2],l=0|i[l+4>>2],i[(e=r+(a<<3)|0)>>2]=A,i[e+4>>2]=l,e=a+1|0,0|je(A,l)){e=9;break e}if((0|(c=c+1|0))>=(0|n))break;a=e}h=h+1|0}while(h>>>0<6);e=(0|f)==(0|i[(e=s)>>2])&&(0|t)==(0|i[e+4>>2])?0:9}}while(0);return M=o,0|e}function U(e,t,n,r){n|=0,r|=0;var s,o,a,A=0,l=0;for(a=M,M=M+16|0,s=a,o=a+8|0,A=(A=!(0|je(e|=0,t|=0)))?1:2;;){if(i[o>>2]=0,!(0|O(e,t,A,o,s))&((0|i[(l=s)>>2])==(0|n)?(0|i[l+4>>2])==(0|r):0)){e=4;break}if((A=A+1|0)>>>0>=7){A=7,e=4;break}}return 4==(0|e)?(M=a,0|A):0}function j(e,t,n,r,o,a,A){t|=0,n|=0,r|=0,o|=0,a|=0,A|=0;var l,c,u,h,d,f,p,g,m,_,b=0,v=0,y=0,w=0,x=0,E=0,S=0,C=0,k=0,R=0,P=0,I=0,L=0,N=0,B=0,D=0,O=0,F=0,U=0;if(_=M,M=M+64|0,p=_+48|0,g=_+32|0,m=_+24|0,l=_+8|0,c=_,(0|(v=0|i[(e|=0)>>2]))<=0)return M=_,0;for(u=e+4|0,h=p+8|0,d=g+8|0,f=l+8|0,b=0,L=0;;){I=(y=0|i[u>>2])+(L<<4)|0,i[p>>2]=i[I>>2],i[p+4>>2]=i[I+4>>2],i[p+8>>2]=i[I+8>>2],i[p+12>>2]=i[I+12>>2],(0|L)==(v+-1|0)?(i[g>>2]=i[y>>2],i[g+4>>2]=i[y+4>>2],i[g+8>>2]=i[y+8>>2],i[g+12>>2]=i[y+12>>2]):(I=y+(L+1<<4)|0,i[g>>2]=i[I>>2],i[g+4>>2]=i[I+4>>2],i[g+8>>2]=i[I+8>>2],i[g+12>>2]=i[I+12>>2]),v=0|ne(p,g,r,m);e:do{if(v)y=0,b=v;else if(y=0|i[(v=m)>>2],(0|(v=0|i[v+4>>2]))>0|!(0|v)&y>>>0>0){P=0,I=0;t:for(;;){if(O=1/(+(y>>>0)+4294967296*+(0|v)),U=+s[p>>3],F=+((v=0|Qt(0|y,0|v,0|P,0|I))>>>0)+4294967296*+(0|T()),D=+(P>>>0)+4294967296*+(0|I),s[l>>3]=O*(U*F)+O*(+s[g>>3]*D),s[f>>3]=O*(+s[h>>3]*F)+O*(+s[d>>3]*D),0|(v=0|Ye(l,r,c))){b=v;break}E=0|en(0|(k=0|i[(R=c)>>2]),0|(R=0|i[R+4>>2]),0|t,0|n),w=0|T(),y=0|i[(x=v=A+(E<<3)|0)>>2],x=0|i[x+4>>2];n:do{if(!(0|y)&!(0|x))N=v,B=16;else for(S=0,C=0;;){if((0|S)>(0|n)|(0|S)==(0|n)&C>>>0>t>>>0){b=1;break t}if((0|y)==(0|k)&(0|x)==(0|R))break n;if(E=0|Jt(0|(v=0|Xt(0|E,0|w,1,0)),0|T(),0|t,0|n),w=0|T(),C=0|Xt(0|C,0|S,1,0),S=0|T(),!(0|(y=0|i[(x=v=A+(E<<3)|0)>>2]))&!(0|(x=0|i[x+4>>2]))){N=v,B=16;break}}}while(0);if(16!=(0|B)||(B=0,!(0|k)&!(0|R))||(i[(C=N)>>2]=k,i[C+4>>2]=R,C=a+(i[o>>2]<<3)|0,i[C>>2]=k,i[C+4>>2]=R,C=0|Xt(0|i[(C=o)>>2],0|i[C+4>>2],1,0),k=0|T(),i[(R=o)>>2]=C,i[R+4>>2]=k),P=0|Xt(0|P,0|I,1,0),I=0|T(),y=0|i[(v=m)>>2],!((0|(v=0|i[v+4>>2]))>(0|I)|(0|v)==(0|I)&y>>>0>P>>>0)){y=1;break e}}y=0}else y=1}while(0);if(L=L+1|0,!y){B=21;break}if((0|L)>=(0|(v=0|i[e>>2]))){b=0,B=21;break}}return 21==(0|B)?(M=_,0|b):0}function G(e){return(e|=0)>>>0>121?0|(e=0):0|(e=0|i[7696+(28*e|0)+16>>2])}function z(e){return 4==(0|(e|=0))|117==(0|e)|0}function V(e){return 0|i[11120+(216*(0|i[(e|=0)>>2])|0)+(72*(0|i[e+4>>2])|0)+(24*(0|i[e+8>>2])|0)+(i[e+12>>2]<<3)>>2]}function W(e){return 0|i[11120+(216*(0|i[(e|=0)>>2])|0)+(72*(0|i[e+4>>2])|0)+(24*(0|i[e+8>>2])|0)+(i[e+12>>2]<<3)+4>>2]}function H(e,t){return t|=0,(0|i[7696+(28*(e|=0)|0)+20>>2])==(0|t)?0|(t=1):0|(t=(0|i[7696+(28*e|0)+24>>2])==(0|t))}function $(e,t){return 0|i[848+(28*(e|=0)|0)+((t|=0)<<2)>>2]}function X(e,t){return t|=0,(0|i[848+(28*(e|=0)|0)>>2])==(0|t)?0|(t=0):(0|i[848+(28*e|0)+4>>2])==(0|t)?0|(t=1):(0|i[848+(28*e|0)+8>>2])==(0|t)?0|(t=2):(0|i[848+(28*e|0)+12>>2])==(0|t)?0|(t=3):(0|i[848+(28*e|0)+16>>2])==(0|t)?0|(t=4):(0|i[848+(28*e|0)+20>>2])==(0|t)?0|(t=5):0|((0|i[848+(28*e|0)+24>>2])==(0|t)?6:7)}function Q(e){var t,n,r;return t=(r=+s[16+(e|=0)>>3])-(n=+s[e+24>>3]),+(r>3]<+s[e+24>>3]|0}function q(e){return+(+s[(e|=0)>>3]-+s[e+8>>3])}function K(e,t){e|=0;var n,r,i=0;return(i=+s[(t|=0)>>3])>=+s[e+8>>3]&&i<=+s[e>>3]?(n=+s[e+16>>3],i=+s[e+24>>3],t=(r=+s[t+8>>3])>=i,e=r<=n&1,n>3]<+s[t+8>>3]||+s[e+8>>3]>+s[t>>3]?0|(A=0):(i=(l=+s[e+16>>3])<(u=+s[(n=e+24|0)>>3]),c=(a=+s[(A=t+16|0)>>3])<(o=+s[(r=t+24|0)>>3]),t=u-a>3],t)||(u=+ot(+s[n>>3],e))>+ot(+s[A>>3],t)?0|(c=0):0|(c=1))}function J(e,t){t|=0;var n,r,i,o,a,A=0,l=0,c=0,u=0;return+s[(e|=0)>>3]<+s[t>>3]||+s[e+8>>3]>+s[t+8>>3]?0|(A=0):(i=(o=+s[(A=e+16|0)>>3])<(l=+s[e+24>>3]),c=(u=+s[(n=t+16|0)>>3])<(a=+s[(r=t+24|0)>>3]),t=l-u>3],t)?0|(c=(u=+ot(+s[A>>3],e))>=+ot(+s[n>>3],t)):0|(c=0))}function ee(e,t){e|=0,t|=0;var n,r,o,a,A,l=0;o=M,M=M+176|0,i[(r=o)>>2]=4,l=+s[t>>3],s[r+8>>3]=l,a=+s[t+16>>3],s[r+16>>3]=a,s[r+24>>3]=l,l=+s[t+24>>3],s[r+32>>3]=l,A=+s[t+8>>3],s[r+40>>3]=A,s[r+48>>3]=l,s[r+56>>3]=A,s[r+64>>3]=a,n=96+(t=r+72|0)|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|n));ln(0|e,0|r,168),M=o}function te(e,t,n){e|=0,t|=0,n|=0;var r,a,c,u,h,d,f,p=0,g=0,m=0,_=0,v=0,w=0,x=0;d=M,M=M+288|0,h=d+264|0,_=d+96|0,g=(p=m=d)+96|0;do{i[p>>2]=0,p=p+4|0}while((0|p)<(0|g));return 0|(t=0|et(t,m))?(M=d,0|(w=t)):(Ze(m=0|i[(g=m)>>2],g=0|i[g+4>>2],h),Je(m,g,_),u=+at(h,_+8|0),s[h>>3]=+s[e>>3],s[(g=h+8|0)>>3]=+s[e+16>>3],s[_>>3]=+s[e+8>>3],s[(m=_+8|0)>>3]=+s[e+24>>3],a=+at(h,_),x=+s[g>>3]-+s[m>>3],c=+l(+x),f=+s[h>>3]-+s[_>>3],r=+l(+f),!(0==x|0==f)&&(x=+on(+c,+r),x=+b(+a*a/+an(+x/+an(+c,+r),3)/(u*(2.59807621135*u)*.8)),s[o>>3]=x,v=~~x>>>0,w=+l(x)>=1?x>0?~~+y(+A(x/4294967296),4294967295)>>>0:~~+b((x-+(~~x>>>0))/4294967296)>>>0:0,2146435072&~i[o+4>>2])?(_=!(0|v)&!(0|w),i[(t=n)>>2]=_?1:v,i[t+4>>2]=_?0:w,t=0):t=1,M=d,0|(w=t))}function ne(e,t,n,r){e|=0,t|=0,n|=0,r|=0;var a,c,u,h,d=0,f=0,p=0;h=M,M=M+288|0,c=h+264|0,u=h+96|0,a=(d=f=h)+96|0;do{i[d>>2]=0,d=d+4|0}while((0|d)<(0|a));return 0|(n=0|et(n,f))?(M=h,0|(r=n)):(Ze(d=0|i[(n=f)>>2],n=0|i[n+4>>2],c),Je(d,n,u),p=+at(c,u+8|0),p=+b(+ +at(e,t)/(2*p)),s[o>>3]=p,n=~~p>>>0,d=+l(p)>=1?p>0?~~+y(+A(p/4294967296),4294967295)>>>0:~~+b((p-+(~~p>>>0))/4294967296)>>>0:0,2146435072&~i[o+4>>2]?(f=!(0|n)&!(0|d),i[r>>2]=f?1:n,i[r+4>>2]=f?0:d,M=h,0|(r=0)):(M=h,0|(r=1)))}function re(e,t,n,r){t|=0,n|=0,r|=0,i[(e|=0)>>2]=t,i[e+4>>2]=n,i[e+8>>2]=r}function ie(e){var t,n=0,r=0,s=0,o=0,a=0;n=0|i[(e|=0)>>2],r=0|i[(t=e+4|0)>>2],(0|n)<0&&(r=r-n|0,i[t>>2]=r,i[(a=e+8|0)>>2]=(0|i[a>>2])-n,i[e>>2]=0,n=0),(0|r)<0?(n=n-r|0,i[e>>2]=n,o=(0|i[(a=e+8|0)>>2])-r|0,i[a>>2]=o,i[t>>2]=0,r=0):(a=o=e+8|0,o=0|i[o>>2]),(0|o)<0&&(n=n-o|0,i[e>>2]=n,r=r-o|0,i[t>>2]=r,i[a>>2]=0,o=0),(0|(s=(0|o)<(0|(s=(0|r)<(0|n)?r:n))?o:s))<=0||(i[e>>2]=n-s,i[t>>2]=r-s,i[a>>2]=o-s)}function se(e,t){var n,r;t|=0,r=0|i[8+(e|=0)>>2],n=+((0|i[e+4>>2])-r|0),s[t>>3]=+((0|i[e>>2])-r|0)-.5*n,s[t+8>>3]=.8660254037844386*n}function oe(e,t,n){e|=0,t|=0,i[(n|=0)>>2]=(0|i[t>>2])+(0|i[e>>2]),i[n+4>>2]=(0|i[t+4>>2])+(0|i[e+4>>2]),i[n+8>>2]=(0|i[t+8>>2])+(0|i[e+8>>2])}function ae(e,t,n){e|=0,t|=0,i[(n|=0)>>2]=(0|i[e>>2])-(0|i[t>>2]),i[n+4>>2]=(0|i[e+4>>2])-(0|i[t+4>>2]),i[n+8>>2]=(0|i[e+8>>2])-(0|i[t+8>>2])}function Ae(e,t){t|=0;var n,r=0;r=0|v(0|i[(e|=0)>>2],t),i[e>>2]=r,n=0|v(0|i[(r=e+4|0)>>2],t),i[r>>2]=n,t=0|v(0|i[(e=e+8|0)>>2],t),i[e>>2]=t}function le(e){var t,n,r=0,s=0,o=0,a=0,A=0;A=(0|(n=0|i[(e|=0)>>2]))<0,e=(e=(s=(0|(a=((t=(0|(o=(0|i[e+4>>2])-(A?n:0)|0))<0)?0-o|0:0)+((0|i[e+8>>2])-(A?n:0))|0))<0)?0:a)-((o=(0|(s=(0|e)<(0|(s=(0|(r=(t?0:o)-(s?a:0)|0))<(0|(a=(A?0:n)-(t?o:0)-(s?a:0)|0))?r:a))?e:s))>0)?s:0)|0,r=r-(o?s:0)|0;e:do{switch(a-(o?s:0)|0){case 0:switch(0|r){case 0:return 0|(0|e?1==(0|e)?1:7:0);case 1:return 0|(0|e?1==(0|e)?3:7:2);default:break e}case 1:switch(0|r){case 0:return 0|(0|e?1==(0|e)?5:7:4);case 1:if(e)break e;return 6;default:break e}}}while(0);return 7}function ce(e){var t,n,r=0,s=0,o=0,a=0,A=0,l=0,c=0;if(l=0|i[(n=8+(e|=0)|0)>>2],(t=(0|i[e>>2])-l|0)>>>0>715827881|(l=(0|i[(c=e+4|0)>>2])-l|0)>>>0>715827881){if(a=2147483647-t|0,A=-2147483648-t|0,(o=(0|t)>0)?(0|a)<(0|t):(0|A)>(0|t))return 1;if(s=t<<1,o?(2147483647-s|0)<(0|t):(-2147483648-s|0)>(0|t))return 1;if((0|l)>0?(2147483647-l|0)<(0|l):(-2147483648-l|0)>(0|l))return 1;if(r=3*t|0,s=l<<1,(o?(0|a)<(0|s):(0|A)>(0|s))||((0|t)>-1?(-2147483648|r)>=(0|l):(-2147483648^r)<(0|l)))return 1}else s=l<<1,r=3*t|0;return o=0|Vt(.14285714285714285*+(r-l|0)),i[e>>2]=o,a=0|Vt(.14285714285714285*+(s+t|0)),i[c>>2]=a,i[n>>2]=0,r=(s=(0|a)<(0|o))?o:a,(0|(s=s?a:o))<0&&((-2147483648==(0|s)||((0|r)>0?(2147483647-r|0)<(0|s):(-2147483648-r|0)>(0|s)))&&S(27795,26892,354,26903),((0|r)>-1?(-2147483648|r)>=(0|s):(-2147483648^r)<(0|s))&&S(27795,26892,354,26903)),r=a-o|0,(0|o)<0?(s=0-o|0,i[c>>2]=r,i[n>>2]=s,i[e>>2]=0,o=0):(r=a,s=0),(0|r)<0&&(o=o-r|0,i[e>>2]=o,s=s-r|0,i[n>>2]=s,i[c>>2]=0,r=0),A=o-s|0,a=r-s|0,(0|s)<0?(i[e>>2]=A,i[c>>2]=a,i[n>>2]=0,r=a,a=A,s=0):a=o,(0|(o=(0|s)<(0|(o=(0|r)<(0|a)?r:a))?s:o))<=0||(i[e>>2]=a-o,i[c>>2]=r-o,i[n>>2]=s-o),0}function ue(e){var t,n=0,r=0,s=0,o=0,a=0,A=0,l=0;if(o=0|i[(t=8+(e|=0)|0)>>2],(a=(0|i[e>>2])-o|0)>>>0>715827881|(o=(0|i[(A=e+4|0)>>2])-o|0)>>>0>715827881){if((r=(0|a)>0)?(2147483647-a|0)<(0|a):(-2147483648-a|0)>(0|a))return 1;if(n=a<<1,(s=(0|o)>0)?(2147483647-o|0)<(0|o):(-2147483648-o|0)>(0|o))return 1;if(l=o<<1,s?(2147483647-l|0)<(0|o):(-2147483648-l|0)>(0|o))return 1;if(r?(2147483647-n|0)<(0|o):(-2147483648-n|0)>(0|o))return 1;if(r=3*o|0,(0|o)>-1?(-2147483648|r)>=(0|a):(-2147483648^r)<(0|a))return 1}else r=3*o|0,n=a<<1;return s=0|Vt(.14285714285714285*+(n+o|0)),i[e>>2]=s,o=0|Vt(.14285714285714285*+(r-a|0)),i[A>>2]=o,i[t>>2]=0,n=(r=(0|o)<(0|s))?s:o,(0|(r=r?o:s))<0&&((-2147483648==(0|r)||((0|n)>0?(2147483647-n|0)<(0|r):(-2147483648-n|0)>(0|r)))&&S(27795,26892,402,26917),((0|n)>-1?(-2147483648|n)>=(0|r):(-2147483648^n)<(0|r))&&S(27795,26892,402,26917)),n=o-s|0,(0|s)<0?(r=0-s|0,i[A>>2]=n,i[t>>2]=r,i[e>>2]=0,s=0):(n=o,r=0),(0|n)<0&&(s=s-n|0,i[e>>2]=s,r=r-n|0,i[t>>2]=r,i[A>>2]=0,n=0),a=s-r|0,o=n-r|0,(0|r)<0?(i[e>>2]=a,i[A>>2]=o,i[t>>2]=0,n=o,o=a,r=0):o=s,(0|(s=(0|r)<(0|(s=(0|n)<(0|o)?n:o))?r:s))<=0||(i[e>>2]=o-s,i[A>>2]=n-s,i[t>>2]=r-s),0}function he(e){var t,n,r=0,s=0,o=0,a=0,A=0;s=0|i[(t=8+(e|=0)|0)>>2],o=0|Vt(.14285714285714285*+((3*(r=(0|i[e>>2])-s|0)|0)-(s=(0|i[(n=e+4|0)>>2])-s|0)|0)),i[e>>2]=o,r=0|Vt(.14285714285714285*+((s<<1)+r|0)),i[n>>2]=r,i[t>>2]=0,s=r-o|0,(0|o)<0?(A=0-o|0,i[n>>2]=s,i[t>>2]=A,i[e>>2]=0,r=s,o=0,s=A):s=0,(0|r)<0&&(o=o-r|0,i[e>>2]=o,s=s-r|0,i[t>>2]=s,i[n>>2]=0,r=0),A=o-s|0,a=r-s|0,(0|s)<0?(i[e>>2]=A,i[n>>2]=a,i[t>>2]=0,r=a,a=A,s=0):a=o,(0|(o=(0|s)<(0|(o=(0|r)<(0|a)?r:a))?s:o))<=0||(i[e>>2]=a-o,i[n>>2]=r-o,i[t>>2]=s-o)}function de(e){var t,n,r=0,s=0,o=0,a=0,A=0;s=0|i[(t=8+(e|=0)|0)>>2],o=0|Vt(.14285714285714285*+(((r=(0|i[e>>2])-s|0)<<1)+(s=(0|i[(n=e+4|0)>>2])-s|0)|0)),i[e>>2]=o,r=0|Vt(.14285714285714285*+((3*s|0)-r|0)),i[n>>2]=r,i[t>>2]=0,s=r-o|0,(0|o)<0?(A=0-o|0,i[n>>2]=s,i[t>>2]=A,i[e>>2]=0,r=s,o=0,s=A):s=0,(0|r)<0&&(o=o-r|0,i[e>>2]=o,s=s-r|0,i[t>>2]=s,i[n>>2]=0,r=0),A=o-s|0,a=r-s|0,(0|s)<0?(i[e>>2]=A,i[n>>2]=a,i[t>>2]=0,r=a,a=A,s=0):a=o,(0|(o=(0|s)<(0|(o=(0|r)<(0|a)?r:a))?s:o))<=0||(i[e>>2]=a-o,i[n>>2]=r-o,i[t>>2]=s-o)}function fe(e){var t,n,r,s=0,o=0,a=0,A=0;s=0|i[(e|=0)>>2],o=0|i[(n=e+4|0)>>2],a=0|i[(r=e+8|0)>>2],A=o+(3*s|0)|0,i[e>>2]=A,o=a+(3*o|0)|0,i[n>>2]=o,s=(3*a|0)+s|0,i[r>>2]=s,a=o-A|0,(0|A)<0?(s=s-A|0,i[n>>2]=a,i[r>>2]=s,i[e>>2]=0,o=a,a=0):a=A,(0|o)<0&&(a=a-o|0,i[e>>2]=a,s=s-o|0,i[r>>2]=s,i[n>>2]=0,o=0),t=a-s|0,A=o-s|0,(0|s)<0?(i[e>>2]=t,i[n>>2]=A,i[r>>2]=0,a=t,s=0):A=o,(0|(o=(0|s)<(0|(o=(0|A)<(0|a)?A:a))?s:o))<=0||(i[e>>2]=a-o,i[n>>2]=A-o,i[r>>2]=s-o)}function pe(e){var t,n,r,s=0,o=0,a=0,A=0;A=0|i[(e|=0)>>2],a=(3*(s=0|i[(n=e+4|0)>>2])|0)+A|0,A=(o=0|i[(r=e+8|0)>>2])+(3*A|0)|0,i[e>>2]=A,i[n>>2]=a,s=(3*o|0)+s|0,i[r>>2]=s,o=a-A|0,(0|A)<0?(s=s-A|0,i[n>>2]=o,i[r>>2]=s,i[e>>2]=0,A=0):o=a,(0|o)<0&&(A=A-o|0,i[e>>2]=A,s=s-o|0,i[r>>2]=s,i[n>>2]=0,o=0),t=A-s|0,a=o-s|0,(0|s)<0?(i[e>>2]=t,i[n>>2]=a,i[r>>2]=0,A=t,s=0):a=o,(0|(o=(0|s)<(0|(o=(0|a)<(0|A)?a:A))?s:o))<=0||(i[e>>2]=A-o,i[n>>2]=a-o,i[r>>2]=s-o)}function ge(e,t){e|=0;var n,r,s,o=0,a=0,A=0;((t|=0)-1|0)>>>0>=6||(A=(0|i[15440+(12*t|0)>>2])+(0|i[e>>2])|0,i[e>>2]=A,s=e+4|0,a=(0|i[15440+(12*t|0)+4>>2])+(0|i[s>>2])|0,i[s>>2]=a,r=e+8|0,t=(0|i[15440+(12*t|0)+8>>2])+(0|i[r>>2])|0,i[r>>2]=t,o=a-A|0,(0|A)<0?(t=t-A|0,i[s>>2]=o,i[r>>2]=t,i[e>>2]=0,a=0):(o=a,a=A),(0|o)<0&&(a=a-o|0,i[e>>2]=a,t=t-o|0,i[r>>2]=t,i[s>>2]=0,o=0),n=a-t|0,A=o-t|0,(0|t)<0?(i[e>>2]=n,i[s>>2]=A,i[r>>2]=0,a=n,t=0):A=o,(0|(o=(0|t)<(0|(o=(0|A)<(0|a)?A:a))?t:o))<=0||(i[e>>2]=a-o,i[s>>2]=A-o,i[r>>2]=t-o))}function me(e){var t,n,r,s=0,o=0,a=0,A=0;A=0|i[(e|=0)>>2],a=(s=0|i[(n=e+4|0)>>2])+A|0,A=(o=0|i[(r=e+8|0)>>2])+A|0,i[e>>2]=A,i[n>>2]=a,s=o+s|0,i[r>>2]=s,o=a-A|0,(0|A)<0?(s=s-A|0,i[n>>2]=o,i[r>>2]=s,i[e>>2]=0,a=0):(o=a,a=A),(0|o)<0&&(a=a-o|0,i[e>>2]=a,s=s-o|0,i[r>>2]=s,i[n>>2]=0,o=0),t=a-s|0,A=o-s|0,(0|s)<0?(i[e>>2]=t,i[n>>2]=A,i[r>>2]=0,a=t,s=0):A=o,(0|(o=(0|s)<(0|(o=(0|A)<(0|a)?A:a))?s:o))<=0||(i[e>>2]=a-o,i[n>>2]=A-o,i[r>>2]=s-o)}function _e(e){var t,n,r,s=0,o=0,a=0,A=0;s=0|i[(e|=0)>>2],a=0|i[(n=e+4|0)>>2],o=0|i[(r=e+8|0)>>2],A=a+s|0,i[e>>2]=A,a=o+a|0,i[n>>2]=a,s=o+s|0,i[r>>2]=s,o=a-A|0,(0|A)<0?(s=s-A|0,i[n>>2]=o,i[r>>2]=s,i[e>>2]=0,a=0):(o=a,a=A),(0|o)<0&&(a=a-o|0,i[e>>2]=a,s=s-o|0,i[r>>2]=s,i[n>>2]=0,o=0),t=a-s|0,A=o-s|0,(0|s)<0?(i[e>>2]=t,i[n>>2]=A,i[r>>2]=0,a=t,s=0):A=o,(0|(o=(0|s)<(0|(o=(0|A)<(0|a)?A:a))?s:o))<=0||(i[e>>2]=a-o,i[n>>2]=A-o,i[r>>2]=s-o)}function be(e){switch(0|(e|=0)){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1}return 0|e}function ve(e){switch(0|(e|=0)){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1}return 0|e}function ye(e){var t,n,r,s=0,o=0,a=0,A=0;s=0|i[(e|=0)>>2],o=0|i[(n=e+4|0)>>2],a=0|i[(r=e+8|0)>>2],A=o+(s<<1)|0,i[e>>2]=A,o=a+(o<<1)|0,i[n>>2]=o,s=(a<<1)+s|0,i[r>>2]=s,a=o-A|0,(0|A)<0?(s=s-A|0,i[n>>2]=a,i[r>>2]=s,i[e>>2]=0,o=a,a=0):a=A,(0|o)<0&&(a=a-o|0,i[e>>2]=a,s=s-o|0,i[r>>2]=s,i[n>>2]=0,o=0),t=a-s|0,A=o-s|0,(0|s)<0?(i[e>>2]=t,i[n>>2]=A,i[r>>2]=0,a=t,s=0):A=o,(0|(o=(0|s)<(0|(o=(0|A)<(0|a)?A:a))?s:o))<=0||(i[e>>2]=a-o,i[n>>2]=A-o,i[r>>2]=s-o)}function we(e){var t,n,r,s=0,o=0,a=0,A=0;A=0|i[(e|=0)>>2],a=((s=0|i[(n=e+4|0)>>2])<<1)+A|0,A=(o=0|i[(r=e+8|0)>>2])+(A<<1)|0,i[e>>2]=A,i[n>>2]=a,s=(o<<1)+s|0,i[r>>2]=s,o=a-A|0,(0|A)<0?(s=s-A|0,i[n>>2]=o,i[r>>2]=s,i[e>>2]=0,A=0):o=a,(0|o)<0&&(A=A-o|0,i[e>>2]=A,s=s-o|0,i[r>>2]=s,i[n>>2]=0,o=0),t=A-s|0,a=o-s|0,(0|s)<0?(i[e>>2]=t,i[n>>2]=a,i[r>>2]=0,A=t,s=0):a=o,(0|(o=(0|s)<(0|(o=(0|a)<(0|A)?a:A))?s:o))<=0||(i[e>>2]=A-o,i[n>>2]=a-o,i[r>>2]=s-o)}function xe(e,t){t|=0;var n,r,s,o=0,a=0,A=0;return s=(0|(r=(0|i[(e|=0)>>2])-(0|i[t>>2])|0))<0,n=(0|(a=(0|i[e+4>>2])-(0|i[t+4>>2])-(s?r:0)|0))<0,t=(t=(e=(0|(A=(s?0-r|0:0)+(0|i[e+8>>2])-(0|i[t+8>>2])+(n?0-a|0:0)|0))<0)?0:A)-((a=(0|(e=(0|t)<(0|(e=(0|(o=(n?0:a)-(e?A:0)|0))<(0|(A=(s?0:r)-(n?a:0)-(e?A:0)|0))?o:A))?t:e))>0)?e:0)|0,o=o-(a?e:0)|0,0|((0|(e=(0|(e=A-(a?e:0)|0))>-1?e:0-e|0))>(0|(t=(0|(o=(0|o)>-1?o:0-o|0))>(0|(t=(0|t)>-1?t:0-t|0))?o:t))?e:t)}function Ee(e){var t,n,r,s;n=(s=0|i[(t=8+(e|=0)|0)>>2])-(0|i[e>>2])|0,i[e>>2]=n,e=(0|i[(r=e+4|0)>>2])-s|0,i[r>>2]=e,i[t>>2]=0-(e+n)}function Te(e){var t,n,r=0,s=0,o=0,a=0,A=0;r=0-(s=0|i[(e|=0)>>2])|0,i[e>>2]=r,i[(t=e+8|0)>>2]=0,a=(o=0|i[(n=e+4|0)>>2])+s|0,(0|s)>0?(i[n>>2]=a,i[t>>2]=s,i[e>>2]=0,r=0,o=a):s=0,(0|o)<0?(A=r-o|0,i[e>>2]=A,s=s-o|0,i[t>>2]=s,i[n>>2]=0,a=A-s|0,r=0-s|0,(0|s)<0?(i[e>>2]=a,i[n>>2]=r,i[t>>2]=0,o=r,s=0):(o=0,a=A)):a=r,(0|(r=(0|s)<(0|(r=(0|o)<(0|a)?o:a))?s:r))<=0||(i[e>>2]=a-r,i[n>>2]=o-r,i[t>>2]=s-r)}function Se(e,t){var n=0;switch(n=0|nn(0|(e|=0),0|(t|=0),56),T(),7&n){case 0:case 7:return 0}return n=-2130706433&t|134217728,!0&268435456==(2013265920&t)?!0&16777216==(117440512&t)&!!(0|je(e,n))?0|(n=0):0|(n=0|De(e,n)):0|(n=0)}function Ce(e,t,n){n|=0;var r,s,o=0,a=0;return s=M,M=M+16|0,r=s,a=-2130706433&(t|=0)|134217728,!0&268435456==(2013265920&t)?(o=0|nn(0|(e|=0),0|t,56),T(),o=0|function(e,t,n){n|=0;var r,s=0,o=0;if(r=M,M=M+16|0,o=r,s=0|je(e|=0,t|=0),(n+-1|0)>>>0>5)return M=r,-1;if(1==(0|n)&(s=!!(0|s)))return M=r,-1;do{if(!(0|Lt(e,t,o))){if(s){s=(5+(0|i[26352+(n<<2)>>2])-(0|i[o>>2])|0)%5|0;break}s=(6+(0|i[26384+(n<<2)>>2])-(0|i[o>>2])|0)%6|0;break}s=-1}while(0);return M=r,0|(o=s)}(e,a,7&o),-1==(0|o)?(i[n>>2]=0,M=s,0|(a=6)):(0|Ke(e,a,r)&&S(27795,26932,282,26947),t=0|nn(0|e,0|t,52),T(),t&=15,0|je(e,a)?Re(r,t,o,2,n):Le(r,t,o,2,n),M=s,0|(a=0))):(M=s,0|(a=6))}function ke(e,t,n,r,o){t|=0,n|=0,r|=0,o|=0;var a,A=0,u=0;if(A=+function(e){var t,n;return n=+s[(e|=0)>>3],t=+s[e+8>>3],+ +c(+(n*n+t*t))}(e|=0),A<1e-16)return t=15600+(t<<4)|0,i[o>>2]=i[t>>2],i[o+4>>2]=i[t+4>>2],i[o+8>>2]=i[t+8>>2],void(i[o+12>>2]=i[t+12>>2]);if(u=+_(+ +s[e+8>>3],+ +s[e>>3]),(0|n)>0){e=0;do{A*=.37796447300922725,e=e+1|0}while((0|e)!=(0|n))}a=.3333333333333333*A,r?(n=!(0|Qe(n)),A=+m(.381966011250105*(n?a:.37796447300922725*a))):(A=+m(.381966011250105*A),0|Qe(n)&&(u=+it(u+.3334731722518321))),function(e,t,n,r){e|=0,t=+t,r|=0;var o=0,a=0,A=0,c=0;if((n=+n)<1e-16)return i[r>>2]=i[e>>2],i[r+4>>2]=i[e+4>>2],i[r+8>>2]=i[e+8>>2],void(i[r+12>>2]=i[e+12>>2]);a=t<0?t+6.283185307179586:t,a=t>=6.283185307179586?a+-6.283185307179586:a;do{if(!(a<1e-16)){if(o=+l(+(a+-3.141592653589793))<1e-16,t=+s[e>>3],o){t-=n,s[r>>3]=t,o=r;break}if(A=+h(+n),n=+d(+n),t=A*+d(+t)+ +h(+a)*(n*+h(+t)),t=+g(+((t=t>1?1:t)<-1?-1:t)),s[r>>3]=t,+l(+(t+-1.5707963267948966))<1e-16)return s[r>>3]=1.5707963267948966,void(s[r+8>>3]=0);if(+l(+(t+1.5707963267948966))<1e-16)return s[r>>3]=-1.5707963267948966,void(s[r+8>>3]=0);if(c=1/+h(+t),a=n*+d(+a)*c,n=+s[e>>3],t=c*((A-+d(+t)*+d(+n))/+h(+n)),A=a>1?1:a,t=t>1?1:t,(t=+s[e+8>>3]+ +_(+(A<-1?-1:A),+(t<-1?-1:t)))>3.141592653589793)do{t+=-6.283185307179586}while(t>3.141592653589793);if(t<-3.141592653589793)do{t+=6.283185307179586}while(t<-3.141592653589793);return void(s[r+8>>3]=t)}t=+s[e>>3]+n,s[r>>3]=t,o=r}while(0);if(+l(+(t+-1.5707963267948966))<1e-16)return s[o>>3]=1.5707963267948966,void(s[r+8>>3]=0);if(+l(+(t+1.5707963267948966))<1e-16)return s[o>>3]=-1.5707963267948966,void(s[r+8>>3]=0);if((t=+s[e+8>>3])>3.141592653589793)do{t+=-6.283185307179586}while(t>3.141592653589793);if(t<-3.141592653589793)do{t+=6.283185307179586}while(t<-3.141592653589793);s[r+8>>3]=t}(15600+(t<<4)|0,+it(+s[15920+(24*t|0)>>3]-u),A,o)}function Re(e,t,n,r,o){e|=0,t|=0,n|=0,r|=0,o|=0;var a,A,l,c,u,h,d,f,p,g,m,_,b,v,y,w,x,E,T,C,k,R,P=0,I=0,L=0,N=0,B=0,D=0;if(R=M,M=M+272|0,N=R+240|0,T=R,C=R+224|0,k=R+208|0,m=R+176|0,_=R+160|0,b=R+192|0,v=R+144|0,y=R+128|0,w=R+112|0,x=R+96|0,E=R+80|0,i[(P=R+256|0)>>2]=t,i[N>>2]=i[e>>2],i[N+4>>2]=i[e+4>>2],i[N+8>>2]=i[e+8>>2],i[N+12>>2]=i[e+12>>2],Pe(N,P,T),i[o>>2]=0,(0|(N=r+n+(5==(0|r)&1)|0))<=(0|n))M=R;else{A=C+4|0,l=m+4|0,c=n+5|0,u=16880+((a=0|i[P>>2])<<2)|0,h=16960+(a<<2)|0,d=y+8|0,f=w+8|0,p=x+8|0,g=k+4|0,L=n;e:for(;;){I=T+((0|L)%5<<4)|0,i[k>>2]=i[I>>2],i[k+4>>2]=i[I+4>>2],i[k+8>>2]=i[I+8>>2],i[k+12>>2]=i[I+12>>2];do{}while(2==(0|Ie(k,a,0,1)));if((0|L)>(0|n)&!!(0|Qe(t))){if(i[m>>2]=i[k>>2],i[m+4>>2]=i[k+4>>2],i[m+8>>2]=i[k+8>>2],i[m+12>>2]=i[k+12>>2],se(A,_),r=0|i[m>>2],P=0|i[17040+(80*r|0)+(i[C>>2]<<2)>>2],i[m>>2]=i[18640+(80*r|0)+(20*P|0)>>2],(0|(I=0|i[18640+(80*r|0)+(20*P|0)+16>>2]))>0){e=0;do{me(l),e=e+1|0}while((0|e)<(0|I))}switch(I=18640+(80*r|0)+(20*P|0)+4|0,i[b>>2]=i[I>>2],i[b+4>>2]=i[I+4>>2],i[b+8>>2]=i[I+8>>2],Ae(b,3*(0|i[u>>2])|0),oe(l,b,l),ie(l),se(l,v),B=+(0|i[h>>2]),s[y>>3]=3*B,s[d>>3]=0,D=-1.5*B,s[w>>3]=D,s[f>>3]=2.598076211353316*B,s[x>>3]=D,s[p>>3]=-2.598076211353316*B,0|i[17040+(80*(0|i[m>>2])|0)+(i[k>>2]<<2)>>2]){case 1:e=w,r=y;break;case 3:e=x,r=w;break;case 2:e=y,r=x;break;default:e=12;break e}Pt(_,v,r,e,E),ke(E,0|i[m>>2],a,1,o+8+(i[o>>2]<<4)|0),i[o>>2]=1+(0|i[o>>2])}if((0|L)<(0|c)&&(se(g,m),ke(m,0|i[k>>2],a,1,o+8+(i[o>>2]<<4)|0),i[o>>2]=1+(0|i[o>>2])),i[C>>2]=i[k>>2],i[C+4>>2]=i[k+4>>2],i[C+8>>2]=i[k+8>>2],i[C+12>>2]=i[k+12>>2],(0|(L=L+1|0))>=(0|N)){e=3;break}}3!=(0|e)?12==(0|e)&&S(26970,27017,572,27027):M=R}}function Pe(e,t,n){e|=0,t|=0,n|=0;var r,s=0,o=0,a=0,A=0,l=0;r=M,M=M+128|0,o=r,A=20240,l=60+(a=s=r+64|0)|0;do{i[a>>2]=i[A>>2],a=a+4|0,A=A+4|0}while((0|a)<(0|l));A=20304,l=(a=o)+60|0;do{i[a>>2]=i[A>>2],a=a+4|0,A=A+4|0}while((0|a)<(0|l));s=(l=!(0|Qe(0|i[t>>2])))?s:o,ye(o=e+4|0),we(o),0|Qe(0|i[t>>2])&&(pe(o),i[t>>2]=1+(0|i[t>>2])),i[n>>2]=i[e>>2],oe(o,s,t=n+4|0),ie(t),i[n+16>>2]=i[e>>2],oe(o,s+12|0,t=n+20|0),ie(t),i[n+32>>2]=i[e>>2],oe(o,s+24|0,t=n+36|0),ie(t),i[n+48>>2]=i[e>>2],oe(o,s+36|0,t=n+52|0),ie(t),i[n+64>>2]=i[e>>2],oe(o,s+48|0,n=n+68|0),ie(n),M=r}function Ie(e,t,n,r){n|=0,r|=0;var s,o,a,A,l,c,u=0,h=0,d=0,f=0,p=0;if(c=M,M=M+32|0,l=c+12|0,o=c,p=4+(e|=0)|0,f=0|i[16960+((t|=0)<<2)>>2],f=(A=!!(0|r))?3*f|0:f,u=0|i[p>>2],s=0|i[(a=e+8|0)>>2],A){if((0|(u=s+u+(r=0|i[(h=e+12|0)>>2])|0))==(0|f))return M=c,1;d=h}else u=s+u+(r=0|i[(d=e+12|0)>>2])|0;if((0|u)<=(0|f))return M=c,0;do{if((0|r)>0){if(r=0|i[e>>2],(0|s)>0){h=18640+(80*r|0)+60|0,r=e;break}r=18640+(80*r|0)+40|0,n?(re(l,f,0,0),ae(p,l,o),_e(o),oe(o,l,p),h=r,r=e):(h=r,r=e)}else h=18640+(80*(0|i[e>>2])|0)+20|0,r=e}while(0);if(i[r>>2]=i[h>>2],(0|i[(u=h+16|0)>>2])>0){r=0;do{me(p),r=r+1|0}while((0|r)<(0|i[u>>2]))}return e=h+4|0,i[l>>2]=i[e>>2],i[l+4>>2]=i[e+4>>2],i[l+8>>2]=i[e+8>>2],t=0|i[16880+(t<<2)>>2],Ae(l,A?3*t|0:t),oe(p,l,p),ie(p),r=A&&((0|i[a>>2])+(0|i[p>>2])+(0|i[d>>2])|0)==(0|f)?1:2,M=c,0|r}function Me(e,t){e|=0,t|=0;var n=0;do{n=0|Ie(e,t,0,1)}while(2==(0|n));return 0|n}function Le(e,t,n,r,o){e|=0,t|=0,n|=0,r|=0,o|=0;var a,A,l,c,u,h,d,f,p,g,m,_,b,v,y,w,x,E,T=0,C=0,k=0,R=0,P=0;if(E=M,M=M+240|0,v=E+208|0,y=E,w=E+192|0,x=E+176|0,p=E+160|0,g=E+144|0,m=E+128|0,_=E+112|0,b=E+96|0,i[(T=E+224|0)>>2]=t,i[v>>2]=i[e>>2],i[v+4>>2]=i[e+4>>2],i[v+8>>2]=i[e+8>>2],i[v+12>>2]=i[e+12>>2],Ne(v,T,y),i[o>>2]=0,(0|(f=r+n+(6==(0|r)&1)|0))<=(0|n))M=E;else{A=n+6|0,l=16960+((a=0|i[T>>2])<<2)|0,c=g+8|0,u=m+8|0,h=_+8|0,d=w+4|0,C=0,k=n,r=-1;e:for(;;){if(e=y+((T=(0|k)%6|0)<<4)|0,i[w>>2]=i[e>>2],i[w+4>>2]=i[e+4>>2],i[w+8>>2]=i[e+8>>2],i[w+12>>2]=i[e+12>>2],e=C,C=0|Ie(w,a,0,1),(0|k)>(0|n)&!!(0|Qe(t))&&1!=(0|e)&&(0|i[w>>2])!=(0|r)){switch(se(y+((T+5|0)%6<<4)+4|0,x),se(y+(T<<4)+4|0,p),R=+(0|i[l>>2]),s[g>>3]=3*R,s[c>>3]=0,P=-1.5*R,s[m>>3]=P,s[u>>3]=2.598076211353316*R,s[_>>3]=P,s[h>>3]=-2.598076211353316*R,T=0|i[v>>2],0|i[17040+(80*T|0)+(((0|r)==(0|T)?i[w>>2]:r)<<2)>>2]){case 1:e=m,r=g;break;case 3:e=_,r=m;break;case 2:e=g,r=_;break;default:e=8;break e}Pt(x,p,r,e,b),0|It(x,b)||0|It(p,b)||(ke(b,0|i[v>>2],a,1,o+8+(i[o>>2]<<4)|0),i[o>>2]=1+(0|i[o>>2]))}if((0|k)<(0|A)&&(se(d,x),ke(x,0|i[w>>2],a,1,o+8+(i[o>>2]<<4)|0),i[o>>2]=1+(0|i[o>>2])),(0|(k=k+1|0))>=(0|f)){e=3;break}r=0|i[w>>2]}3!=(0|e)?8==(0|e)&&S(27054,27017,737,27099):M=E}}function Ne(e,t,n){e|=0,t|=0,n|=0;var r,s=0,o=0,a=0,A=0,l=0;r=M,M=M+160|0,o=r,A=20368,l=72+(a=s=r+80|0)|0;do{i[a>>2]=i[A>>2],a=a+4|0,A=A+4|0}while((0|a)<(0|l));A=20448,l=(a=o)+72|0;do{i[a>>2]=i[A>>2],a=a+4|0,A=A+4|0}while((0|a)<(0|l));s=(l=!(0|Qe(0|i[t>>2])))?s:o,ye(o=e+4|0),we(o),0|Qe(0|i[t>>2])&&(pe(o),i[t>>2]=1+(0|i[t>>2])),i[n>>2]=i[e>>2],oe(o,s,t=n+4|0),ie(t),i[n+16>>2]=i[e>>2],oe(o,s+12|0,t=n+20|0),ie(t),i[n+32>>2]=i[e>>2],oe(o,s+24|0,t=n+36|0),ie(t),i[n+48>>2]=i[e>>2],oe(o,s+36|0,t=n+52|0),ie(t),i[n+64>>2]=i[e>>2],oe(o,s+48|0,t=n+68|0),ie(t),i[n+80>>2]=i[e>>2],oe(o,s+60|0,n=n+84|0),ie(n),M=r}function Be(e,t){return t=0|nn(0|(e|=0),0|(t|=0),45),T(),127&t}function De(e,t){e|=0;var n=0,i=0,s=0,o=0;return!0&134217728==(-16777216&(t|=0))?(i=0|nn(0|e,0|t,52),T(),i&=15,n=0|nn(0|e,0|t,45),T(),(n&=127)>>>0>121?0|(e=0):!(613566756&(o=0|rn(0|(s=0|nn(0|e,0|t,0|(o=3*(15^i)|0))),0|T(),0|o))&Qt(-1227133514,-1171,0|o,0|(s=0|T())))&!(4681&s&T())&&15==(0|i)|!(0|(o=0|nn(0|rn(0|~e,0|~t,0|(o=19+(3*i|0)|0)),0|T(),0|o)))&!(0|T())?0|r[20528+n|0]?!(0|e)&!(0|(t&=8191))?0|(o=1):(o=0|sn(0|e,0|t),T(),0|!!((63-o|0)%3|0)):0|(o=1):0|(o=0)):0|(e=0)}function Oe(e,t,n,r){e|=0,n|=0,r|=0;var s=0,o=0,a=0,A=0;if(s=0|rn(0|(t|=0),0,52),o=0|T(),n=0|rn(0|n,0,45),n=0|o|T()|134225919,(0|t)<1)return o=-1,r=n,i[(t=e)>>2]=o,void(i[(e=e+4|0)>>2]=r);for(o=1,s=-1;A=0|rn(7,0,0|(a=3*(15-o|0)|0)),n&=~T(),s=s&~A|(a=0|rn(0|r,0,0|a)),n=0|n|T(),(0|o)!=(0|t);)o=o+1|0;i[(a=A=e)>>2]=s,i[(A=A+4|0)>>2]=n}function Fe(e,t,n,r){n|=0,r|=0;var s=0,o=0;if(o=0|nn(0|(e|=0),0|(t|=0),52),T(),n>>>0>15)return 4;if((0|(o&=15))<(0|n))return 12;if((0|o)==(0|n))return i[r>>2]=e,i[r+4>>2]=t,0;if(s=0|rn(0|n,0,52),s|=e,e=T()|-15728641&t,(0|o)>(0|n))do{t=0|rn(7,0,3*(14-n|0)|0),n=n+1|0,s|=t,e=0|T()|e}while((0|n)<(0|o));return i[r>>2]=s,i[r+4>>2]=e,0}function Ue(e,t,n,r){n|=0,r|=0;var s=0,o=0,a=0;if(o=0|nn(0|(e|=0),0|(t|=0),52),T(),!((0|n)<16&(0|(o&=15))<=(0|n)))return 4;s=n-o|0,n=0|nn(0|e,0|t,45),T();e:do{if(0|G(127&n)){t:do{if(0|o){for(n=1;!((a=0|rn(7,0,3*(15-n|0)|0))&e)&!((0|T())&t);){if(!(n>>>0>>0))break t;n=n+1|0}n=0|_t(7,0,s,((0|s)<0)<<31>>31),s=0|T();break e}}while(0);n=0|Xt(0|(n=0|Zt(0|(n=0|_t(7,0,s,((0|s)<0)<<31>>31)),0|T(),5,0)),0|T(),-5,-1),n=0|Xt(0|(n=0|Kt(0|n,0|T(),6,0)),0|T(),1,0),s=0|T()}else n=0|_t(7,0,s,((0|s)<0)<<31>>31),s=0|T()}while(0);return i[(a=r)>>2]=n,i[a+4>>2]=s,0}function je(e,t){var n=0,r=0,i=0;if(i=0|nn(0|(e|=0),0|(t|=0),45),T(),!(0|G(127&i)))return 0;i=0|nn(0|e,0|t,52),T(),i&=15;e:do{if(i)for(r=1;;){if(n=0|nn(0|e,0|t,3*(15-r|0)|0),T(),0|(n&=7))break e;if(!(r>>>0>>0)){n=0;break}r=r+1|0}else n=0}while(0);return 1&!(0|n)}function Ge(e,t,n,r){return e|=0,t|=0,(0|(r|=0))<(0|(n|=0))?(r=e,E(0|(n=t)),0|r):(n=0|rn(-1,-1,3+(3*(r-n|0)|0)|0),r=0|rn(0|~n,0|~T(),3*(15-r|0)|0),n=~T()&t,r=~r&e,E(0|n),0|r)}function ze(e,t,n,r){n|=0,r|=0;var s=0;return s=0|nn(0|(e|=0),0|(t|=0),52),T(),(0|n)<16&(0|(s&=15))<=(0|n)?((0|s)<(0|n)&&(s=0|rn(-1,-1,3+(3*(n+-1-s|0)|0)|0),s=0|rn(0|~s,0|~T(),3*(15-n|0)|0),t=~T()&t,e&=~s),s=0|rn(0|n,0,52),n=-15728641&t|T(),i[r>>2]=e|s,i[r+4>>2]=n,0|(r=0)):0|(r=4)}function Ve(e,t){var n=0,r=0,i=0;if(i=0|nn(0|(e|=0),0|(t|=0),52),T(),!(i&=15))return 0;for(r=1;;){if(n=0|nn(0|e,0|t,3*(15-r|0)|0),T(),0|(n&=7)){r=5;break}if(!(r>>>0>>0)){n=0,r=5;break}r=r+1|0}return 5==(0|r)?0|n:0}function We(e,t){var n=0,r=0,i=0,s=0,o=0,a=0,A=0;if(A=0|nn(0|(e|=0),0|(t|=0),52),T(),!(A&=15))return A=e,E(0|(a=t)),0|A;for(a=1,n=0;;){r=0|rn(7,0,0|(s=3*(15-a|0)|0)),i=0|T(),o=0|nn(0|e,0|t,0|s),T(),e=(s=0|rn(0|be(7&o),0,0|s))|e&~r,t=(o=0|T())|t&~i;e:do{if(!n)if(!(s&r|0)&!(o&i|0))n=0;else if(r=0|nn(0|e,0|t,52),T(),r&=15){n=1;t:for(;;){switch(o=0|nn(0|e,0|t,3*(15-n|0)|0),T(),7&o){case 1:break t;case 0:break;default:n=1;break e}if(!(n>>>0>>0)){n=1;break e}n=n+1|0}for(n=1;;){if(i=0|nn(0|e,0|t,0|(o=3*(15-n|0)|0)),T(),s=0|rn(7,0,0|o),t&=~T(),e=e&~s|(o=0|rn(0|be(7&i),0,0|o)),t=0|t|T(),!(n>>>0>>0)){n=1;break}n=n+1|0}}else n=1}while(0);if(!(a>>>0>>0))break;a=a+1|0}return E(0|t),0|e}function He(e,t){var n=0,r=0,i=0,s=0,o=0;if(r=0|nn(0|(e|=0),0|(t|=0),52),T(),!(r&=15))return r=e,E(0|(n=t)),0|r;for(n=1;o=0|nn(0|e,0|t,0|(s=3*(15-n|0)|0)),T(),i=0|rn(7,0,0|s),t&=~T(),e=(s=0|rn(0|be(7&o),0,0|s))|e&~i,t=0|T()|t,n>>>0>>0;)n=n+1|0;return E(0|t),0|e}function $e(e,t){var n=0,r=0,i=0,s=0,o=0,a=0,A=0;if(A=0|nn(0|(e|=0),0|(t|=0),52),T(),!(A&=15))return A=e,E(0|(a=t)),0|A;for(a=1,n=0;;){r=0|rn(7,0,0|(s=3*(15-a|0)|0)),i=0|T(),o=0|nn(0|e,0|t,0|s),T(),e=(s=0|rn(0|ve(7&o),0,0|s))|e&~r,t=(o=0|T())|t&~i;e:do{if(!n)if(!(s&r|0)&!(o&i|0))n=0;else if(r=0|nn(0|e,0|t,52),T(),r&=15){n=1;t:for(;;){switch(o=0|nn(0|e,0|t,3*(15-n|0)|0),T(),7&o){case 1:break t;case 0:break;default:n=1;break e}if(!(n>>>0>>0)){n=1;break e}n=n+1|0}for(n=1;;){if(s=0|rn(7,0,0|(i=3*(15-n|0)|0)),o=t&~T(),t=0|nn(0|e,0|t,0|i),T(),e=e&~s|(t=0|rn(0|ve(7&t),0,0|i)),t=0|o|T(),!(n>>>0>>0)){n=1;break}n=n+1|0}}else n=1}while(0);if(!(a>>>0>>0))break;a=a+1|0}return E(0|t),0|e}function Xe(e,t){var n=0,r=0,i=0,s=0,o=0;if(r=0|nn(0|(e|=0),0|(t|=0),52),T(),!(r&=15))return r=e,E(0|(n=t)),0|r;for(n=1;s=0|rn(7,0,0|(o=3*(15-n|0)|0)),i=t&~T(),t=0|nn(0|e,0|t,0|o),T(),e=(t=0|rn(0|ve(7&t),0,0|o))|e&~s,t=0|T()|i,n>>>0>>0;)n=n+1|0;return E(0|t),0|e}function Qe(e){return(0|(e|=0))%2|0}function Ye(e,t,n){n|=0;var r,o=0;return r=M,M=M+16|0,o=r,(t|=0)>>>0>15?(M=r,0|(o=4)):2146435072&~i[4+(e|=0)>>2]&&2146435072&~i[e+8+4>>2]?(function(e,t,n){var r,o;r=M,M=M+16|0,function(e,t,n,r){t|=0,r|=0;var o,a=0,A=0,l=0,c=0;if(o=M,M=M+16|0,function(e,t,n){t|=0,n|=0;var r,o,a=0;o=M,M=M+32|0,function(e,t){t|=0;var n,r,i=0;i=+s[(e|=0)>>3],n=+h(+i),i=+d(+i),s[t+16>>3]=i,i=+s[e+8>>3],r=n*+h(+i),s[t>>3]=r,i=n*+d(+i),s[t+8>>3]=i}(e|=0,r=o),i[t>>2]=0,s[n>>3]=5,(a=+Mt(16400,r))<+s[n>>3]&&(i[t>>2]=0,s[n>>3]=a),(a=+Mt(16424,r))<+s[n>>3]&&(i[t>>2]=1,s[n>>3]=a),(a=+Mt(16448,r))<+s[n>>3]&&(i[t>>2]=2,s[n>>3]=a),(a=+Mt(16472,r))<+s[n>>3]&&(i[t>>2]=3,s[n>>3]=a),(a=+Mt(16496,r))<+s[n>>3]&&(i[t>>2]=4,s[n>>3]=a),(a=+Mt(16520,r))<+s[n>>3]&&(i[t>>2]=5,s[n>>3]=a),(a=+Mt(16544,r))<+s[n>>3]&&(i[t>>2]=6,s[n>>3]=a),(a=+Mt(16568,r))<+s[n>>3]&&(i[t>>2]=7,s[n>>3]=a),(a=+Mt(16592,r))<+s[n>>3]&&(i[t>>2]=8,s[n>>3]=a),(a=+Mt(16616,r))<+s[n>>3]&&(i[t>>2]=9,s[n>>3]=a),(a=+Mt(16640,r))<+s[n>>3]&&(i[t>>2]=10,s[n>>3]=a),(a=+Mt(16664,r))<+s[n>>3]&&(i[t>>2]=11,s[n>>3]=a),(a=+Mt(16688,r))<+s[n>>3]&&(i[t>>2]=12,s[n>>3]=a),(a=+Mt(16712,r))<+s[n>>3]&&(i[t>>2]=13,s[n>>3]=a),(a=+Mt(16736,r))<+s[n>>3]&&(i[t>>2]=14,s[n>>3]=a),(a=+Mt(16760,r))<+s[n>>3]&&(i[t>>2]=15,s[n>>3]=a),(a=+Mt(16784,r))<+s[n>>3]&&(i[t>>2]=16,s[n>>3]=a),(a=+Mt(16808,r))<+s[n>>3]&&(i[t>>2]=17,s[n>>3]=a),(a=+Mt(16832,r))<+s[n>>3]&&(i[t>>2]=18,s[n>>3]=a),(a=+Mt(16856,r))<+s[n>>3]?(i[t>>2]=19,s[n>>3]=a,M=o):M=o}(e|=0,n|=0,c=o),(A=+p(+(1-.5*+s[c>>3])))<1e-16)return i[r>>2]=0,i[r+4>>2]=0,i[r+8>>2]=0,i[r+12>>2]=0,void(M=o);if(c=0|i[n>>2],a=+it((a=+s[15920+(24*c|0)>>3])-+it(+function(e,t){var n,r,i,o,a;return e|=0,o=+s[(t|=0)>>3],r=+h(+o),i=+s[t+8>>3]-+s[e+8>>3],a=r*+d(+i),n=+s[e>>3],+ +_(+a,+(+d(+o)*+h(+n)-+h(+i)*(r*+d(+n))))}(15600+(c<<4)|0,e))),l=0|Qe(t)?+it(a+-.3334731722518321):a,a=2.618033988749896*+f(+A),(0|t)>0){e=0;do{a*=2.6457513110645907,e=e+1|0}while((0|e)!=(0|t))}A=+h(+l)*a,s[r>>3]=A,l=+d(+l)*a,s[r+8>>3]=l,M=o}(e|=0,t|=0,n|=0,o=r),function(e,t){e|=0;var n,r,o,a,A=0,c=0,u=0,h=0,d=0,f=0,p=0;i[(a=8+(t|=0)|0)>>2]=0,r=+s[e>>3],h=+l(+r),o=+s[e+8>>3],h+=.5*(d=1.1547005383792515*+l(+o)),h-=+(0|(A=~~h)),d-=+(0|(e=~~d));do{if(h<.5){if(h<.3333333333333333){if(i[t>>2]=A,d<.5*(h+1)){i[t+4>>2]=e;break}e=e+1|0,i[t+4>>2]=e;break}if(e=(1&!(d<(p=1-h)))+e|0,i[t+4>>2]=e,p<=d&d<2*h){A=A+1|0,i[t>>2]=A;break}i[t>>2]=A;break}if(!(h<.6666666666666666)){if(A=A+1|0,i[t>>2]=A,d<.5*h){i[t+4>>2]=e;break}e=e+1|0,i[t+4>>2]=e;break}if(d<1-h){if(i[t+4>>2]=e,2*h-1>2]=A;break}}else e=e+1|0,i[t+4>>2]=e;A=A+1|0,i[t>>2]=A}while(0);do{if(r<0){if(1&e){A=~~(+(0|A)-(2*(+((f=0|Qt(0|A,((0|A)<0)<<31>>31,0|(f=(e+1|0)/2|0),((0|f)<0)<<31>>31))>>>0)+4294967296*+(0|T()))+1)),i[t>>2]=A;break}A=~~(+(0|A)-2*(+((f=0|Qt(0|A,((0|A)<0)<<31>>31,0|(f=(0|e)/2|0),((0|f)<0)<<31>>31))>>>0)+4294967296*+(0|T()))),i[t>>2]=A;break}}while(0);f=t+4|0,o<0&&(A=A-((1|e<<1)/2|0)|0,i[t>>2]=A,e=0-e|0,i[f>>2]=e),c=e-A|0,(0|A)<0?(u=0-A|0,i[f>>2]=c,i[a>>2]=u,i[t>>2]=0,e=c,A=0):u=0,(0|e)<0&&(A=A-e|0,i[t>>2]=A,u=u-e|0,i[a>>2]=u,i[f>>2]=0,e=0),n=A-u|0,c=e-u|0,(0|u)<0&&(i[t>>2]=n,i[f>>2]=c,i[a>>2]=0,e=c,A=n,u=0),(0|(c=(0|u)<(0|(c=(0|e)<(0|A)?e:A))?u:c))<=0||(i[t>>2]=A-c,i[f>>2]=e-c,i[a>>2]=u-c)}(o,n+4|0),M=r}(e,t,o),t=0|function(e,t){e|=0;var n,r=0,s=0,o=0,a=0,A=0,l=0,c=0,u=0;if(n=M,M=M+64|0,l=n+40|0,s=n+24|0,o=n+12|0,a=n,rn(0|(t|=0),0,52),r=134225919|T(),!t)return(0|i[e+4>>2])>2||(0|i[e+8>>2])>2||(0|i[e+12>>2])>2?(l=0,E(0|(A=0)),M=n,0|l):(rn(0|V(e),0,45),A=0|T()|r,l=-1,E(0|A),M=n,0|l);if(i[l>>2]=i[e>>2],i[l+4>>2]=i[e+4>>2],i[l+8>>2]=i[e+8>>2],i[l+12>>2]=i[e+12>>2],A=l+4|0,(0|t)>0)for(e=-1;i[s>>2]=i[A>>2],i[s+4>>2]=i[A+4>>2],i[s+8>>2]=i[A+8>>2],1&t?(he(A),i[o>>2]=i[A>>2],i[o+4>>2]=i[A+4>>2],i[o+8>>2]=i[A+8>>2],fe(o)):(de(A),i[o>>2]=i[A>>2],i[o+4>>2]=i[A+4>>2],i[o+8>>2]=i[A+8>>2],pe(o)),ae(s,o,a),ie(a),c=0|rn(7,0,0|(u=3*(15-t|0)|0)),r&=~T(),e=(u=0|rn(0|le(a),0,0|u))|e&~c,r=0|T()|r,(0|t)>1;)t=t+-1|0;else e=-1;e:do{if((0|i[A>>2])<=2&&(0|i[l+8>>2])<=2&&(0|i[l+12>>2])<=2){if(t=0|rn(0|(s=0|V(l)),0,45),t|=e,e=T()|-1040385&r,a=0|W(l),!(0|G(s))){if((0|a)<=0)break;for(o=0;;){if(s=0|nn(0|t,0|e,52),T(),s&=15)for(r=1;l=0|nn(0|t,0|e,0|(u=3*(15-r|0)|0)),T(),c=0|rn(7,0,0|u),e&=~T(),t=t&~c|(u=0|rn(0|be(7&l),0,0|u)),e=0|e|T(),r>>>0>>0;)r=r+1|0;if((0|(o=o+1|0))==(0|a))break e}}o=0|nn(0|t,0|e,52),T(),o&=15;t:do{if(o){r=1;n:for(;;){switch(u=0|nn(0|t,0|e,3*(15-r|0)|0),T(),7&u){case 1:break n;case 0:break;default:break t}if(!(r>>>0>>0))break t;r=r+1|0}if(0|H(s,0|i[l>>2]))for(r=1;c=0|rn(7,0,0|(l=3*(15-r|0)|0)),u=e&~T(),e=0|nn(0|t,0|e,0|l),T(),t=t&~c|(e=0|rn(0|ve(7&e),0,0|l)),e=0|u|T(),r>>>0>>0;)r=r+1|0;else for(r=1;l=0|nn(0|t,0|e,0|(u=3*(15-r|0)|0)),T(),c=0|rn(7,0,0|u),e&=~T(),t=t&~c|(u=0|rn(0|be(7&l),0,0|u)),e=0|e|T(),r>>>0>>0;)r=r+1|0}}while(0);if((0|a)>0){r=0;do{t=0|We(t,e),e=0|T(),r=r+1|0}while((0|r)!=(0|a))}}else t=0,e=0}while(0);return u=t,E(0|(c=e)),M=n,0|u}(o,t),o=0|T(),i[n>>2]=t,i[n+4>>2]=o,!(0|t)&!(0|o)&&S(27795,27122,1050,27145),M=r,0|(o=0)):(M=r,0|(o=3))}function qe(e,t,n){var r,s=0,o=0,a=0;if(r=4+(n|=0)|0,o=0|nn(0|(e|=0),0|(t|=0),52),T(),o&=15,a=0|nn(0|e,0|t,45),T(),s=!(0|o),0|G(127&a)){if(s)return 1;s=1}else{if(s)return 0;s=0|i[r>>2]||0|i[n+8>>2]?1:1&!!(0|i[n+12>>2])}for(n=1;1&n?fe(r):pe(r),a=0|nn(0|e,0|t,3*(15-n|0)|0),T(),ge(r,7&a),n>>>0>>0;)n=n+1|0;return 0|s}function Ke(e,t,n){n|=0;var r,s,o=0,a=0,A=0,l=0,c=0,u=0;if(s=M,M=M+16|0,r=s,u=0|nn(0|(e|=0),0|(t|=0),45),T(),(u&=127)>>>0>121)return i[n>>2]=0,i[n+4>>2]=0,i[n+8>>2]=0,i[n+12>>2]=0,M=s,5;e:do{if(0|G(u)&&(A=0|nn(0|e,0|t,52),T(),0|(A&=15))){o=1;t:for(;;){switch(c=0|nn(0|e,0|t,3*(15-o|0)|0),T(),7&c){case 5:break t;case 0:break;default:o=t;break e}if(!(o>>>0>>0)){o=t;break e}o=o+1|0}for(a=1,o=t;l=0|rn(7,0,0|(t=3*(15-a|0)|0)),c=o&~T(),o=0|nn(0|e,0|o,0|t),T(),e=e&~l|(o=0|rn(0|ve(7&o),0,0|t)),o=0|c|T(),a>>>0>>0;)a=a+1|0}else o=t}while(0);if(c=7696+(28*u|0)|0,i[n>>2]=i[c>>2],i[n+4>>2]=i[c+4>>2],i[n+8>>2]=i[c+8>>2],i[n+12>>2]=i[c+12>>2],!(0|qe(e,o,n)))return M=s,0;if(l=n+4|0,i[r>>2]=i[l>>2],i[r+4>>2]=i[l+4>>2],i[r+8>>2]=i[l+8>>2],A=0|nn(0|e,0|o,52),T(),c=15&A,1&A?(pe(l),A=c+1|0):A=c,0|G(u)){e:do{if(c)for(t=1;;){if(a=0|nn(0|e,0|o,3*(15-t|0)|0),T(),0|(a&=7)){o=a;break e}if(!(t>>>0>>0)){o=0;break}t=t+1|0}else o=0}while(0);o=4==(0|o)&1}else o=0;if(0|Ie(n,A,o,0)){if(0|G(u))do{}while(0|Ie(n,A,0,0));(0|A)!=(0|c)&&de(l)}else(0|A)!=(0|c)&&(i[l>>2]=i[r>>2],i[l+4>>2]=i[r+4>>2],i[l+8>>2]=i[r+8>>2]);return M=s,0}function Ze(e,t,n){n|=0;var r,s,o=0;return s=M,M=M+16|0,0|(o=0|Ke(e|=0,t|=0,r=s))?(M=s,0|o):(o=0|nn(0|e,0|t,52),T(),function(e,t,n){var r,s;t|=0,n|=0,r=M,M=M+16|0,se(4+(e|=0)|0,s=r),ke(s,0|i[e>>2],t,0,n),M=r}(r,15&o,n),M=s,0|(o=0))}function Je(e,t,n){n|=0;var r,i=0,s=0,o=0;if(r=M,M=M+16|0,0|(i=0|Ke(e|=0,t|=0,o=r)))return M=r,0|i;i=0|nn(0|e,0|t,45),T(),i=!(0|G(127&i)),s=0|nn(0|e,0|t,52),T(),s&=15;e:do{if(!i){if(0|s)for(i=1;;){if(!(!((0|rn(7,0,3*(15-i|0)|0))&e)&!((0|T())&t)))break e;if(!(i>>>0>>0))break;i=i+1|0}return Re(o,s,0,5,n),M=r,0}}while(0);return Le(o,s,0,6,n),M=r,0}function et(e,t){t|=0;var n=0,r=0,s=0,o=0,a=0,A=0,l=0;if((e|=0)>>>0>15)return 4;if(rn(0|e,0,52),A=134225919|T(),!e){n=0,r=0;do{0|G(r)&&(rn(0|r,0,45),a=0|A|T(),i[(e=t+(n<<3)|0)>>2]=-1,i[e+4>>2]=a,n=n+1|0),r=r+1|0}while(122!=(0|r));return 0}n=0,a=0;do{if(0|G(a)){for(rn(0|a,0,45),r=1,s=-1,o=0|A|T();s&=~(l=0|rn(7,0,3*(15-r|0)|0)),o&=~T(),(0|r)!=(0|e);)r=r+1|0;i[(l=t+(n<<3)|0)>>2]=s,i[l+4>>2]=o,n=n+1|0}a=a+1|0}while(122!=(0|a));return 0}function tt(e,t,n,r){e|=0,r|=0;var s=0,o=0,a=0;s=0|nn(0|(t|=0),0|(n|=0),52),T(),!(0|t)&!(0|n)|(0|r)>15|(0|(s&=15))>(0|r)?(o=-1,t=-1,n=0,s=0):(t=0|Ge(t,n,s+1|0,r),a=-15728641&T(),n=0|rn(0|r,0,52),o=s,t=(t=!(0|je(n|=t,a=0|a|T())))?-1:r,s=a),i[(a=e)>>2]=n,i[a+4>>2]=s,i[e+8>>2]=o,i[e+12>>2]=t}function nt(e,t,n,r){n|=0,r|=0;var s=0,o=0;return s=0|nn(0|(e|=0),0|(t|=0),52),T(),s&=15,i[(o=r+8|0)>>2]=s,!(0|e)&!(0|t)|(0|n)>15|(0|s)>(0|n)?(i[(n=r)>>2]=0,i[n+4>>2]=0,i[o>>2]=-1,void(i[r+12>>2]=-1)):(e=0|Ge(e,t,s+1|0,n),o=-15728641&T(),s=0|rn(0|n,0,52),s|=e,o=0|o|T(),i[(e=r)>>2]=s,i[e+4>>2]=o,e=r+12|0,0|je(s,o)?void(i[e>>2]=n):void(i[e>>2]=-1))}function rt(e){var t,n=0,r=0,s=0,o=0,a=0,A=0,l=0,c=0;if(!(!(0|(n=0|i[(r=e|=0)>>2]))&!(0|(r=0|i[r+4>>2]))||(s=0|nn(0|n,0|r,52),T(),n=0|Xt(0|(l=0|rn(1,0,3*(15^(s&=15))|0)),0|T(),0|n,0|r),r=0|T(),i[(l=e)>>2]=n,i[l+4>>2]=r,(0|s)<(0|(A=0|i[(l=e+8|0)>>2]))))){for(t=e+12|0,a=s;;){if((0|a)==(0|A)){s=5;break}if(c=(0|a)==(0|i[t>>2]),s=0|nn(0|n,0|r,0|(o=3*(15-a|0)|0)),T(),c&1==(0|(s&=7))&!0){s=7;break}if(!(7==(0|s)&!0)){s=10;break}if(n=0|Xt(0|n,0|r,0|(c=0|rn(1,0,0|o)),0|T()),r=0|T(),i[(c=e)>>2]=n,i[c+4>>2]=r,!((0|a)>(0|A))){s=10;break}a=a+-1|0}if(5==(0|s))return i[(c=e)>>2]=0,i[c+4>>2]=0,i[l>>2]=-1,void(i[t>>2]=-1);if(7==(0|s))return A=0|Xt(0|n,0|r,0|(A=0|rn(1,0,0|o)),0|T()),l=0|T(),i[(c=e)>>2]=A,i[c+4>>2]=l,void(i[t>>2]=a+-1)}}function it(e){var t;return t=(e=+e)<0?e+6.283185307179586:e,+(e>=6.283185307179586?t+-6.283185307179586:t)}function st(e,t){return t|=0,+l(+(+s[(e|=0)>>3]-+s[t>>3]))<17453292519943298e-27?0|(t=+l(+(+s[e+8>>3]-+s[t+8>>3]))<17453292519943298e-27):0|(t=0)}function ot(e,t){switch(e=+e,0|(t|=0)){case 1:e=e<0?e+6.283185307179586:e;break;case 2:e=e>0?e+-6.283185307179586:e}return+e}function at(e,t){e|=0;var n,r,i,o=0;return r=+s[(t|=0)>>3],n=+s[e>>3],o=(i=+d(.5*(r-n)))*i+(o=+d(.5*(+s[t+8>>3]-+s[e+8>>3])))*(+h(+r)*+h(+n)*o),2*+_(+ +c(+o),+ +c(+(1-o)))*6371.007180918475}function At(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(s[t>>3]=+s[20656+(e<<3)>>3],0|(t=0))}function lt(e,t){t|=0;var n=0;return(e|=0)>>>0>15?0|(t=4):(n=0|Zt(0|(n=0|_t(7,0,e,((0|e)<0)<<31>>31)),0|T(),120,0),e=0|T(),i[t>>2]=2|n,i[t+4>>2]=e,0|(t=0))}function ct(e,t,n){e|=0,n|=0;var r,i,o,a,A=0,l=0,u=0,p=0,g=0,b=0;return b=+s[(t|=0)>>3],o=+s[e>>3],g=+d(.5*(b-o)),u=+s[t+8>>3],i=+s[e+8>>3],p=+d(.5*(u-i)),r=+h(+o),a=+h(+b),p=2*+_(+ +c(+(p=g*g+p*(a*r*p))),+ +c(+(1-p))),g=+s[n>>3],b=+d(.5*(g-b)),A=+s[n+8>>3],u=+d(.5*(A-u)),l=+h(+g),u=2*+_(+ +c(+(u=b*b+u*(a*l*u))),+ +c(+(1-u))),g=+d(.5*(o-g)),A=+d(.5*(i-A)),A=2*+_(+ +c(+(A=g*g+A*(r*l*A))),+ +c(+(1-A))),4*+m(+ +c(+ +f(.5*(l=.5*(p+u+A)))*+f(.5*(l-p))*+f(.5*(l-u))*+f(.5*(l-A))))}function ut(e,t,n){n|=0;var r,o,a,A=0,l=0;if(a=M,M=M+192|0,o=a,0|(l=0|Ze(e|=0,t|=0,r=a+168|0)))return M=a,0|l;if(0|Je(e,t,o)&&S(27795,27190,415,27199),(0|(t=0|i[o>>2]))>0){if(A=+ct(o+8|0,o+8+((1!=(0|t)&1)<<4)|0,r)+0,1!=(0|t)){e=1;do{A+=+ct(o+8+((l=e)<<4)|0,o+8+((0|(e=e+1|0))%(0|t)<<4)|0,r)}while((0|e)<(0|t))}}else A=0;return s[n>>3]=A,M=a,0}function ht(e){e|=0;var t,n,r=0;return(t=0|$t(1,12))||S(27280,27235,49,27293),0|(r=0|i[(n=e+4|0)>>2])?(i[(r=r+8|0)>>2]=t,i[n>>2]=t,0|t):(0|i[e>>2]&&S(27310,27235,61,27333),i[(r=e)>>2]=t,i[n>>2]=t,0|t)}function dt(e,t){var n,r;return e|=0,t|=0,(r=0|Wt(24))||S(27347,27235,78,27361),i[r>>2]=i[t>>2],i[r+4>>2]=i[t+4>>2],i[r+8>>2]=i[t+8>>2],i[r+12>>2]=i[t+12>>2],i[r+16>>2]=0,0|(n=0|i[(t=e+4|0)>>2])?(i[n+16>>2]=r,i[t>>2]=r,0|r):(0|i[e>>2]&&S(27376,27235,82,27361),i[e>>2]=r,i[t>>2]=r,0|r)}function ft(e){var t=0,n=0,r=0,s=0;if(e|=0)for(r=1;;){if(0|(t=0|i[e>>2]))do{if(0|(n=0|i[t>>2]))do{s=n,n=0|i[n+16>>2],Ht(s)}while(0|n);s=t,t=0|i[t+8>>2],Ht(s)}while(0|t);if(t=e,e=0|i[e+8>>2],r||Ht(t),!e)break;r=0}}function pt(e,t,n){e|=0;var r=0,o=0,a=0,A=0,l=0,c=0,u=0,h=0;if(!(0|K(t|=0,n|=0)))return 0;if(t=0|Y(t),r=+s[n>>3],o=t&(o=+s[n+8>>3])<0?o+6.283185307179586:o,!(e=0|i[e>>2]))return 0;if(t){t=0,u=o,n=e;e:for(;;){for(;A=+s[n>>3],o=+s[n+8>>3],h=0|i[(n=n+16|0)>>2],a=+s[(h=0|h?h:e)>>3],l=+s[h+8>>3],A>a?(c=A,A=l):(c=a,a=A,A=o,o=l),(r=r==a|r==c?r+2220446049250313e-31:r)c;)if(!(n=0|i[n>>2])){n=22;break e}if(((c=(l=A<0?A+6.283185307179586:A)+(r-a)/(c-a)*((A=o<0?o+6.283185307179586:o)-l))<0?c+6.283185307179586:c)>(u=l==u|A==u?u+-2220446049250313e-31:u)&&(t^=1),!(n=0|i[n>>2])){n=22;break}}if(22==(0|n))return 0|t}else{t=0,u=o,n=e;e:for(;;){for(;A=+s[n>>3],o=+s[n+8>>3],h=0|i[(n=n+16|0)>>2],a=+s[(h=0|h?h:e)>>3],l=+s[h+8>>3],A>a?(c=A,A=l):(c=a,a=A,A=o,o=l),(r=r==a|r==c?r+2220446049250313e-31:r)c;)if(!(n=0|i[n>>2])){n=22;break e}if(A+(r-a)/(c-a)*(o-A)>(u=A==u|o==u?u+-2220446049250313e-31:u)&&(t^=1),!(n=0|i[n>>2])){n=22;break}}if(22==(0|n))return 0|t}return 0}function gt(e,t,n,s,o){n|=0,s|=0,o|=0;var a,A,l,c,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0;if(c=M,M=M+32|0,v=c+16|0,l=c,u=0|nn(0|(e|=0),0|(t|=0),52),T(),u&=15,m=0|nn(0|n,0|s,52),T(),(0|u)!=(15&m))return M=c,12;if(p=0|nn(0|e,0|t,45),T(),p&=127,g=0|nn(0|n,0|s,45),T(),p>>>0>121|(g&=127)>>>0>121)return M=c,5;if(m=(0|p)!=(0|g)){if(7==(0|(d=0|X(p,g))))return M=c,1;7==(0|(f=0|X(g,p)))?S(27514,27538,161,27548):(_=d,h=f)}else _=0,h=0;a=0|G(p),A=0|G(g),i[v>>2]=0,i[v+4>>2]=0,i[v+8>>2]=0,i[v+12>>2]=0;do{if(_){if(d=(0|(g=0|i[4272+(28*p|0)+(_<<2)>>2]))>0,A)if(d){p=0,f=n,d=s;do{f=0|$e(f,d),d=0|T(),1==(0|(h=0|ve(h)))&&(h=0|ve(1)),p=p+1|0}while((0|p)!=(0|g));g=h,p=f,f=d}else g=h,p=n,f=s;else if(d){p=0,f=n,d=s;do{f=0|Xe(f,d),d=0|T(),h=0|ve(h),p=p+1|0}while((0|p)!=(0|g));g=h,p=f,f=d}else g=h,p=n,f=s;if(qe(p,f,v),m||S(27563,27538,191,27548),(d=!!(0|a))&(h=!!(0|A))&&S(27590,27538,192,27548),d){if(7==(0|(h=0|Ve(e,t)))){u=5;break}if(0|r[22e3+(7*h|0)+_|0]){u=1;break}p=f=0|i[21168+(28*h|0)+(_<<2)>>2]}else if(h){if(7==(0|(h=0|Ve(p,f)))){u=5;break}if(0|r[22e3+(7*h|0)+g|0]){u=1;break}p=0,f=0|i[21168+(28*g|0)+(h<<2)>>2]}else p=0,f=0;if((p|f|0)<0)u=5;else{if((0|f)>0){d=v+4|0,h=0;do{_e(d),h=h+1|0}while((0|h)!=(0|f))}if(i[l>>2]=0,i[l+4>>2]=0,i[l+8>>2]=0,ge(l,_),0|u)for(;0|Qe(u)?fe(l):pe(l),(0|u)>1;)u=u+-1|0;if((0|p)>0){u=0;do{_e(l),u=u+1|0}while((0|u)!=(0|p))}oe(b=v+4|0,l,b),ie(b),b=51}}else if(qe(n,s,v),!!(0|a)&!!(0|A))if((0|g)!=(0|p)&&S(27621,27538,261,27548),7==(0|(h=0|Ve(e,t)))|7==(0|(u=0|Ve(n,s))))u=5;else if(0|r[22e3+(7*h|0)+u|0])u=1;else if((0|(h=0|i[21168+(28*h|0)+(u<<2)>>2]))>0){d=v+4|0,u=0;do{_e(d),u=u+1|0}while((0|u)!=(0|h));b=51}else b=51;else b=51}while(0);return 51==(0|b)&&(u=v+4|0,i[o>>2]=i[u>>2],i[o+4>>2]=i[u+4>>2],i[o+8>>2]=i[u+8>>2],u=0),M=c,0|u}function mt(e,t,n,r){n|=0,r|=0;var s,o,a,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0;if(a=M,M=M+48|0,s=a+36|0,c=a+24|0,u=a+12|0,h=a,A=0|nn(0|(e|=0),0|(t|=0),52),T(),A&=15,f=0|nn(0|e,0|t,45),T(),(f&=127)>>>0>121)return M=a,5;if(o=0|G(f),rn(0|A,0,52),m=134225919|T(),i[(l=r)>>2]=-1,i[l+4>>2]=m,!A)return 7==(0|(A=0|le(n)))||127==(0|(A=0|$(f,A)))?(M=a,0|(m=1)):(p=0|rn(0|A,0,45),g=0|T(),g=-1040385&i[(f=r)+4>>2]|g,i[(m=r)>>2]=i[f>>2]|p,i[m+4>>2]=g,M=a,0|(m=0));for(i[s>>2]=i[n>>2],i[s+4>>2]=i[n+4>>2],i[s+8>>2]=i[n+8>>2],n=A;;){if(l=n,n=n+-1|0,i[c>>2]=i[s>>2],i[c+4>>2]=i[s+4>>2],i[c+8>>2]=i[s+8>>2],0|Qe(l)){if(0|(A=0|ce(s))){n=13;break}i[u>>2]=i[s>>2],i[u+4>>2]=i[s+4>>2],i[u+8>>2]=i[s+8>>2],fe(u)}else{if(0|(A=0|ue(s))){n=13;break}i[u>>2]=i[s>>2],i[u+4>>2]=i[s+4>>2],i[u+8>>2]=i[s+8>>2],pe(u)}if(ae(c,u,h),ie(h),b=0|i[(A=r)>>2],A=0|i[A+4>>2],_=0|rn(7,0,0|(v=3*(15-l|0)|0)),A&=~T(),v=0|rn(0|le(h),0,0|v),A=0|T()|A,i[(m=r)>>2]=v|b&~_,i[m+4>>2]=A,(0|l)<=1){n=14;break}}e:do{if(13!=(0|n)&&14==(0|n))if((0|i[s>>2])<=1&&(0|i[s+4>>2])<=1&&(0|i[s+8>>2])<=1){h=127==(0|(A=0|$(f,n=0|le(s))))?0:0|G(A);t:do{if(n){if(o){if(7==(0|(A=0|Ve(e,t)))){A=5;break e}if((0|(l=0|i[21376+(28*A|0)+(n<<2)>>2]))>0){A=n,n=0;do{A=0|be(A),n=n+1|0}while((0|n)!=(0|l))}else A=n;if(1==(0|A)){A=9;break e}127==(0|(n=0|$(f,A)))&&S(27648,27538,411,27678),0|G(n)?S(27693,27538,412,27678):(g=n,p=l,d=A)}else g=A,p=0,d=n;if((0|(u=0|i[4272+(28*f|0)+(d<<2)>>2]))<=-1&&S(27724,27538,419,27678),!h){if((0|p)<0){A=5;break e}if(0|p){A=0,n=0|i[(l=r)>>2],l=0|i[l+4>>2];do{n=0|He(n,l),l=0|T(),i[(v=r)>>2]=n,i[v+4>>2]=l,A=A+1|0}while((0|A)<(0|p))}if((0|u)<=0){A=g,n=58;break}for(A=0,n=0|i[(l=r)>>2],l=0|i[l+4>>2];;)if(n=0|He(n,l),l=0|T(),i[(v=r)>>2]=n,i[v+4>>2]=l,(0|(A=A+1|0))==(0|u)){A=g,n=58;break t}}if(7==(0|(c=0|X(g,f)))&&S(27514,27538,428,27678),n=0|i[(A=r)>>2],A=0|i[A+4>>2],(0|u)>0){l=0;do{n=0|He(n,A),A=0|T(),i[(v=r)>>2]=n,i[v+4>>2]=A,l=l+1|0}while((0|l)!=(0|u))}if(7==(0|(A=0|Ve(n,A)))&&S(27795,27538,440,27678),n=0|z(g),(0|(n=0|i[(n?21792:21584)+(28*c|0)+(A<<2)>>2]))<0&&S(27795,27538,454,27678),n){A=0,l=0|i[(c=r)>>2],c=0|i[c+4>>2];do{l=0|We(l,c),c=0|T(),i[(v=r)>>2]=l,i[v+4>>2]=c,A=A+1|0}while((0|A)<(0|n));A=g,n=58}else A=g,n=58}else if(!!(0|o)&!!(0|h)){if(7==(0|(n=0|Ve(e,t)))|7==(0|(l=0|Ve(0|i[(l=r)>>2],0|i[l+4>>2])))){A=5;break e}if((0|(l=0|i[21376+(28*n|0)+(l<<2)>>2]))<0){A=5;break e}if(l){n=0,c=0|i[(u=r)>>2],u=0|i[u+4>>2];do{c=0|He(c,u),u=0|T(),i[(v=r)>>2]=c,i[v+4>>2]=u,n=n+1|0}while((0|n)<(0|l));n=58}else n=59}else n=58}while(0);if(58==(0|n)&&h&&(n=59),59==(0|n)&&1==(0|Ve(0|i[(v=r)>>2],0|i[v+4>>2]))){A=9;break}_=0|i[(v=r)>>2],v=-1040385&i[v+4>>2],b=0|rn(0|A,0,45),v=0|v|T(),i[(A=r)>>2]=_|b,i[A+4>>2]=v,A=0}else A=1}while(0);return M=a,0|A}function _t(e,t,n,r){e|=0,t|=0;var i=0,s=0,o=0;if(!(0|(n|=0))&!(0|(r|=0)))return s=1,E(0|(i=0)),0|s;s=e,i=t,e=1,t=0;do{e=0|Zt(0|((o=!0&!(1&n))?1:s),0|(o?0:i),0|e,0|t),t=0|T(),n=0|tn(0|n,0|r,1),r=0|T(),s=0|Zt(0|s,0|i,0|s,0|i),i=0|T()}while(!(!(0|n)&!(0|r)));return E(0|t),0|e}function bt(e,t,n,r){n|=0,r|=0;var o,a=0,A=0,l=0,c=0,u=0,d=0;o=M,M=M+16|0,A=o,l=0|nn(0|(e|=0),0|(t|=0),52),T(),l&=15;do{if(l){if(!(a=0|Ze(e,t,A))){u=+s[A>>3],c=1/+h(+u),d=+s[25968+(l<<3)>>3],s[n>>3]=u+d,s[n+8>>3]=u-d,u=+s[A+8>>3],c*=d,s[n+16>>3]=c+u,s[n+24>>3]=u-c;break}return M=o,0|a}if(a=0|nn(0|e,0|t,45),T(),(a&=127)>>>0>121)return M=o,5;A=22064+(a<<5)|0,i[n>>2]=i[A>>2],i[n+4>>2]=i[A+4>>2],i[n+8>>2]=i[A+8>>2],i[n+12>>2]=i[A+12>>2],i[n+16>>2]=i[A+16>>2],i[n+20>>2]=i[A+20>>2],i[n+24>>2]=i[A+24>>2],i[n+28>>2]=i[A+28>>2];break}while(0);return function(e,t){t=+t;var n,r,i,o,a,A,l,c=0,u=0;c=(o=+s[(i=16+(e|=0)|0)>>3])-(r=+s[(n=e+24|0)>>3]),c=o>3],c=.5*(c*t-c),u+=t=.5*((l=u-(A=+s[(a=e+8|0)>>3]))*t-l),s[e>>3]=u>1.5707963267948966?1.5707963267948966:u,t=A-t,s[a>>3]=t<-1.5707963267948966?-1.5707963267948966:t,t=(t=o+c)>3.141592653589793?t+-6.283185307179586:t,s[i>>3]=t<-3.141592653589793?t+6.283185307179586:t,t=(t=r-c)>3.141592653589793?t+-6.283185307179586:t,s[n>>3]=t<-3.141592653589793?t+6.283185307179586:t}(n,r?1.4:1.1),(0|i[(r=26096+(l<<3)|0)>>2])==(0|e)&&(0|i[r+4>>2])==(0|t)&&(s[n>>3]=1.5707963267948966),(0|i[(l=26224+(l<<3)|0)>>2])==(0|e)&&(0|i[l+4>>2])==(0|t)&&(s[n+8>>3]=-1.5707963267948966),1.5707963267948966!=+s[n>>3]&&-1.5707963267948966!=+s[n+8>>3]?(M=o,0|(l=0)):(s[n+16>>3]=3.141592653589793,s[n+24>>3]=-3.141592653589793,M=o,0|(l=0))}function vt(e){var t,n,s,o,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0;if(o=M,M=M+336|0,t=o+168|0,n=o,!(0|(A=0|i[(l=e|=0)>>2]))&!(0|(l=0|i[l+4>>2])))M=o;else{if(0|r[0|(a=e+28|0)]?(A=0|yt(A,l),l=0|T()):r[0|a]=1,!(0|i[i[(s=e+20|0)>>2]>>2]))return 0|(A=0|i[(a=e+24|0)>>2])&&Ht(A),i[(w=e)>>2]=0,i[w+4>>2]=0,i[e+8>>2]=0,i[s>>2]=0,i[e+12>>2]=-1,i[e+16>>2]=0,i[a>>2]=0,void(M=o);c=15&(a=0|i[(w=e+16|0)>>2]);e:do{if(!(0|A)&!(0|l))y=e+24|0;else{b=e+12|0,m=3==(0|c),g=255&a,f=3==(1|c),_=e+24|0,p=(c+-1|0)>>>0<3,h=3==(2|c),d=n+8|0;t:for(;;){if(u=0|nn(0|A,0|l,52),T(),(0|(u&=15))==(0|i[b>>2])){switch(15&g){case 0:case 2:case 3:if(0|(c=0|Ze(A,l,t))){v=15;break t}if(0|St(0|i[s>>2],0|i[_>>2],t)){v=19;break t}}if(f&&(c=0|i[4+(0|i[s>>2])>>2],i[t>>2]=i[c>>2],i[t+4>>2]=i[c+4>>2],i[t+8>>2]=i[c+8>>2],i[t+12>>2]=i[c+12>>2],0|K(26832,t))){if(0|Ye(0|i[4+(0|i[s>>2])>>2],u,n)){v=25;break}if((0|i[(c=n)>>2])==(0|A)&&(0|i[c+4>>2])==(0|l)){v=29;break}}if(p){if(0|(c=0|Je(A,l,t))){v=32;break}if(0|bt(A,l,n,0)){v=36;break}if(h&&0|Ct(0|i[s>>2],0|i[_>>2],t,n)){v=42;break}if(f&&0|Rt(0|i[s>>2],0|i[_>>2],t,n)){v=42;break}}if(m){if(a=0|bt(A,l,t,1),c=0|i[_>>2],0|a){v=45;break}if(0|Z(c,t)){if(ee(n,t),0|J(t,0|i[_>>2])){v=53;break}if(0|St(0|i[s>>2],0|i[_>>2],d)){v=53;break}if(0|Rt(0|i[s>>2],0|i[_>>2],n,t)){v=53;break}}}}do{if((0|u)<(0|i[b>>2])){if(a=0|bt(A,l,t,1),c=0|i[_>>2],0|a){v=58;break t}if(!(0|Z(c,t))){v=73;break}if(0|J(0|i[_>>2],t)&&(ee(n,t),0|Ct(0|i[s>>2],0|i[_>>2],n,t))){v=65;break t}if(0|(A=0|ze(A,l,u+1|0,n))){v=67;break t}A=0|i[(l=n)>>2],l=0|i[l+4>>2]}else v=73}while(0);if(73==(0|v)&&(v=0,A=0|yt(A,l),l=0|T()),!(0|A)&!(0|l)){y=_;break e}}switch(0|v){case 15:0|(a=0|i[_>>2])&&Ht(a),i[(v=e)>>2]=0,i[v+4>>2]=0,i[s>>2]=0,i[b>>2]=-1,i[w>>2]=0,i[_>>2]=0,i[e+8>>2]=c,v=20;break;case 19:i[e>>2]=A,i[e+4>>2]=l,v=20;break;case 25:S(27795,27761,470,27772);break;case 29:case 42:return i[e>>2]=A,i[e+4>>2]=l,void(M=o);case 32:return 0|(a=0|i[_>>2])&&Ht(a),i[(y=e)>>2]=0,i[y+4>>2]=0,i[s>>2]=0,i[b>>2]=-1,i[w>>2]=0,i[_>>2]=0,i[e+8>>2]=c,void(M=o);case 36:S(27795,27761,493,27772);break;case 45:0|c&&Ht(c),i[(v=e)>>2]=0,i[v+4>>2]=0,i[s>>2]=0,i[b>>2]=-1,i[w>>2]=0,i[_>>2]=0,i[e+8>>2]=a,v=55;break;case 53:i[e>>2]=A,i[e+4>>2]=l,v=55;break;case 58:0|c&&Ht(c),i[(v=e)>>2]=0,i[v+4>>2]=0,i[s>>2]=0,i[b>>2]=-1,i[w>>2]=0,i[_>>2]=0,i[e+8>>2]=a,v=71;break;case 65:i[e>>2]=A,i[e+4>>2]=l,v=71;break;case 67:return 0|(a=0|i[_>>2])&&Ht(a),i[(y=e)>>2]=0,i[y+4>>2]=0,i[s>>2]=0,i[b>>2]=-1,i[w>>2]=0,i[_>>2]=0,i[e+8>>2]=A,void(M=o)}if(20==(0|v))return void(M=o);if(55==(0|v))return void(M=o);if(71==(0|v))return void(M=o)}}while(0);0|(a=0|i[y>>2])&&Ht(a),i[(v=e)>>2]=0,i[v+4>>2]=0,i[e+8>>2]=0,i[s>>2]=0,i[e+12>>2]=-1,i[w>>2]=0,i[y>>2]=0,M=o}}function yt(e,t){var n,r=0,s=0,o=0,a=0,A=0,l=0,c=0,u=0,h=0;n=M,M=M+16|0,h=n,s=0|nn(0|(e|=0),0|(t|=0),52),T(),s&=15,r=0|nn(0|e,0|t,45),T();do{if(s){for(;r=0|rn(s+4095|0,0,52),o=T()|-15728641&t,r=r|e|(A=0|rn(7,0,0|(a=3*(15-s|0)|0))),o|=l=0|T(),c=0|nn(0|e,0|t,0|a),T(),s=s+-1|0,!((c&=7)>>>0<6);){if(!s){u=4;break}t=o,e=r}if(4==(0|u)){r=0|nn(0|r,0|o,45),T();break}return h=0|rn(((h=!(0|c)&!!(0|je(r,o)))?2:1)+c|0,0,0|a),u=0|T()|t&~l,h|=e&~A,E(0|u),M=n,0|h}}while(0);return(r&=127)>>>0>120?(h=0,E(0|(u=0)),M=n,0|h):(Oe(h,0,r+1|0,0),u=0|i[h+4>>2],h=0|i[h>>2],E(0|u),M=n,0|h)}function wt(e,t,n){e|=0;var r,o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0;if(!(0|K(t|=0,n|=0)))return 0;if(t=0|Y(t),o=+s[n>>3],a=t&(a=+s[n+8>>3])<0?a+6.283185307179586:a,(0|(f=0|i[e>>2]))<=0)return 0;if(r=0|i[e+4>>2],t){t=0,d=a,n=-1,e=0;e:for(;;){for(h=e;l=+s[r+(h<<4)>>3],a=+s[r+(h<<4)+8>>3],A=+s[r+((e=(n+2|0)%(0|f)|0)<<4)>>3],c=+s[r+(e<<4)+8>>3],l>A?(u=l,l=c):(u=A,A=l,l=a,a=c),(o=o==A|o==u?o+2220446049250313e-31:o)u;){if((0|(n=h+1|0))>=(0|f)){n=22;break e}e=h,h=n,n=e}if(((u=(c=l<0?l+6.283185307179586:l)+(o-A)/(u-A)*((l=a<0?a+6.283185307179586:a)-c))<0?u+6.283185307179586:u)>(d=c==d|l==d?d+-2220446049250313e-31:d)&&(t^=1),(0|(e=h+1|0))>=(0|f)){n=22;break}n=h}if(22==(0|n))return 0|t}else{t=0,d=a,n=-1,e=0;e:for(;;){for(h=e;l=+s[r+(h<<4)>>3],a=+s[r+(h<<4)+8>>3],A=+s[r+((e=(n+2|0)%(0|f)|0)<<4)>>3],c=+s[r+(e<<4)+8>>3],l>A?(u=l,l=c):(u=A,A=l,l=a,a=c),(o=o==A|o==u?o+2220446049250313e-31:o)u;){if((0|(n=h+1|0))>=(0|f)){n=22;break e}e=h,h=n,n=e}if(l+(o-A)/(u-A)*(a-l)>(d=l==d|a==d?d+-2220446049250313e-31:d)&&(t^=1),(0|(e=h+1|0))>=(0|f)){n=22;break}n=h}if(22==(0|n))return 0|t}return 0}function xt(e,t){t|=0;var n,r,o,a,A,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0;if(!(r=0|i[(e|=0)>>2]))return i[t>>2]=0,i[t+4>>2]=0,i[t+8>>2]=0,i[t+12>>2]=0,i[t+16>>2]=0,i[t+20>>2]=0,i[t+24>>2]=0,void(i[t+28>>2]=0);if(s[(o=t+8|0)>>3]=17976931348623157e292,s[(a=t+24|0)>>3]=17976931348623157e292,s[t>>3]=-17976931348623157e292,s[(A=t+16|0)>>3]=-17976931348623157e292,!((0|r)<=0)){for(n=0|i[e+4>>2],m=17976931348623157e292,_=-17976931348623157e292,b=0,e=-1,d=17976931348623157e292,f=17976931348623157e292,g=-17976931348623157e292,u=-17976931348623157e292,v=0;c=+s[n+(v<<4)>>3],p=+s[n+(v<<4)+8>>3],h=+s[n+(((0|(e=e+2|0))==(0|r)?0:e)<<4)+8>>3],c>3]=c,d=c),p>3]=p,f=p),c>g?s[t>>3]=c:c=g,p>u&&(s[A>>3]=p,u=p),m=p>0&p_?p:_,b|=+l(+(p-h))>3.141592653589793,(0|(e=v+1|0))!=(0|r);)y=v,g=c,v=e,e=y;b&&(s[A>>3]=_,s[a>>3]=m)}}function Et(e){return 0|((e|=0)>>>0<4?0:15)}function Tt(e,t){t|=0;var n,r=0,o=0,a=0,A=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0,x=0,E=0,T=0,S=0;if(_=0|i[(e|=0)>>2]){if(s[(b=t+8|0)>>3]=17976931348623157e292,s[(v=t+24|0)>>3]=17976931348623157e292,s[t>>3]=-17976931348623157e292,s[(y=t+16|0)>>3]=-17976931348623157e292,(0|_)>0){for(a=0|i[e+4>>2],g=17976931348623157e292,m=-17976931348623157e292,o=0,r=-1,h=17976931348623157e292,d=17976931348623157e292,p=-17976931348623157e292,c=-17976931348623157e292,w=0;A=+s[a+(w<<4)>>3],f=+s[a+(w<<4)+8>>3],u=+s[a+(((0|(T=r+2|0))==(0|_)?0:T)<<4)+8>>3],A>3]=A,h=A),f>3]=f,d=f),A>p?s[t>>3]=A:A=p,f>c&&(s[y>>3]=f,c=f),g=f>0&fm?f:m,o|=+l(+(f-u))>3.141592653589793,(0|(r=w+1|0))!=(0|_);)T=w,p=A,w=r,r=T;o&&(s[y>>3]=m,s[v>>3]=g)}}else i[t>>2]=0,i[t+4>>2]=0,i[t+8>>2]=0,i[t+12>>2]=0,i[t+16>>2]=0,i[t+20>>2]=0,i[t+24>>2]=0,i[t+28>>2]=0;if(!((0|(r=0|i[(T=e+8|0)>>2]))<=0)){n=e+12|0,E=0;do{if(a=0|i[n>>2],o=E,v=t+((E=E+1|0)<<5)|0,y=0|i[a+(o<<3)>>2]){if(s[(w=t+(E<<5)+8|0)>>3]=17976931348623157e292,s[(e=t+(E<<5)+24|0)>>3]=17976931348623157e292,s[v>>3]=-17976931348623157e292,s[(x=t+(E<<5)+16|0)>>3]=-17976931348623157e292,(0|y)>0){for(_=0|i[a+(o<<3)+4>>2],g=17976931348623157e292,m=-17976931348623157e292,a=0,o=-1,b=0,h=17976931348623157e292,d=17976931348623157e292,f=-17976931348623157e292,c=-17976931348623157e292;A=+s[_+(b<<4)>>3],p=+s[_+(b<<4)+8>>3],u=+s[_+(((0|(o=o+2|0))==(0|y)?0:o)<<4)+8>>3],A>3]=A,h=A),p>3]=p,d=p),A>f?s[v>>3]=A:A=f,p>c&&(s[x>>3]=p,c=p),g=p>0&pm?p:m,a|=+l(+(p-u))>3.141592653589793,(0|(o=b+1|0))!=(0|y);)S=b,b=o,f=A,o=S;a&&(s[x>>3]=m,s[e>>3]=g)}}else i[v>>2]=0,i[v+4>>2]=0,i[v+8>>2]=0,i[v+12>>2]=0,i[v+16>>2]=0,i[v+20>>2]=0,i[v+24>>2]=0,i[v+28>>2]=0,r=0|i[T>>2]}while((0|E)<(0|r))}}function St(e,t,n){var r=0,s=0,o=0;if(!(0|wt(e|=0,t|=0,n|=0)))return 0;if((0|i[(s=e+8|0)>>2])<=0)return 1;for(r=e+12|0,e=0;;){if(o=e,e=e+1|0,0|wt((0|i[r>>2])+(o<<3)|0,t+(e<<5)|0,n)){e=0,r=6;break}if((0|e)>=(0|i[s>>2])){e=1,r=6;break}}return 6==(0|r)?0|e:0}function Ct(e,t,n,r){r|=0;var s,o,a=0,A=0,l=0,c=0,u=0;if(o=M,M=M+16|0,s=o,!(0|wt(e|=0,t|=0,l=8+(n|=0)|0)))return M=o,0;c=e+8|0;e:do{if((0|i[c>>2])>0){for(A=e+12|0,a=0;;){if(u=a,a=a+1|0,0|wt((0|i[A>>2])+(u<<3)|0,t+(a<<5)|0,l)){a=0;break}if((0|a)>=(0|i[c>>2]))break e}return M=o,0|a}}while(0);if(0|kt(e,t,n,r))return M=o,0;i[s>>2]=i[n>>2],i[s+4>>2]=l,a=0|i[c>>2];e:do{if((0|a)>0)for(e=e+12|0,l=0,A=a;;){if(a=0|i[e>>2],(0|i[a+(l<<3)>>2])>0){if(0|wt(s,r,0|i[a+(l<<3)+4>>2])){a=0;break e}if(a=l+1|0,0|kt((0|i[e>>2])+(l<<3)|0,t+(a<<5)|0,n,r)){a=0;break e}A=0|i[c>>2]}else a=l+1|0;if(!((0|a)<(0|A))){a=1;break}l=a}else a=1}while(0);return M=o,0|a}function kt(e,t,n,r){e|=0,n|=0;var o,a,A,l,c,u,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0,x=0,E=0,T=0,S=0;if(u=M,M=M+176|0,l=u+172|0,h=u+168|0,c=u,!(0|Z(t|=0,r|=0)))return M=u,0;if(function(e,t,n,r){var o,a,A,l,c;t|=0,n|=0,r|=0,e=(a=+s[16+(e|=0)>>3])<(c=+s[e+24>>3]),o=(l=+s[t+16>>3])<(A=+s[t+24>>3]),t=c-l>2]=e?o|t?1:2:0,i[r>>2]=o?e?1:t?2:1:0}(t,r,l,h),ln(0|c,0|n,168),(0|i[n>>2])>0){t=0;do{w=+ot(+s[(T=c+8+(t<<4)+8|0)>>3],0|i[h>>2]),s[T>>3]=w,t=t+1|0}while((0|t)<(0|i[n>>2]))}a=+s[r>>3],A=+s[r+8>>3],w=+ot(+s[r+16>>3],0|i[h>>2]),o=+ot(+s[r+24>>3],0|i[h>>2]);e:do{if((0|i[e>>2])>0){if(r=e+4|0,(0|(h=0|i[c>>2]))<=0)for(t=0;;)if((0|(t=t+1|0))>=(0|i[e>>2])){t=0;break e}for(n=0;;){if(t=0|i[r>>2],v=+s[t+(n<<4)>>3],y=+ot(+s[t+(n<<4)+8>>3],0|i[l>>2]),t=0|i[r>>2],T=(0|(n=n+1|0))%(0|i[e>>2])|0,d=+s[t+(T<<4)>>3],f=+ot(+s[t+(T<<4)+8>>3],0|i[l>>2]),!(v>=a)|!(d>=a)&&!(v<=A)|!(d<=A)&&!(y<=o)|!(f<=o)&&!(y>=w)|!(f>=w)){b=d-v,m=f-y,t=0;do{if(S=t,T=(0|(t=t+1|0))==(0|h)?0:t,d=+s[c+8+(S<<4)+8>>3],f=+s[c+8+(T<<4)+8>>3]-d,p=+s[c+8+(S<<4)>>3],!(0==(_=b*f-m*(g=+s[c+8+(T<<4)>>3]-p))||(x=y-d,E=v-p,g=(x*g-f*E)/_,g<0|g>1))&&(_=(b*x-m*E)/_)>=0&_<=1){t=1;break e}}while((0|t)<(0|h))}if((0|n)>=(0|i[e>>2])){t=0;break}}}else t=0}while(0);return M=u,0|t}function Rt(e,t,n,r){var s=0,o=0,a=0;if(0|kt(e|=0,t|=0,n|=0,r|=0))return 1;if((0|i[(o=e+8|0)>>2])<=0)return 0;for(s=e+12|0,e=0;;){if(a=e,e=e+1|0,0|kt((0|i[s>>2])+(a<<3)|0,t+(e<<5)|0,n,r)){e=1,s=6;break}if((0|e)>=(0|i[o>>2])){e=0,s=6;break}}return 6==(0|s)?0|e:0}function Pt(e,t,n,r,i){t|=0,n|=0,r|=0,i|=0;var o,a,A,l,c,u,h,d=0;l=+s[(e|=0)>>3],A=+s[t>>3]-l,a=+s[e+8>>3],o=+s[t+8>>3]-a,u=+s[n>>3],d=((d=+s[r>>3]-u)*(a-(h=+s[n+8>>3]))-(l-u)*(c=+s[r+8>>3]-h))/(A*c-o*d),s[i>>3]=l+A*d,s[i+8>>3]=a+o*d}function It(e,t){return t|=0,+l(+(+s[(e|=0)>>3]-+s[t>>3]))<1.1920928955078125e-7?0|(t=+l(+(+s[e+8>>3]-+s[t+8>>3]))<1.1920928955078125e-7):0|(t=0)}function Mt(e,t){var n,r,i;return t|=0,+((i=+s[(e|=0)>>3]-+s[t>>3])*i+(r=+s[e+8>>3]-+s[t+8>>3])*r+(n=+s[e+16>>3]-+s[t+16>>3])*n)}function Lt(e,t,n){n|=0;var r,s,o,a,A=0,l=0,c=0,u=0;if(a=M,M=M+32|0,u=a,0|(A=0|Ke(e|=0,t|=0,s=a+16|0)))return M=a,0|A;r=0|Be(e,t),o=0|Ve(e,t),function(e,t){e=7696+(28*(e|=0)|0)|0,i[(t|=0)>>2]=i[e>>2],i[t+4>>2]=i[e+4>>2],i[t+8>>2]=i[e+8>>2],i[t+12>>2]=i[e+12>>2]}(r,u),A=0|function(e,t){e|=0;var n=0,r=0;if((t|=0)>>>0>20)return-1;do{if((0|i[11120+(216*t|0)>>2])!=(0|e))if((0|i[11120+(216*t|0)+8>>2])!=(0|e))if((0|i[11120+(216*t|0)+16>>2])!=(0|e))if((0|i[11120+(216*t|0)+24>>2])!=(0|e))if((0|i[11120+(216*t|0)+32>>2])!=(0|e))if((0|i[11120+(216*t|0)+40>>2])!=(0|e))if((0|i[11120+(216*t|0)+48>>2])!=(0|e))if((0|i[11120+(216*t|0)+56>>2])!=(0|e))if((0|i[11120+(216*t|0)+64>>2])!=(0|e))if((0|i[11120+(216*t|0)+72>>2])!=(0|e))if((0|i[11120+(216*t|0)+80>>2])!=(0|e))if((0|i[11120+(216*t|0)+88>>2])!=(0|e))if((0|i[11120+(216*t|0)+96>>2])!=(0|e))if((0|i[11120+(216*t|0)+104>>2])!=(0|e))if((0|i[11120+(216*t|0)+112>>2])!=(0|e))if((0|i[11120+(216*t|0)+120>>2])!=(0|e))if((0|i[11120+(216*t|0)+128>>2])!=(0|e)){if((0|i[11120+(216*t|0)+136>>2])!=(0|e)){if((0|i[11120+(216*t|0)+144>>2])==(0|e)){e=0,n=2,r=0;break}if((0|i[11120+(216*t|0)+152>>2])==(0|e)){e=0,n=2,r=1;break}if((0|i[11120+(216*t|0)+160>>2])==(0|e)){e=0,n=2,r=2;break}if((0|i[11120+(216*t|0)+168>>2])==(0|e)){e=1,n=2,r=0;break}if((0|i[11120+(216*t|0)+176>>2])==(0|e)){e=1,n=2,r=1;break}if((0|i[11120+(216*t|0)+184>>2])==(0|e)){e=1,n=2,r=2;break}if((0|i[11120+(216*t|0)+192>>2])==(0|e)){e=2,n=2,r=0;break}if((0|i[11120+(216*t|0)+200>>2])==(0|e)){e=2,n=2,r=1;break}if((0|i[11120+(216*t|0)+208>>2])==(0|e)){e=2,n=2,r=2;break}return-1}e=2,n=1,r=2}else e=2,n=1,r=1;else e=2,n=1,r=0;else e=1,n=1,r=2;else e=1,n=1,r=1;else e=1,n=1,r=0;else e=0,n=1,r=2;else e=0,n=1,r=1;else e=0,n=1,r=0;else e=2,n=0,r=2;else e=2,n=0,r=1;else e=2,n=0,r=0;else e=1,n=0,r=2;else e=1,n=0,r=1;else e=1,n=0,r=0;else e=0,n=0,r=2;else e=0,n=0,r=1;else e=0,n=0,r=0}while(0);return 0|i[11120+(216*t|0)+(72*n|0)+(24*e|0)+(r<<3)+4>>2]}(r,0|i[s>>2]);do{if(0|G(r)){switch(0|r){case 4:l=0;break;case 14:l=1;break;case 24:l=2;break;case 38:l=3;break;case 49:l=4;break;case 58:l=5;break;case 63:l=6;break;case 72:l=7;break;case 83:l=8;break;case 97:l=9;break;case 107:l=10;break;case 117:l=11;break;default:S(27795,27797,75,27806)}if(c=0|i[26416+(24*l|0)+8>>2],t=0|i[26416+(24*l|0)+16>>2],(0|(e=0|i[s>>2]))!=(0|i[u>>2])&&(u=0|z(r))|(0|(e=0|i[s>>2]))==(0|t)&&(A=(A+1|0)%6|0),3==(0|o)&(0|e)==(0|t)){A=(A+5|0)%6|0;break}5==(0|o)&(0|e)==(0|c)&&(A=(A+1|0)%6|0)}}while(0);return i[n>>2]=A,M=a,0}function Nt(e,t,n,r){n|=0,r|=0;var s,o,a,A,l,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0;if(l=M,M=M+32|0,v=l+24|0,A=l+20|0,a=l+8|0,o=l+16|0,s=l,f=(f=!(0|je(e|=0,t|=0)))?6:5,g=0|nn(0|e,0|t,52),T(),f>>>0<=n>>>0)return M=l,2;!(m=!(0|(g&=15)))&&!((_=0|rn(7,0,3*(15^g)|0))&e)&!((0|T())&t)?c=n:u=4;e:do{if(4==(0|u)){if((0|((c=!!(0|je(e,t)))?4:5))<(0|n))return M=l,1;if(0|Lt(e,t,v))return M=l,1;if(u=(0|i[v>>2])+n|0,7==(0|(_=0|i[(c=c?26704+((0|u)%5<<2)|0:26736+((0|u)%6<<2)|0)>>2])))return M=l,1;i[A>>2]=0,c=0|O(e,t,_,A,a);do{if(!c){if(p=0|i[(d=a)>>2],u=(h=(d=0|i[d+4>>2])>>>0>>0|(0|d)==(0|t)&p>>>0>>0)?p:e,h=h?d:t,!m&&!(p&(m=0|rn(7,0,3*(15^g)|0)))&!(d&(0|T())))c=n;else{if(d=(n+-1+f|0)%(0|f)|0,c=0|je(e,t),(0|d)<0&&S(27795,27797,248,27822),(0|((f=!!(0|c))?4:5))<(0|d)&&S(27795,27797,248,27822),0|Lt(e,t,v)&&S(27795,27797,248,27822),c=(0|i[v>>2])+d|0,7==(0|(d=0|i[(c=f?26704+((0|c)%5<<2)|0:26736+((0|c)%6<<2)|0)>>2]))&&S(27795,27797,248,27822),i[o>>2]=0,0|(c=0|O(e,t,d,o,s)))break;f=0|i[(p=s)>>2],p=0|i[p+4>>2];do{if(p>>>0>>0|(0|p)==(0|h)&f>>>0>>0){if(u=0|je(f,p)?0|U(f,p,e,t):0|i[26800+(((0|i[o>>2])+(0|i[26768+(d<<2)>>2])|0)%6<<2)>>2],c=0|je(f,p),(u+-1|0)>>>0>5){c=-1,u=f,h=p;break}if(1==(0|u)&(c=!!(0|c))){c=-1,u=f,h=p;break}do{if(!(0|Lt(f,p,v))){if(c){c=(5+(0|i[26352+(u<<2)>>2])-(0|i[v>>2])|0)%5|0;break}c=(6+(0|i[26384+(u<<2)>>2])-(0|i[v>>2])|0)%6|0;break}c=-1}while(0);u=f,h=p}else c=n}while(0);p=0|i[(d=a)>>2],d=0|i[d+4>>2]}if((0|u)==(0|p)&(0|h)==(0|d)){if(e=(f=!!(0|je(p,d)))?0|U(p,d,e,t):0|i[26800+(((0|i[A>>2])+(0|i[26768+(_<<2)>>2])|0)%6<<2)>>2],c=0|je(p,d),(e+-1|0)>>>0<=5&&!(1==(0|e)&(b=!!(0|c))))do{if(!(0|Lt(p,d,v))){if(b){c=(5+(0|i[26352+(e<<2)>>2])-(0|i[v>>2])|0)%5|0;break}c=(6+(0|i[26384+(e<<2)>>2])-(0|i[v>>2])|0)%6|0;break}c=-1}while(0);else c=-1;c=6==(0|(c=c+1|0))|f&5==(0|c)?0:c}t=h,e=u;break e}}while(0);return M=l,0|c}}while(0);return b=0|rn(0|c,0,56),v=T()|-2130706433&t|536870912,i[r>>2]=b|e,i[r+4>>2]=v,M=l,0}function Bt(e,t){e|=0;var n,r,s=0,o=0;return r=M,M=M+16|0,n=r,!0&536870912==(2013265920&(t|=0))&&0|De(e,s=-2130706433&t|134217728)?(o=0|nn(0|e,0|t,56),T(),s=(o=!(0|Nt(e,s,7&o,n)))&((0|i[(s=n)>>2])==(0|e)?(0|i[s+4>>2])==(0|t):0)&1,M=r,0|s):(M=r,0|(s=0))}function Dt(e,t,n){e|=0,n|=0;var r=0;(0|(t|=0))>0?(r=0|$t(t,4),i[e>>2]=r,r||S(27835,27858,40,27872)):i[e>>2]=0,i[e+4>>2]=t,i[e+8>>2]=0,i[e+12>>2]=n}function Ot(e){var t,n,r,o=0,a=0,A=0,c=0;t=4+(e|=0)|0,n=e+12|0,r=e+8|0;e:for(;;){for(a=0|i[t>>2],o=0;;){if((0|o)>=(0|a))break e;if(A=0|i[e>>2],c=0|i[A+(o<<2)>>2])break;o=o+1|0}o=A+(~~(+l(+ +u(10,+ +(15-(0|i[n>>2])|0))*(+s[c>>3]+ +s[c+8>>3]))%+(0|a))>>>0<<2)|0,a=0|i[o>>2];t:do{if(0|a){if(A=c+32|0,(0|a)==(0|c))i[o>>2]=i[A>>2];else{if(!(o=0|i[(a=a+32|0)>>2]))break;for(;(0|o)!=(0|c);)if(!(o=0|i[(a=o+32|0)>>2]))break t;i[a>>2]=i[A>>2]}Ht(c),i[r>>2]=(0|i[r>>2])-1}}while(0)}Ht(0|i[e>>2])}function Ft(e){var t,n=0,r=0;for(t=0|i[4+(e|=0)>>2],r=0;;){if((0|r)>=(0|t)){n=0,r=4;break}if(n=0|i[(0|i[e>>2])+(r<<2)>>2]){r=4;break}r=r+1|0}return 4==(0|r)?0|n:0}function Ut(e,t){t|=0;var n=0,r=0,o=0,a=0;if(n=~~(+l(+ +u(10,+ +(15-(0|i[12+(e|=0)>>2])|0))*(+s[t>>3]+ +s[t+8>>3]))%+(0|i[e+4>>2]))>>>0,n=(0|i[e>>2])+(n<<2)|0,!(r=0|i[n>>2]))return 1;a=t+32|0;do{if((0|r)!=(0|t)){if(!(n=0|i[r+32>>2]))return 1;for(o=n;;){if((0|o)==(0|t)){o=8;break}if(!(n=0|i[o+32>>2])){n=1,o=10;break}r=o,o=n}if(8==(0|o)){i[r+32>>2]=i[a>>2];break}if(10==(0|o))return 0|n}else i[n>>2]=i[a>>2]}while(0);return Ht(t),i[(a=e+8|0)>>2]=(0|i[a>>2])-1,0}function jt(e,t,n){e|=0,t|=0,n|=0;var r,o=0,a=0,A=0;(r=0|Wt(40))||S(27888,27858,98,27901),i[r>>2]=i[t>>2],i[r+4>>2]=i[t+4>>2],i[r+8>>2]=i[t+8>>2],i[r+12>>2]=i[t+12>>2],i[(a=r+16|0)>>2]=i[n>>2],i[a+4>>2]=i[n+4>>2],i[a+8>>2]=i[n+8>>2],i[a+12>>2]=i[n+12>>2],i[r+32>>2]=0,a=~~(+l(+ +u(10,+ +(15-(0|i[e+12>>2])|0))*(+s[t>>3]+ +s[t+8>>3]))%+(0|i[e+4>>2]))>>>0,a=(0|i[e>>2])+(a<<2)|0,o=0|i[a>>2];do{if(o){for(;!(0|st(o,t)&&0|st(o+16|0,n));)if(a=0|i[o+32>>2],!(0|i[(o=0|a?a:o)+32>>2])){A=10;break}if(10==(0|A)){i[o+32>>2]=r;break}return Ht(r),0|o}i[a>>2]=r}while(0);return i[(A=e+8|0)>>2]=1+(0|i[A>>2]),0|r}function Gt(e,t,n){t|=0,n|=0;var r=0,o=0;if(o=~~(+l(+ +u(10,+ +(15-(0|i[12+(e|=0)>>2])|0))*(+s[t>>3]+ +s[t+8>>3]))%+(0|i[e+4>>2]))>>>0,!(o=0|i[(0|i[e>>2])+(o<<2)>>2]))return 0;if(!n){for(e=o;;){if(0|st(e,t)){r=10;break}if(!(e=0|i[e+32>>2])){e=0,r=10;break}}if(10==(0|r))return 0|e}for(e=o;;){if(0|st(e,t)&&0|st(e+16|0,n)){r=10;break}if(!(e=0|i[e+32>>2])){e=0,r=10;break}}return 10==(0|r)?0|e:0}function zt(e,t){t|=0;var n=0;if(n=~~(+l(+ +u(10,+ +(15-(0|i[12+(e|=0)>>2])|0))*(+s[t>>3]+ +s[t+8>>3]))%+(0|i[e+4>>2]))>>>0,!(e=0|i[(0|i[e>>2])+(n<<2)>>2]))return 0;for(;;){if(0|st(e,t)){t=5;break}if(!(e=0|i[e+32>>2])){e=0,t=5;break}}return 5==(0|t)?0|e:0}function Vt(e){return 0|+un(+(e=+e))}function Wt(e){e|=0;var t,n=0,r=0,s=0,o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0;t=M,M=M+16|0,f=t;do{if(e>>>0<245){if(e=(u=e>>>0<11?16:e+11&-8)>>>3,3&(r=(d=0|i[6981])>>>e))return s=0|i[(r=8+(e=27964+((n=(1&r^1)+e|0)<<1<<2)|0)|0)>>2],(0|(a=0|i[(o=s+8|0)>>2]))==(0|e)?i[6981]=d&~(1<>2]=e,i[r>>2]=a),w=n<<3,i[s+4>>2]=3|w,i[(w=s+w+4|0)>>2]=1|i[w>>2],M=t,0|o;if(u>>>0>(h=0|i[6983])>>>0){if(0|r)return n=((n=r<>>=l=n>>>12&16)>>>5&8)|l|(a=(n>>>=r)>>>2&4)|(e=(n>>>=a)>>>1&2)|(s=(n>>>=e)>>>1&1))+(n>>>s)|0)<<1<<2)|0)|0)>>2],(0|(r=0|i[(l=a+8|0)>>2]))==(0|n)?(e=d&~(1<>2]=n,i[e>>2]=r,e=d),A=(w=s<<3)-u|0,i[a+4>>2]=3|u,i[4+(o=a+u|0)>>2]=1|A,i[a+w>>2]=A,0|h&&(s=0|i[6986],r=27964+((n=h>>>3)<<1<<2)|0,e&(n=1<>2]:(i[6981]=e|n,n=r,e=r+8|0),i[e>>2]=s,i[n+12>>2]=s,i[s+8>>2]=n,i[s+12>>2]=r),i[6983]=A,i[6986]=o,M=t,0|l;if(a=0|i[6982]){for(r=(a&0-a)-1|0,r=c=0|i[28228+(((s=(r>>>=o=r>>>12&16)>>>5&8)|o|(A=(r>>>=s)>>>2&4)|(l=(r>>>=A)>>>1&2)|(c=(r>>>=l)>>>1&1))+(r>>>c)<<2)>>2],l=c,c=(-8&i[c+4>>2])-u|0;(e=0|i[r+16>>2])||(e=0|i[r+20>>2]);)r=e,l=(o=(A=(-8&i[e+4>>2])-u|0)>>>0>>0)?e:l,c=o?A:c;if((A=l+u|0)>>>0>l>>>0){o=0|i[l+24>>2],n=0|i[l+12>>2];do{if((0|n)==(0|l)){if(!(n=0|i[(e=l+20|0)>>2])&&!(n=0|i[(e=l+16|0)>>2])){r=0;break}for(;;)if(r=0|i[(s=n+20|0)>>2])n=r,e=s;else{if(!(r=0|i[(s=n+16|0)>>2]))break;n=r,e=s}i[e>>2]=0,r=n}else r=0|i[l+8>>2],i[r+12>>2]=n,i[n+8>>2]=r,r=n}while(0);do{if(0|o){if(n=0|i[l+28>>2],(0|l)==(0|i[(e=28228+(n<<2)|0)>>2])){if(i[e>>2]=r,!r){i[6982]=a&~(1<>2])==(0|l)?w:o+20)>>2]=r,!r)break;i[r+24>>2]=o,0|(n=0|i[l+16>>2])&&(i[r+16>>2]=n,i[n+24>>2]=r),0|(n=0|i[l+20>>2])&&(i[r+20>>2]=n,i[n+24>>2]=r)}}while(0);return c>>>0<16?(w=c+u|0,i[l+4>>2]=3|w,i[(w=l+w+4|0)>>2]=1|i[w>>2]):(i[l+4>>2]=3|u,i[A+4>>2]=1|c,i[A+c>>2]=c,0|h&&(s=0|i[6986],r=27964+((n=h>>>3)<<1<<2)|0,(n=1<>2]:(i[6981]=n|d,n=r,e=r+8|0),i[e>>2]=s,i[n+12>>2]=s,i[s+8>>2]=n,i[s+12>>2]=r),i[6983]=c,i[6986]=A),M=t,0|l+8}d=u}else d=u}else d=u}else if(e>>>0<=4294967231)if(u=-8&(e=e+11|0),s=0|i[6982]){o=0-u|0,c=(e>>>=8)?u>>>0>16777215?31:u>>>(7+(c=14-((l=(520192+(m=e<<(d=(e+1048320|0)>>>16&8))|0)>>>16&4)|d|(c=(245760+(m<<=l)|0)>>>16&2))+(m<>>15)|0)|0)&1|c<<1:0,r=0|i[28228+(c<<2)>>2];e:do{if(r)for(e=0,l=u<<(31==(0|c)?0:25-(c>>>1)|0),a=0;;){if((A=(-8&i[r+4>>2])-u|0)>>>0>>0){if(!A){e=r,o=0,m=65;break e}e=r,o=A}if(a=!(0|(m=0|i[r+20>>2]))|(0|m)==(0|(r=0|i[r+16+(l>>>31<<2)>>2]))?a:m,!r){r=a,m=61;break}l<<=1}else r=0,e=0,m=61}while(0);if(61==(0|m)){if(!(0|r)&!(0|e)){if(!(e=((e=2<>>=A=d>>>12&16)>>>5&8)|A|(l=(d>>>=a)>>>2&4)|(c=(d>>>=l)>>>1&2)|(r=(d>>>=c)>>>1&1))+(d>>>r)<<2)>>2]}r?m=65:(l=e,A=o)}if(65==(0|m))for(a=r;;){if(o=(r=(d=(-8&i[a+4>>2])-u|0)>>>0>>0)?d:o,e=r?a:e,(r=0|i[a+16>>2])||(r=0|i[a+20>>2]),!r){l=e,A=o;break}a=r}if(0|l&&A>>>0<((0|i[6983])-u|0)>>>0&&(h=l+u|0)>>>0>l>>>0){a=0|i[l+24>>2],n=0|i[l+12>>2];do{if((0|n)==(0|l)){if(!(n=0|i[(e=l+20|0)>>2])&&!(n=0|i[(e=l+16|0)>>2])){n=0;break}for(;;)if(r=0|i[(o=n+20|0)>>2])n=r,e=o;else{if(!(r=0|i[(o=n+16|0)>>2]))break;n=r,e=o}i[e>>2]=0}else w=0|i[l+8>>2],i[w+12>>2]=n,i[n+8>>2]=w}while(0);do{if(a){if(e=0|i[l+28>>2],(0|l)==(0|i[(r=28228+(e<<2)|0)>>2])){if(i[r>>2]=n,!n){s&=~(1<>2])==(0|l)?w:a+20)>>2]=n,!n)break;i[n+24>>2]=a,0|(e=0|i[l+16>>2])&&(i[n+16>>2]=e,i[e+24>>2]=n),(e=0|i[l+20>>2])&&(i[n+20>>2]=e,i[e+24>>2]=n)}}while(0);e:do{if(A>>>0<16)w=A+u|0,i[l+4>>2]=3|w,i[(w=l+w+4|0)>>2]=1|i[w>>2];else{if(i[l+4>>2]=3|u,i[h+4>>2]=1|A,i[h+A>>2]=A,n=A>>>3,A>>>0<256){r=27964+(n<<1<<2)|0,(e=0|i[6981])&(n=1<>2]:(i[6981]=e|n,n=r,e=r+8|0),i[e>>2]=h,i[n+12>>2]=h,i[h+8>>2]=n,i[h+12>>2]=r;break}if(n=28228+((r=(n=A>>>8)?A>>>0>16777215?31:A>>>(7+(r=14-((v=(520192+(w=n<<(y=(n+1048320|0)>>>16&8))|0)>>>16&4)|y|(r=(245760+(w<<=v)|0)>>>16&2))+(w<>>15)|0)|0)&1|r<<1:0)<<2)|0,i[h+28>>2]=r,i[4+(e=h+16|0)>>2]=0,i[e>>2]=0,!(s&(e=1<>2]=h,i[h+24>>2]=n,i[h+12>>2]=h,i[h+8>>2]=h;break}n=0|i[n>>2];t:do{if((-8&i[n+4>>2])!=(0|A)){for(s=A<<(31==(0|r)?0:25-(r>>>1)|0);e=0|i[(r=n+16+(s>>>31<<2)|0)>>2];){if((-8&i[e+4>>2])==(0|A)){n=e;break t}s<<=1,n=e}i[r>>2]=h,i[h+24>>2]=n,i[h+12>>2]=h,i[h+8>>2]=h;break e}}while(0);w=0|i[(y=n+8|0)>>2],i[w+12>>2]=h,i[y>>2]=h,i[h+8>>2]=w,i[h+12>>2]=n,i[h+24>>2]=0}}while(0);return M=t,0|l+8}d=u}else d=u;else d=-1}while(0);if((r=0|i[6983])>>>0>=d>>>0)return n=r-d|0,e=0|i[6986],n>>>0>15?(w=e+d|0,i[6986]=w,i[6983]=n,i[w+4>>2]=1|n,i[e+r>>2]=n,i[e+4>>2]=3|d):(i[6983]=0,i[6986]=0,i[e+4>>2]=3|r,i[(w=e+r+4|0)>>2]=1|i[w>>2]),M=t,0|e+8;if((A=0|i[6984])>>>0>d>>>0)return v=A-d|0,i[6984]=v,y=(w=0|i[6987])+d|0,i[6987]=y,i[y+4>>2]=1|v,i[w+4>>2]=3|d,M=t,0|w+8;if(0|i[7099]?e=0|i[7101]:(i[7101]=4096,i[7100]=4096,i[7102]=-1,i[7103]=-1,i[7104]=0,i[7092]=0,i[7099]=-16&f^1431655768,e=4096),l=d+48|0,(u=(a=e+(c=d+47|0)|0)&(o=0-e|0))>>>0<=d>>>0)return M=t,0;if(0|(e=0|i[7091])&&(f=(h=0|i[7089])+u|0)>>>0<=h>>>0|f>>>0>e>>>0)return M=t,0;e:do{if(4&i[7092])n=0,m=143;else{r=0|i[6987];t:do{if(r){for(s=28372;!((f=0|i[s>>2])>>>0<=r>>>0&&(f+(0|i[s+4>>2])|0)>>>0>r>>>0);){if(!(e=0|i[s+8>>2])){m=128;break t}s=e}if((n=a-A&o)>>>0<2147483647)if((0|(e=0|hn(0|n)))==((0|i[s>>2])+(0|i[s+4>>2])|0)){if(-1!=(0|e)){A=n,a=e,m=145;break e}}else s=e,m=136;else n=0}else m=128}while(0);do{if(128==(0|m))if(-1!=(0|(r=0|hn(0)))&&(n=r,g=(n=((g=(p=0|i[7100])-1|0)&n?(g+n&0-p)-n|0:0)+u|0)+(p=0|i[7089])|0,n>>>0>d>>>0&n>>>0<2147483647)){if(0|(f=0|i[7091])&&g>>>0<=p>>>0|g>>>0>f>>>0){n=0;break}if((0|(e=0|hn(0|n)))==(0|r)){A=n,a=r,m=145;break e}s=e,m=136}else n=0}while(0);do{if(136==(0|m)){if(r=0-n|0,!(l>>>0>n>>>0&n>>>0<2147483647&-1!=(0|s))){if(-1==(0|s)){n=0;break}A=n,a=s,m=145;break e}if((e=c-n+(e=0|i[7101])&0-e)>>>0>=2147483647){A=n,a=s,m=145;break e}if(-1==(0|hn(0|e))){hn(0|r),n=0;break}A=e+n|0,a=s,m=145;break e}}while(0);i[7092]=4|i[7092],m=143}}while(0);if(143==(0|m)&&u>>>0<2147483647&&!(-1==(0|(v=0|hn(0|u)))|1^(b=(_=(g=0|hn(0))-v|0)>>>0>(d+40|0)>>>0)|v>>>0>>0&-1!=(0|v)&-1!=(0|g)^1)&&(A=b?_:n,a=v,m=145),145==(0|m)){n=(0|i[7089])+A|0,i[7089]=n,n>>>0>(0|i[7090])>>>0&&(i[7090]=n),c=0|i[6987];e:do{if(c){for(n=28372;;){if((0|a)==((e=0|i[n>>2])+(r=0|i[n+4>>2])|0)){m=154;break}if(!(s=0|i[n+8>>2]))break;n=s}if(!(154!=(0|m)||(y=n+4|0,8&i[n+12>>2]))&&a>>>0>c>>>0&e>>>0<=c>>>0){i[y>>2]=r+A,y=c+(v=7&(v=c+8|0)?0-v&7:0)|0,v=(w=(0|i[6984])+A|0)-v|0,i[6987]=y,i[6984]=v,i[y+4>>2]=1|v,i[c+w+4>>2]=40,i[6988]=i[7103];break}for(a>>>0<(0|i[6985])>>>0&&(i[6985]=a),r=a+A|0,n=28372;;){if((0|i[n>>2])==(0|r)){m=162;break}if(!(e=0|i[n+8>>2]))break;n=e}if(162==(0|m)&&!(8&i[n+12>>2])){i[n>>2]=a,i[(h=n+4|0)>>2]=(0|i[h>>2])+A,u=(h=a+(7&(h=a+8|0)?0-h&7:0)|0)+d|0,l=(n=r+(7&(n=r+8|0)?0-n&7:0)|0)-h-d|0,i[h+4>>2]=3|d;t:do{if((0|c)==(0|n))w=(0|i[6984])+l|0,i[6984]=w,i[6987]=u,i[u+4>>2]=1|w;else{if((0|i[6986])==(0|n)){w=(0|i[6983])+l|0,i[6983]=w,i[6986]=u,i[u+4>>2]=1|w,i[u+w>>2]=w;break}if(1==(3&(e=0|i[n+4>>2]))){A=-8&e,s=e>>>3;n:do{if(e>>>0<256){if(e=0|i[n+8>>2],(0|(r=0|i[n+12>>2]))==(0|e)){i[6981]=i[6981]&~(1<>2]=r,i[r+8>>2]=e;break}a=0|i[n+24>>2],e=0|i[n+12>>2];do{if((0|e)==(0|n)){if(e=0|i[(s=4+(r=n+16|0)|0)>>2])r=s;else if(!(e=0|i[r>>2])){e=0;break}for(;;)if(s=0|i[(o=e+20|0)>>2])e=s,r=o;else{if(!(s=0|i[(o=e+16|0)>>2]))break;e=s,r=o}i[r>>2]=0}else w=0|i[n+8>>2],i[w+12>>2]=e,i[e+8>>2]=w}while(0);if(!a)break;s=28228+((r=0|i[n+28>>2])<<2)|0;do{if((0|i[s>>2])==(0|n)){if(i[s>>2]=e,0|e)break;i[6982]=i[6982]&~(1<>2])==(0|n)?w:a+20)>>2]=e,!e)break n}while(0);if(i[e+24>>2]=a,0|(s=0|i[(r=n+16|0)>>2])&&(i[e+16>>2]=s,i[s+24>>2]=e),!(r=0|i[r+4>>2]))break;i[e+20>>2]=r,i[r+24>>2]=e}while(0);n=n+A|0,o=A+l|0}else o=l;if(i[(n=n+4|0)>>2]=-2&i[n>>2],i[u+4>>2]=1|o,i[u+o>>2]=o,n=o>>>3,o>>>0<256){r=27964+(n<<1<<2)|0,(e=0|i[6981])&(n=1<>2]:(i[6981]=e|n,n=r,e=r+8|0),i[e>>2]=u,i[n+12>>2]=u,i[u+8>>2]=n,i[u+12>>2]=r;break}n=o>>>8;do{if(n){if(o>>>0>16777215){s=31;break}s=o>>>(7+(s=14-((v=(520192+(w=n<<(y=(n+1048320|0)>>>16&8))|0)>>>16&4)|y|(s=(245760+(w<<=v)|0)>>>16&2))+(w<>>15)|0)|0)&1|s<<1}else s=0}while(0);if(n=28228+(s<<2)|0,i[u+28>>2]=s,i[4+(e=u+16|0)>>2]=0,i[e>>2]=0,!((e=0|i[6982])&(r=1<>2]=u,i[u+24>>2]=n,i[u+12>>2]=u,i[u+8>>2]=u;break}n=0|i[n>>2];n:do{if((-8&i[n+4>>2])!=(0|o)){for(s=o<<(31==(0|s)?0:25-(s>>>1)|0);e=0|i[(r=n+16+(s>>>31<<2)|0)>>2];){if((-8&i[e+4>>2])==(0|o)){n=e;break n}s<<=1,n=e}i[r>>2]=u,i[u+24>>2]=n,i[u+12>>2]=u,i[u+8>>2]=u;break t}}while(0);w=0|i[(y=n+8|0)>>2],i[w+12>>2]=u,i[y>>2]=u,i[u+8>>2]=w,i[u+12>>2]=n,i[u+24>>2]=0}}while(0);return M=t,0|h+8}for(n=28372;!((e=0|i[n>>2])>>>0<=c>>>0&&(w=e+(0|i[n+4>>2])|0)>>>0>c>>>0);)n=0|i[n+8>>2];n=(e=(e=(o=w+-47|0)+(7&(e=o+8|0)?0-e&7:0)|0)>>>0<(o=c+16|0)>>>0?c:e)+8|0,y=a+(v=7&(v=a+8|0)?0-v&7:0)|0,v=(r=A+-40|0)-v|0,i[6987]=y,i[6984]=v,i[y+4>>2]=1|v,i[a+r+4>>2]=40,i[6988]=i[7103],i[(r=e+4|0)>>2]=27,i[n>>2]=i[7093],i[n+4>>2]=i[7094],i[n+8>>2]=i[7095],i[n+12>>2]=i[7096],i[7093]=a,i[7094]=A,i[7096]=0,i[7095]=n,n=e+24|0;do{y=n,i[(n=n+4|0)>>2]=7}while((y+8|0)>>>0>>0);if((0|e)!=(0|c)){if(a=e-c|0,i[r>>2]=-2&i[r>>2],i[c+4>>2]=1|a,i[e>>2]=a,n=a>>>3,a>>>0<256){r=27964+(n<<1<<2)|0,(e=0|i[6981])&(n=1<>2]:(i[6981]=e|n,n=r,e=r+8|0),i[e>>2]=c,i[n+12>>2]=c,i[c+8>>2]=n,i[c+12>>2]=r;break}if(r=28228+((s=(n=a>>>8)?a>>>0>16777215?31:a>>>(7+(s=14-((v=(520192+(w=n<<(y=(n+1048320|0)>>>16&8))|0)>>>16&4)|y|(s=(245760+(w<<=v)|0)>>>16&2))+(w<>>15)|0)|0)&1|s<<1:0)<<2)|0,i[c+28>>2]=s,i[c+20>>2]=0,i[o>>2]=0,!((n=0|i[6982])&(e=1<>2]=c,i[c+24>>2]=r,i[c+12>>2]=c,i[c+8>>2]=c;break}n=0|i[r>>2];t:do{if((-8&i[n+4>>2])!=(0|a)){for(s=a<<(31==(0|s)?0:25-(s>>>1)|0);e=0|i[(r=n+16+(s>>>31<<2)|0)>>2];){if((-8&i[e+4>>2])==(0|a)){n=e;break t}s<<=1,n=e}i[r>>2]=c,i[c+24>>2]=n,i[c+12>>2]=c,i[c+8>>2]=c;break e}}while(0);w=0|i[(y=n+8|0)>>2],i[w+12>>2]=c,i[y>>2]=c,i[c+8>>2]=w,i[c+12>>2]=n,i[c+24>>2]=0}}else!(0|(w=0|i[6985]))|a>>>0>>0&&(i[6985]=a),i[7093]=a,i[7094]=A,i[7096]=0,i[6990]=i[7099],i[6989]=-1,i[6994]=27964,i[6993]=27964,i[6996]=27972,i[6995]=27972,i[6998]=27980,i[6997]=27980,i[7e3]=27988,i[6999]=27988,i[7002]=27996,i[7001]=27996,i[7004]=28004,i[7003]=28004,i[7006]=28012,i[7005]=28012,i[7008]=28020,i[7007]=28020,i[7010]=28028,i[7009]=28028,i[7012]=28036,i[7011]=28036,i[7014]=28044,i[7013]=28044,i[7016]=28052,i[7015]=28052,i[7018]=28060,i[7017]=28060,i[7020]=28068,i[7019]=28068,i[7022]=28076,i[7021]=28076,i[7024]=28084,i[7023]=28084,i[7026]=28092,i[7025]=28092,i[7028]=28100,i[7027]=28100,i[7030]=28108,i[7029]=28108,i[7032]=28116,i[7031]=28116,i[7034]=28124,i[7033]=28124,i[7036]=28132,i[7035]=28132,i[7038]=28140,i[7037]=28140,i[7040]=28148,i[7039]=28148,i[7042]=28156,i[7041]=28156,i[7044]=28164,i[7043]=28164,i[7046]=28172,i[7045]=28172,i[7048]=28180,i[7047]=28180,i[7050]=28188,i[7049]=28188,i[7052]=28196,i[7051]=28196,i[7054]=28204,i[7053]=28204,i[7056]=28212,i[7055]=28212,y=a+(v=7&(v=a+8|0)?0-v&7:0)|0,v=(w=A+-40|0)-v|0,i[6987]=y,i[6984]=v,i[y+4>>2]=1|v,i[a+w+4>>2]=40,i[6988]=i[7103]}while(0);if((n=0|i[6984])>>>0>d>>>0)return v=n-d|0,i[6984]=v,y=(w=0|i[6987])+d|0,i[6987]=y,i[y+4>>2]=1|v,i[w+4>>2]=3|d,M=t,0|w+8}return i[(w=27920)>>2]=12,M=t,0}function Ht(e){var t=0,n=0,r=0,s=0,o=0,a=0,A=0,l=0;if(e|=0){n=e+-8|0,s=0|i[6985],l=n+(t=-8&(e=0|i[e+-4>>2]))|0;do{if(1&e)A=n,a=n;else{if(r=0|i[n>>2],!(3&e))return;if(o=r+t|0,(a=n+(0-r)|0)>>>0>>0)return;if((0|i[6986])==(0|a)){if(3&~(t=0|i[(e=l+4|0)>>2])){A=a,t=o;break}return i[6983]=o,i[e>>2]=-2&t,i[a+4>>2]=1|o,void(i[a+o>>2]=o)}if(n=r>>>3,r>>>0<256){if(e=0|i[a+8>>2],(0|(t=0|i[a+12>>2]))==(0|e)){i[6981]=i[6981]&~(1<>2]=t,i[t+8>>2]=e,A=a,t=o;break}s=0|i[a+24>>2],e=0|i[a+12>>2];do{if((0|e)==(0|a)){if(e=0|i[(n=4+(t=a+16|0)|0)>>2])t=n;else if(!(e=0|i[t>>2])){e=0;break}for(;;)if(n=0|i[(r=e+20|0)>>2])e=n,t=r;else{if(!(n=0|i[(r=e+16|0)>>2]))break;e=n,t=r}i[t>>2]=0}else A=0|i[a+8>>2],i[A+12>>2]=e,i[e+8>>2]=A}while(0);if(s){if(t=0|i[a+28>>2],(0|i[(n=28228+(t<<2)|0)>>2])==(0|a)){if(i[n>>2]=e,!e){i[6982]=i[6982]&~(1<>2])==(0|a)?A:s+20)>>2]=e,!e){A=a,t=o;break}i[e+24>>2]=s,0|(n=0|i[(t=a+16|0)>>2])&&(i[e+16>>2]=n,i[n+24>>2]=e),(t=0|i[t+4>>2])?(i[e+20>>2]=t,i[t+24>>2]=e,A=a,t=o):(A=a,t=o)}else A=a,t=o}}while(0);if(!(a>>>0>=l>>>0)&&1&(r=0|i[(e=l+4|0)>>2])){if(2&r)i[e>>2]=-2&r,i[A+4>>2]=1|t,i[a+t>>2]=t,s=t;else{if((0|i[6987])==(0|l)){if(l=(0|i[6984])+t|0,i[6984]=l,i[6987]=A,i[A+4>>2]=1|l,(0|A)!=(0|i[6986]))return;return i[6986]=0,void(i[6983]=0)}if((0|i[6986])==(0|l))return l=(0|i[6983])+t|0,i[6983]=l,i[6986]=a,i[A+4>>2]=1|l,void(i[a+l>>2]=l);s=(-8&r)+t|0,n=r>>>3;do{if(r>>>0<256){if(t=0|i[l+8>>2],(0|(e=0|i[l+12>>2]))==(0|t)){i[6981]=i[6981]&~(1<>2]=e,i[e+8>>2]=t;break}o=0|i[l+24>>2],e=0|i[l+12>>2];do{if((0|e)==(0|l)){if(e=0|i[(n=4+(t=l+16|0)|0)>>2])t=n;else if(!(e=0|i[t>>2])){n=0;break}for(;;)if(n=0|i[(r=e+20|0)>>2])e=n,t=r;else{if(!(n=0|i[(r=e+16|0)>>2]))break;e=n,t=r}i[t>>2]=0,n=e}else n=0|i[l+8>>2],i[n+12>>2]=e,i[e+8>>2]=n,n=e}while(0);if(0|o){if(e=0|i[l+28>>2],(0|i[(t=28228+(e<<2)|0)>>2])==(0|l)){if(i[t>>2]=n,!n){i[6982]=i[6982]&~(1<>2])==(0|l)?r:o+20)>>2]=n,!n)break;i[n+24>>2]=o,0|(t=0|i[(e=l+16|0)>>2])&&(i[n+16>>2]=t,i[t+24>>2]=n),0|(e=0|i[e+4>>2])&&(i[n+20>>2]=e,i[e+24>>2]=n)}}while(0);if(i[A+4>>2]=1|s,i[a+s>>2]=s,(0|A)==(0|i[6986]))return void(i[6983]=s)}if(e=s>>>3,s>>>0<256)return n=27964+(e<<1<<2)|0,(t=0|i[6981])&(e=1<>2]:(i[6981]=t|e,e=n,t=n+8|0),i[t>>2]=A,i[e+12>>2]=A,i[A+8>>2]=e,void(i[A+12>>2]=n);e=28228+((r=(e=s>>>8)?s>>>0>16777215?31:s>>>(7+(r=14-((o=(520192+(l=e<<(a=(e+1048320|0)>>>16&8))|0)>>>16&4)|a|(r=(245760+(l<<=o)|0)>>>16&2))+(l<>>15)|0)|0)&1|r<<1:0)<<2)|0,i[A+28>>2]=r,i[A+20>>2]=0,i[A+16>>2]=0,t=0|i[6982],n=1<>2];t:do{if((-8&i[e+4>>2])!=(0|s)){for(r=s<<(31==(0|r)?0:25-(r>>>1)|0);t=0|i[(n=e+16+(r>>>31<<2)|0)>>2];){if((-8&i[t+4>>2])==(0|s)){e=t;break t}r<<=1,e=t}i[n>>2]=A,i[A+24>>2]=e,i[A+12>>2]=A,i[A+8>>2]=A;break e}}while(0);l=0|i[(a=e+8|0)>>2],i[l+12>>2]=A,i[a>>2]=A,i[A+8>>2]=l,i[A+12>>2]=e,i[A+24>>2]=0}else i[6982]=t|n,i[e>>2]=A,i[A+24>>2]=e,i[A+12>>2]=A,i[A+8>>2]=A}while(0);if(l=(0|i[6989])-1|0,i[6989]=l,!(0|l)){for(e=28380;e=0|i[e>>2];)e=e+8|0;i[6989]=-1}}}}function $t(e,t){t|=0;var n=0;return(e|=0)?(n=0|v(t,e),(t|e)>>>0>65535&&(n=((n>>>0)/(e>>>0)|0)==(0|t)?n:-1)):n=0,(e=0|Wt(n))&&3&i[e+-4>>2]?(cn(0|e,0,0|n),0|e):0|e}function Xt(e,t,n,r){return 0|(E((t|=0)+(r|=0)+((n=(e|=0)+(n|=0)>>>0)>>>0>>0|0)>>>0|0),n)}function Qt(e,t,n,r){return 0|(E(0|(r=(t|=0)-(r|=0)-((n|=0)>>>0>(e|=0)>>>0|0)>>>0)),e-n>>>0)}function Yt(e){return 0|((e|=0)?31-(0|x(e^e-1)):32)}function qt(e,t,n,r,s){s|=0;var o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0;if(u=e|=0,a=n|=0,A=d=r|=0,!(c=l=t|=0))return o=!!(0|s),A?o?(i[s>>2]=0|e,i[s+4>>2]=0&t,s=0,0|(E(0|(d=0)),s)):(s=0,0|(E(0|(d=0)),s)):(o&&(i[s>>2]=(u>>>0)%(a>>>0),i[s+4>>2]=0),s=(u>>>0)/(a>>>0)>>>0,0|(E(0|(d=0)),s));o=!(0|A);do{if(a){if(!o){if((o=(0|x(0|A))-(0|x(0|c))|0)>>>0<=31){a=h=o+1|0,e=u>>>(h>>>0)&(t=o-31>>31)|c<<(A=31-o|0),t&=c>>>(h>>>0),o=0,A=u<>2]=0|e,i[s+4>>2]=l|0&t,s=0,0|(E(0|(d=0)),s)):(s=0,0|(E(0|(d=0)),s))}if((o=a-1|0)&a){a=A=33+(0|x(0|a))-(0|x(0|c))|0,e=(h=32-A|0)-1>>31&c>>>((f=A-32|0)>>>0)|(c<>>(A>>>0))&(t=f>>31),t&=c>>>(A>>>0),o=u<<(p=64-A|0)&(l=h>>31),A=(c<>>(f>>>0))&l|u<>31;break}return 0|s&&(i[s>>2]=o&u,i[s+4>>2]=0),1==(0|a)?(p=0|e,0|(E(0|(f=l|0&t)),p)):(f=c>>>((p=0|Yt(0|a))>>>0)|0,p=c<<32-p|u>>>(p>>>0),0|(E(0|f),p))}if(o)return 0|s&&(i[s>>2]=(c>>>0)%(a>>>0),i[s+4>>2]=0),p=(c>>>0)/(a>>>0)>>>0,0|(E(0|(f=0)),p);if(!u)return 0|s&&(i[s>>2]=0,i[s+4>>2]=(c>>>0)%(A>>>0)),p=(c>>>0)/(A>>>0)>>>0,0|(E(0|(f=0)),p);if(!((o=A-1|0)&A))return 0|s&&(i[s>>2]=0|e,i[s+4>>2]=o&c|0&t),f=0,p=c>>>((0|Yt(0|A))>>>0),0|(E(0|f),p);if((o=(0|x(0|A))-(0|x(0|c))|0)>>>0<=30){a=t=o+1|0,e=c<<(A=31-o|0)|u>>>(t>>>0),t=c>>>(t>>>0),o=0,A=u<>2]=0|e,i[s+4>>2]=l|0&t,p=0,0|(E(0|(f=0)),p)):(p=0,0|(E(0|(f=0)),p))}while(0);if(a){c=0|Xt(0|(h=0|n),0|(u=d|0&r),-1,-1),n=0|T(),l=A,A=0;do{r=l,l=o>>>31|l<<1,o=A|o<<1,Qt(0|c,0|n,0|(r=e<<1|r>>>31),0|(d=e>>>31|t<<1)),A=1&(f=(p=0|T())>>31|((0|p)<0?-1:0)<<1),e=0|Qt(0|r,0|d,f&h|0,(((0|p)<0?-1:0)>>31|((0|p)<0?-1:0)<<1)&u),t=0|T(),a=a-1|0}while(0|a);c=l,l=0}else c=A,l=0,A=0;return a=0,0|s&&(i[s>>2]=e,i[s+4>>2]=t),p=o<<1&-2|A,0|(E(0|(f=(0|o)>>>31|(c|a)<<1|l)),p)}function Kt(e,t,n,r){var i,s,o,a,A;return n|=0,s=(r|=0)>>31|((0|r)<0?-1:0)<<1,i=((0|r)<0?-1:0)>>31|((0|r)<0?-1:0)<<1,o=0|Qt((A=(t|=0)>>31|((0|t)<0?-1:0)<<1)^(e|=0),(a=((0|t)<0?-1:0)>>31|((0|t)<0?-1:0)<<1)^t,0|A,0|a),e=s^A,t=i^a,0|Qt((0|qt(o,0|T(),0|Qt(s^n|0,i^r|0,0|s,0|i),0|T(),0))^e,(0|T())^t,0|e,0|t)}function Zt(e,t,n,r){var i,s;return t|=0,r|=0,n=0|function(e,t){var n,r,i,s=0;return e=((n=0|v(s=65535&(t|=0),i=65535&(e|=0)))>>>16)+(0|v(s,r=e>>>16))|0,t=0|v(s=t>>>16,i),0|(E((e>>>16)+(0|v(s,r))+(((65535&e)+t|0)>>>16)|0),e+t<<16|65535&n)}(i=e|=0,s=n|=0),e=0|T(),0|(E((0|v(t,s))+(0|v(r,i))+e|0&e),n)}function Jt(e,t,n,r){var s,o,a,A,l,c;return n|=0,s=M,M=M+16|0,A=0|s,c=(r|=0)>>31|((0|r)<0?-1:0)<<1,l=((0|r)<0?-1:0)>>31|((0|r)<0?-1:0)<<1,qt(e=0|Qt((a=(t|=0)>>31|((0|t)<0?-1:0)<<1)^(e|=0),(o=((0|t)<0?-1:0)>>31|((0|t)<0?-1:0)<<1)^t,0|a,0|o),t=0|T(),0|Qt(c^n|0,l^r|0,0|c,0|l),0|T(),A),r=0|Qt(i[A>>2]^a|0,i[A+4>>2]^o|0,0|a,0|o),n=0|T(),M=s,0|(E(0|n),r)}function en(e,t,n,r){var s,o;return o=M,M=M+16|0,qt(e|=0,t|=0,n|=0,r|=0,s=0|o),M=o,0|(E(0|i[s+4>>2]),i[s>>2])}function tn(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(E(t>>n|0),e>>>n|(t&(1<>n-32)}function nn(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(E(t>>>n|0),e>>>n|(t&(1<>>n-32|0)}function rn(e,t,n){return e|=0,(0|(n|=0))<32?(E((t|=0)<>>32-n),e<=0?+A(e+.5):+b(e-.5)}function ln(e,t,n){e|=0,t|=0;var s,o,a=0;if((0|(n|=0))>=8192)return R(0|e,0|t,0|n),0|e;if(o=0|e,s=e+n|0,(3&e)==(3&t)){for(;3&e;){if(!n)return 0|o;r[0|e]=0|r[0|t],e=e+1|0,t=t+1|0,n=n-1|0}for(a=(n=-4&s)-64|0;(0|e)<=(0|a);)i[e>>2]=i[t>>2],i[e+4>>2]=i[t+4>>2],i[e+8>>2]=i[t+8>>2],i[e+12>>2]=i[t+12>>2],i[e+16>>2]=i[t+16>>2],i[e+20>>2]=i[t+20>>2],i[e+24>>2]=i[t+24>>2],i[e+28>>2]=i[t+28>>2],i[e+32>>2]=i[t+32>>2],i[e+36>>2]=i[t+36>>2],i[e+40>>2]=i[t+40>>2],i[e+44>>2]=i[t+44>>2],i[e+48>>2]=i[t+48>>2],i[e+52>>2]=i[t+52>>2],i[e+56>>2]=i[t+56>>2],i[e+60>>2]=i[t+60>>2],e=e+64|0,t=t+64|0;for(;(0|e)<(0|n);)i[e>>2]=i[t>>2],e=e+4|0,t=t+4|0}else for(n=s-4|0;(0|e)<(0|n);)r[0|e]=0|r[0|t],r[e+1|0]=0|r[t+1|0],r[e+2|0]=0|r[t+2|0],r[e+3|0]=0|r[t+3|0],e=e+4|0,t=t+4|0;for(;(0|e)<(0|s);)r[0|e]=0|r[0|t],e=e+1|0,t=t+1|0;return 0|o}function cn(e,t,n){t|=0;var s,o=0,a=0,A=0;if(s=(e|=0)+(n|=0)|0,t&=255,(0|n)>=67){for(;3&e;)r[0|e]=t,e=e+1|0;for(A=t|t<<8|t<<16|t<<24,a=(o=-4&s)-64|0;(0|e)<=(0|a);)i[e>>2]=A,i[e+4>>2]=A,i[e+8>>2]=A,i[e+12>>2]=A,i[e+16>>2]=A,i[e+20>>2]=A,i[e+24>>2]=A,i[e+28>>2]=A,i[e+32>>2]=A,i[e+36>>2]=A,i[e+40>>2]=A,i[e+44>>2]=A,i[e+48>>2]=A,i[e+52>>2]=A,i[e+56>>2]=A,i[e+60>>2]=A,e=e+64|0;for(;(0|e)<(0|o);)i[e>>2]=A,e=e+4|0}for(;(0|e)<(0|s);)r[0|e]=t,e=e+1|0;return s-n|0}function un(e){return(e=+e)>=0?+A(e+.5):+b(e-.5)}function hn(e){var t,n,r;return e|=0,r=0|k(),(0|e)>0&(0|(t=(n=0|i[a>>2])+e|0))<(0|n)|(0|t)<0?(I(0|t),C(12),-1):(0|t)>(0|r)&&!(0|P(0|t))?(C(12),-1):(i[a>>2]=t,0|n)}return{___divdi3:Kt,___muldi3:Zt,___remdi3:Jt,___uremdi3:en,_areNeighborCells:function(e,t,n,r,s){s|=0;var o,a,A,l=0,c=0,u=0,h=0;if(A=M,M=M+64|0,a=A,o=A+56|0,!(!0&134217728==(2013265920&(t|=0))&!0&134217728==(2013265920&(r|=0))))return M=A,5;if((0|(e|=0))==(0|(n|=0))&(0|t)==(0|r))return i[s>>2]=0,M=A,0;if(c=0|nn(0|e,0|t,52),T(),c&=15,h=0|nn(0|n,0|r,52),T(),(0|c)!=(15&h))return M=A,12;if(l=c+-1|0,c>>>0>1){Fe(e,t,l,a),Fe(n,r,l,o),u=0|i[(h=a)>>2],h=0|i[h+4>>2];e:do{if((0|u)==(0|i[o>>2])&&(0|h)==(0|i[o+4>>2])){l=0|nn(0|e,0|t,0|(c=3*(15^c)|0)),T(),l&=7,c=0|nn(0|n,0|r,0|c),T(),c&=7;do{if(!(0|l)|!(0|c))i[s>>2]=1,l=0;else if(7==(0|l))l=5;else{if(1==(0|l)|1==(0|c)&&0|je(u,h)){l=5;break}if((0|i[15536+(l<<2)>>2])!=(0|c)&&(0|i[15568+(l<<2)>>2])!=(0|c))break e;i[s>>2]=1,l=0}}while(0);return M=A,0|l}}while(0)}c=(l=a)+56|0;do{i[l>>2]=0,l=l+4|0}while((0|l)<(0|c));return L(e,t,1,a),l=(0|i[(t=a)>>2])==(0|n)&&(0|i[t+4>>2])==(0|r)||(0|i[(t=a+8|0)>>2])==(0|n)&&(0|i[t+4>>2])==(0|r)||(0|i[(t=a+16|0)>>2])==(0|n)&&(0|i[t+4>>2])==(0|r)||(0|i[(t=a+24|0)>>2])==(0|n)&&(0|i[t+4>>2])==(0|r)||(0|i[(t=a+32|0)>>2])==(0|n)&&(0|i[t+4>>2])==(0|r)||(0|i[(t=a+40|0)>>2])==(0|n)&&(0|i[t+4>>2])==(0|r)?1:1&((0|i[(l=a+48|0)>>2])==(0|n)?(0|i[l+4>>2])==(0|r):0),i[s>>2]=l,M=A,0},_bitshift64Ashr:tn,_bitshift64Lshr:nn,_bitshift64Shl:rn,_calloc:$t,_cellAreaKm2:function(e,t,n){return 0|(e=0|ut(e|=0,t|=0,n|=0))||(s[n>>3]=6371.007180918475*+s[n>>3]*6371.007180918475),0|e},_cellAreaM2:function(e,t,n){return 0|(e=0|ut(e|=0,t|=0,n|=0))||(s[n>>3]=6371.007180918475*+s[n>>3]*6371.007180918475*1e3*1e3),0|e},_cellAreaRads2:ut,_cellToBoundary:Je,_cellToCenterChild:ze,_cellToChildPos:function(e,t,n,r){n|=0,r|=0;var s,o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0;if(s=M,M=M+16|0,_=s,b=0|nn(0|(e|=0),0|(t|=0),52),T(),n>>>0>15)return M=s,4;if((0|(b&=15))<(0|n))return M=s,12;if((0|b)!=(0|n))if(a=0|rn(0|n,0,52),a|=e,l=T()|-15728641&t,(0|b)>(0|n)){c=n;do{m=0|rn(7,0,3*(14-c|0)|0),c=c+1|0,a|=m,l=0|T()|l}while((0|c)<(0|b));m=a}else m=a;else m=e,l=t;g=0|nn(0|m,0|l,45),T();e:do{if(0|G(127&g)){if(c=0|nn(0|m,0|l,52),T(),0|(c&=15))for(a=1;;){if(!(!((g=0|rn(7,0,3*(15-a|0)|0))&m)&!((0|T())&l))){u=33;break e}if(!(a>>>0>>0))break;a=a+1|0}if(i[(g=r)>>2]=0,i[g+4>>2]=0,(0|b)>(0|n)){for(g=-15728641&t,p=b;;){if(f=p,(p=p+-1|0)>>>0>15|(0|b)<(0|p)){u=19;break}if((0|b)!=(0|p))if(a=0|rn(0|p,0,52),a|=e,c=0|T()|g,(0|b)<(0|f))d=a;else{u=p;do{d=0|rn(7,0,3*(14-u|0)|0),u=u+1|0,a|=d,c=0|T()|c}while((0|u)<(0|b));d=a}else d=e,c=t;if(h=0|nn(0|d,0|c,45),T(),0|G(127&h)){h=0|nn(0|d,0|c,52),T(),h&=15;t:do{if(h)for(u=1;;){if(a=0|nn(0|d,0|c,3*(15-u|0)|0),T(),0|(a&=7))break t;if(!(u>>>0>>0)){a=0;break}u=u+1|0}else a=0}while(0);a=1&!(0|a)}else a=0;if(c=0|nn(0|e,0|t,3*(15-f|0)|0),T(),7==(0|(c&=7))){o=5,u=42;break}if(1==(0|c)&(a=!!(0|a))){o=5,u=42;break}if(0|(d=c+((!!(0|c)&a)<<31>>31)|0)&&(u=0|_t(7,0,u=b-f|0,((0|u)<0)<<31>>31),h=0|T(),a?(a=0|Xt(0|(a=0|Zt(0|u,0|h,5,0)),0|T(),-5,-1),a=0|Xt(0|(a=0|Kt(0|a,0|T(),6,0)),0|T(),1,0),c=0|T()):(a=u,c=h),f=0|Xt(0|a,0|c,0|(f=0|Zt(0|u,0|h,0|(f=d+-1|0),((0|f)<0)<<31>>31)),0|T()),h=0|Xt(0|f,0|(d=0|T()),0|i[(h=r)>>2],0|i[h+4>>2]),d=0|T(),i[(f=r)>>2]=h,i[f+4>>2]=d),(0|p)<=(0|n)){u=37;break}}if(19==(0|u))S(27795,27122,1367,27158);else{if(37==(0|u)){o=0|i[(A=r)+4>>2],A=0|i[A>>2];break}if(42==(0|u))return M=s,0|o}}else o=0,A=0}else u=33}while(0);e:do{if(33==(0|u)){if(i[(g=r)>>2]=0,i[g+4>>2]=0,(0|b)>(0|n)){for(a=b;;){if(o=0|nn(0|e,0|t,3*(15-a|0)|0),T(),7==(0|(o&=7))){o=5;break}if(o=0|Zt(0|(A=0|_t(7,0,A=b-a|0,((0|A)<0)<<31>>31)),0|T(),0|o,0),A=0|T(),A=0|Xt(0|i[(g=r)>>2],0|i[g+4>>2],0|o,0|A),o=0|T(),i[(g=r)>>2]=A,i[g+4>>2]=o,(0|(a=a+-1|0))<=(0|n))break e}return M=s,0|o}o=0,A=0}}while(0);return 0|Ue(m,l,b,_)&&S(27795,27122,1327,27173),((0|o)>-1|-1==(0|o)&A>>>0>4294967295)&((0|(_=0|i[(b=_)+4>>2]))>(0|o)|((0|_)==(0|o)?(0|i[b>>2])>>>0>A>>>0:0))?(M=s,0|(b=0)):(S(27795,27122,1407,27158),0)},_cellToChildren:function(e,t,n,r){r|=0;var s,o,a=0,A=0;if(o=M,M=M+16|0,tt(s=o,e|=0,t|=0,n|=0),!(0|(e=0|i[(t=s)>>2]))&!(0|(t=0|i[t+4>>2])))return M=o,0;a=0,n=0;do{i[(A=r+(a<<3)|0)>>2]=e,i[A+4>>2]=t,a=0|Xt(0|a,0|n,1,0),n=0|T(),rt(s),e=0|i[(A=s)>>2],t=0|i[A+4>>2]}while(!(!(0|e)&!(0|t)));return M=o,0},_cellToChildrenSize:Ue,_cellToLatLng:Ze,_cellToLocalIj:function(e,t,n,r,s,o){var a,A;return e|=0,o|=0,A=M,M=M+16|0,a=A,(s|=0)?e=15:(e=0|gt(e,t|=0,n|=0,r|=0,a))||(function(e,t){var n;t|=0,n=0|i[8+(e|=0)>>2],i[t>>2]=(0|i[e>>2])-n,i[t+4>>2]=(0|i[e+4>>2])-n}(a,o),e=0),M=A,0|e},_cellToParent:Fe,_cellToVertex:Nt,_cellToVertexes:function(e,t,n){n|=0;var r,s=0,o=0;return o=!(0|je(e|=0,t|=0)),r=!(0|(s=0|Nt(e,t,0,n))),o?r?0|(s=0|Nt(e,t,1,n+8|0))||0|(s=0|Nt(e,t,2,n+16|0))||0|(s=0|Nt(e,t,3,n+24|0))||(s=0|Nt(e,t,4,n+32|0))?0|(o=s):0|Nt(e,t,5,n+40|0):0|(o=s):r?0|(s=0|Nt(e,t,1,n+8|0))||0|(s=0|Nt(e,t,2,n+16|0))||0|(s=0|Nt(e,t,3,n+24|0))||0|(s=0|Nt(e,t,4,n+32|0))?0|(o=s):(i[(o=n+40|0)>>2]=0,i[o+4>>2]=0,0|(o=0)):0|(o=s)},_cellsToDirectedEdge:function(e,t,n,r,s){return s|=0,7==(0|(n=0|U(e|=0,t|=0,n|=0,r|=0)))?0|(s=11):(r=0|rn(0|n,0,56),t=-2130706433&t|T()|268435456,i[s>>2]=e|r,i[s+4>>2]=t,0|(s=0))},_cellsToLinkedMultiPolygon:function(e,t,n){n|=0;var r,o,a,A=0;if(a=M,M=M+32|0,r=a,0|(e=0|function(e,t,n){e|=0,n|=0;var r,s,o=0,a=0,A=0,l=0,c=0,u=0;if(s=M,M=M+176|0,r=s,(0|(t|=0))<1)return Dt(n,0,0),M=s,0;for(c=0|nn(0|i[(c=e)>>2],0|i[c+4>>2],52),T(),Dt(n,(0|t)>6?t:6,15&c),c=0;!(0|(o=0|Je(0|i[(o=e+(c<<3)|0)>>2],0|i[o+4>>2],r)));){if((0|(o=0|i[r>>2]))>0){l=0;do{A=r+8+(l<<4)|0,(a=0|Gt(n,o=r+8+((0|(l=l+1|0))%(0|o)<<4)|0,A))?Ut(n,a):jt(n,A,o),o=0|i[r>>2]}while((0|l)<(0|o))}if((0|(c=c+1|0))>=(0|t)){o=0,u=13;break}}return 13==(0|u)?(M=s,0|o):(Ot(n),M=s,0|(u=o))}(e|=0,t|=0,o=a+16|0)))return M=a,0|e;if(i[n>>2]=0,i[n+4>>2]=0,i[n+8>>2]=0,0|(e=0|Ft(o)))do{t=0|ht(n);do{dt(t,e),A=e+16|0,i[r>>2]=i[A>>2],i[r+4>>2]=i[A+4>>2],i[r+8>>2]=i[A+8>>2],i[r+12>>2]=i[A+12>>2],Ut(o,e),e=0|zt(o,r)}while(0|e);e=0|Ft(o)}while(0|e);return Ot(o),(e=0|function(e){var t,n,r=0,o=0,a=0,A=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0,x=0,E=0,T=0,C=0,k=0,R=0,P=0,I=0,M=0,L=0,N=0,B=0,D=0;if(0|i[(A=(e|=0)+8|0)>>2])return 1;if(!(a=0|i[e>>2]))return 0;r=a,o=0;do{o=o+1|0,r=0|i[r+8>>2]}while(0|r);if(o>>>0<2)return 0;(n=0|Wt(o<<2))||S(27396,27235,317,27415),(t=0|Wt(o<<5))||S(27437,27235,321,27415),i[e>>2]=0,i[(k=e+4|0)>>2]=0,i[A>>2]=0,o=0,N=0,C=0,g=0;e:for(;;){if(p=0|i[a>>2]){c=0,u=p;do{if(d=+s[u+8>>3],r=u,u=0|i[u+16>>2],h=+s[(A=(f=!(0|u))?p:u)+8>>3],+l(+(d-h))>3.141592653589793){D=14;break}c+=(h-d)*(+s[r>>3]+ +s[A>>3])}while(!f);if(14==(0|D)){D=0,c=0,r=p;do{T=+s[r+8>>3],M=0|i[(L=r+16|0)>>2],E=+s[(M=0|M?M:p)+8>>3],c+=(+s[r>>3]+ +s[M>>3])*((E<0?E+6.283185307179586:E)-(T<0?T+6.283185307179586:T)),r=0|i[(0|r?L:a)>>2]}while(0|r)}c>0?(i[n+(N<<2)>>2]=a,N=N+1|0,A=C,r=g):D=19}else D=19;if(19==(0|D)){D=0;do{if(!o){if(g){A=k,u=g+8|0,r=a,o=e;break}if(0|i[e>>2]){D=27;break e}A=k,u=e,r=a,o=e;break}if(0|i[(r=o+8|0)>>2]){D=21;break e}if(!(o=0|$t(1,12))){D=23;break e}i[r>>2]=o,A=o+4|0,u=o,r=g}while(0);if(i[u>>2]=a,i[A>>2]=a,u=t+(C<<5)|0,f=0|i[a>>2]){for(s[(p=t+(C<<5)+8|0)>>3]=17976931348623157e292,s[(g=t+(C<<5)+24|0)>>3]=17976931348623157e292,s[u>>3]=-17976931348623157e292,s[(m=t+(C<<5)+16|0)>>3]=-17976931348623157e292,w=17976931348623157e292,x=-17976931348623157e292,A=0,_=f,d=17976931348623157e292,v=17976931348623157e292,y=-17976931348623157e292,h=-17976931348623157e292;c=+s[_>>3],T=+s[_+8>>3],_=0|i[_+16>>2],E=+s[((b=!(0|_))?f:_)+8>>3],c>3]=c,d=c),T>3]=T,v=T),c>y?s[u>>3]=c:c=y,T>h&&(s[m>>3]=T,h=T),w=T>0&Tx?T:x,A|=+l(+(T-E))>3.141592653589793,!b;)y=c;A&&(s[m>>3]=x,s[g>>3]=w)}else i[u>>2]=0,i[u+4>>2]=0,i[u+8>>2]=0,i[u+12>>2]=0,i[u+16>>2]=0,i[u+20>>2]=0,i[u+24>>2]=0,i[u+28>>2]=0;A=C+1|0}if(a=0|i[(L=a+8|0)>>2],i[L>>2]=0,!a){D=45;break}C=A,g=r}if(21==(0|D))S(27213,27235,35,27247);else if(23==(0|D))S(27267,27235,37,27247);else if(27==(0|D))S(27310,27235,61,27333);else if(45==(0|D)){e:do{if((0|N)>0){for(L=!(0|A),I=A<<2,M=!(0|e),P=0,r=0;;){if(R=0|i[n+(P<<2)>>2],L)D=73;else{if(!(C=0|Wt(I))){D=50;break}if(!(k=0|Wt(I))){D=52;break}t:do{if(M)o=0;else{for(A=0,o=0,u=e;a=t+(A<<5)|0,0|pt(0|i[u>>2],a,0|i[R>>2])?(i[C+(o<<2)>>2]=u,i[k+(o<<2)>>2]=a,b=o+1|0):b=o,u=0|i[u+8>>2];)A=A+1|0,o=b;if((0|b)>0)if(a=0|i[C>>2],1==(0|b))o=a;else for(m=0,_=-1,o=a,g=a;;){for(f=0|i[g>>2],a=0,u=0;p=(0|(A=0|i[i[C+(u<<2)>>2]>>2]))==(0|f)?a:a+(1&pt(A,0|i[k+(u<<2)>>2],0|i[f>>2]))|0,(0|(u=u+1|0))!=(0|b);)a=p;if(o=(A=(0|p)>(0|_))?g:o,(0|(a=m+1|0))==(0|b))break t;m=a,_=A?p:_,g=0|i[C+(a<<2)>>2]}else o=0}}while(0);if(Ht(C),Ht(k),o){if(a=0|i[(A=o+4|0)>>2])o=a+8|0;else if(0|i[o>>2]){D=70;break}i[o>>2]=R,i[A>>2]=R}else D=73}if(73==(0|D)){if(D=0,0|(r=0|i[R>>2]))do{k=r,r=0|i[r+16>>2],Ht(k)}while(0|r);Ht(R),r=1}if((0|(P=P+1|0))>=(0|N)){B=r;break e}}50==(0|D)?S(27452,27235,249,27471):52==(0|D)?S(27490,27235,252,27471):70==(0|D)&&S(27310,27235,61,27333)}else B=0}while(0);return Ht(n),Ht(t),0|B}return 0}(n))?(ft(n),M=a,0|(A=e)):(M=a,0|(A=0))},_childPosToCell:function(e,t,n,r,s,o){e|=0,t|=0,o|=0;var a,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0;if(a=M,M=M+16|0,A=a,(s|=0)>>>0>15)return M=a,4;if(l=0|nn(0|(n|=0),0|(r|=0),52),T(),(0|(l&=15))>(0|s))return M=a,12;if(0|Ue(n,r,s,A)&&S(27795,27122,1327,27173),!(((0|t)>-1|-1==(0|t)&e>>>0>4294967295)&((0|(u=0|i[(h=A)+4>>2]))>(0|t)|((0|u)==(0|t)?(0|i[h>>2])>>>0>e>>>0:0))))return M=a,2;h=s-l|0,s=0|rn(0|s,0,52),c=T()|-15728641&r,i[(u=o)>>2]=s|n,i[u+4>>2]=c,u=0|nn(0|n,0|r,45),T();e:do{if(0|G(127&u)){if(0|l)for(A=1;;){if(!(!((u=0|rn(7,0,3*(15-A|0)|0))&n)&!((0|T())&r)))break e;if(!(A>>>0>>0))break;A=A+1|0}if((0|h)<1)return M=a,0;for(u=15^l,r=-1,c=1,A=1;;){l=0|_t(7,0,l=h-c|0,((0|l)<0)<<31>>31),n=0|T();do{if(A){if(A=0|Kt(0|(A=0|Xt(0|(A=0|Zt(0|l,0|n,5,0)),0|T(),-5,-1)),0|T(),6,0),(0|t)>(0|(s=0|T()))|(0|t)==(0|s)&e>>>0>A>>>0){t=0|Qt(0|(t=0|Xt(0|e,0|t,-1,-1)),0|T(),0|A,0|s),A=0|T(),p=0|i[(d=o)>>2],d=0|i[d+4>>2],f=0|rn(7,0,0|(g=3*(u+r|0)|0)),d&=~T(),g=0|rn(0|(s=0|Xt(0|(r=0|Kt(0|t,0|A,0|l,0|n)),0|(e=0|T()),2,0)),0|T(),0|g),d=0|T()|d,i[(s=o)>>2]=g|p&~f,i[s+4>>2]=d,e=0|Qt(0|t,0|A,0|(e=0|Zt(0|r,0|e,0|l,0|n)),0|T()),A=0,t=0|T();break}f=0|i[(g=o)>>2],g=0|i[g+4>>2],p=0|rn(7,0,3*(u+r|0)|0),g&=~T(),i[(A=o)>>2]=f&~p,i[A+4>>2]=g,A=1;break}s=0|i[(f=o)>>2],f=0|i[f+4>>2],d=0|rn(7,0,0|(r=3*(u+r|0)|0)),f&=~T(),r=0|rn(0|(g=0|Kt(0|e,0|t,0|l,0|n)),0|(A=0|T()),0|r),f=0|T()|f,i[(p=o)>>2]=r|s&~d,i[p+4>>2]=f,e=0|Qt(0|e,0|t,0|(A=0|Zt(0|g,0|A,0|l,0|n)),0|T()),A=0,t=0|T()}while(0);if(!((0|h)>(0|c))){t=0;break}r=~c,c=c+1|0}return M=a,0|t}}while(0);if((0|h)<1)return M=a,0;for(s=15^l,A=1;;){if(p=0|_t(7,0,p=h-A|0,((0|p)<0)<<31>>31),g=0|T(),n=0|i[(c=o)>>2],c=0|i[c+4>>2],r=0|rn(7,0,0|(l=3*(s-A|0)|0)),c&=~T(),l=0|rn(0|(d=0|Kt(0|e,0|t,0|p,0|g)),0|(f=0|T()),0|l),c=0|T()|c,i[(u=o)>>2]=l|n&~r,i[u+4>>2]=c,e=0|Qt(0|e,0|t,0|(g=0|Zt(0|d,0|f,0|p,0|g)),0|T()),t=0|T(),(0|h)<=(0|A)){t=0;break}A=A+1|0}return M=a,0|t},_compactCells:function(e,t,n,r){t|=0;var s,o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0,x=0,E=0,C=0,k=0,R=0,P=0,I=0,M=0;if(!(0|(n|=0))&!(0|(r|=0)))return 0;if(a=0|i[(o=e|=0)>>2],!0&!(15728640&(o=0|i[o+4>>2]))){if(!((0|r)>0|!(0|r)&n>>>0>0))return 0;if(i[(M=t)>>2]=a,i[M+4>>2]=o,1==(0|n)&!(0|r))return 0;o=1,a=0;do{I=0|i[4+(P=e+(o<<3)|0)>>2],i[(M=t+(o<<3)|0)>>2]=i[P>>2],i[M+4>>2]=I,o=0|Xt(0|o,0|a,1,0),a=0|T()}while((0|a)<(0|r)|(0|a)==(0|r)&o>>>0>>0);return 0}if(!(I=0|Wt(s=n<<3)))return 13;if(ln(0|I,0|e,0|s),!(P=0|$t(n,8)))return Ht(I),13;e:for(;;){k=0|nn(0|(u=0|i[(o=I)>>2]),0|(o=0|i[o+4>>2]),52),T(),R=(k&=15)-1|0,C=!!(0|k),E=(0|r)>0|!(0|r)&n>>>0>0;t:do{if(C&E){if(v=0|rn(0|R,0,52),y=0|T(),R>>>0>15){if(!(!(0|u)&!(0|o))){M=16;break e}for(a=0,e=0;;){if(a=0|Xt(0|a,0|e,1,0),!((0|(e=0|T()))<(0|r)|(0|e)==(0|r)&a>>>0>>0))break t;if(!(!(0|(x=0|i[(A=I+(a<<3)|0)>>2]))&!(0|(A=0|i[A+4>>2])))){o=A,M=16;break e}}}for(l=u,e=o,a=0,A=0;;){if(!(!(0|l)&!(0|e))){if(!(!0&!(117440512&e))){M=21;break e}if(h=0|nn(0|l,0|e,52),T(),(0|(h&=15))<(0|R)){o=12,M=27;break e}if((0|h)!=(0|R)&&(l|=v,e=-15728641&e|y,h>>>0>=k>>>0)){c=R;do{x=0|rn(7,0,3*(14-c|0)|0),c=c+1|0,l|=x,e=0|T()|e}while(c>>>0>>0)}if(f=0|en(0|l,0|e,0|n,0|r),p=0|T(),!(!(0|(d=0|i[(h=c=P+(f<<3)|0)>>2]))&!(0|(h=0|i[h+4>>2])))){_=0,b=0;do{if((0|_)>(0|r)|(0|_)==(0|r)&b>>>0>n>>>0){M=31;break e}if((0|d)==(0|l)&(-117440513&h)==(0|e)){g=0|nn(0|d,0|h,56),T(),m=1+(g&=7)|0,x=0|nn(0|d,0|h,45),T();n:do{if(0|G(127&x)){if(d=0|nn(0|d,0|h,52),T(),!(d&=15)){h=6;break}for(h=1;;){if(!(!((x=0|rn(7,0,3*(15-h|0)|0))&l)&!((0|T())&e))){h=7;break n}if(!(h>>>0>>0)){h=6;break}h=h+1|0}}else h=7}while(0);if((g+2|0)>>>0>h>>>0){M=41;break e}x=0|rn(0|m,0,56),e=T()|-117440513&e,i[(w=c)>>2]=0,i[w+4>>2]=0,l|=x}else f=0|Jt(0|(f=0|Xt(0|f,0|p,1,0)),0|T(),0|n,0|r),p=0|T();b=0|Xt(0|b,0|_,1,0),_=0|T(),d=0|i[(h=c=P+(f<<3)|0)>>2],h=0|i[h+4>>2]}while(!(!(0|d)&!(0|h)))}i[(x=c)>>2]=l,i[x+4>>2]=e}if(a=0|Xt(0|a,0|A,1,0),!((0|(A=0|T()))<(0|r)|(0|A)==(0|r)&a>>>0>>0))break t;l=0|i[(e=I+(a<<3)|0)>>2],e=0|i[e+4>>2]}}}while(0);if(x=0|Xt(0|n,0|r,5,0),(w=0|T())>>>0<0|!(0|w)&x>>>0<11){M=85;break}if(x=0|Kt(0|n,0|r,6,0),T(),!(x=0|$t(x,8))){M=48;break}do{if(E){for(m=0,e=0,g=0,_=0;;){if(!(0|(a=0|i[(A=h=P+(m<<3)|0)>>2]))&!(0|(A=0|i[A+4>>2])))w=g;else{d=0|nn(0|a,0|A,56),T(),l=1+(d&=7)|0,f=-117440513&A,w=0|nn(0|a,0|A,45),T();t:do{if(0|G(127&w)){if(p=0|nn(0|a,0|A,52),T(),0|(p&=15))for(c=1;;){if(!(!(a&(w=0|rn(7,0,3*(15-c|0)|0)))&!(f&(0|T()))))break t;if(!(c>>>0

>>0))break;c=c+1|0}a|=A=0|rn(0|l,0,56),A=0|T()|f,i[(l=h)>>2]=a,i[l+4>>2]=A,l=d+2|0}}while(0);7==(0|l)?(i[(w=x+(e<<3)|0)>>2]=a,i[w+4>>2]=-117440513&A,e=0|Xt(0|e,0|g,1,0),w=0|T()):w=g}if(m=0|Xt(0|m,0|_,1,0),!((0|(_=0|T()))<(0|r)|(0|_)==(0|r)&m>>>0>>0))break;g=w}if(E){if(b=R>>>0>15,v=0|rn(0|R,0,52),y=0|T(),!C){for(a=0,c=0,l=0,A=0;!(0|u)&!(0|o)||(i[(R=t+(a<<3)|0)>>2]=u,i[R+4>>2]=o,a=0|Xt(0|a,0|c,1,0),c=0|T()),l=0|Xt(0|l,0|A,1,0),(0|(A=0|T()))<(0|r)|(0|A)==(0|r)&l>>>0>>0;)u=0|i[(o=I+(l<<3)|0)>>2],o=0|i[o+4>>2];o=w;break}for(a=0,c=0,A=0,l=0;;){do{if(!(!(0|u)&!(0|o))){if(p=0|nn(0|u,0|o,52),T(),b|(0|(p&=15))<(0|R)){M=80;break e}if((0|p)!=(0|R)){if(h=u|v,d=-15728641&o|y,p>>>0>=k>>>0){f=R;do{C=0|rn(7,0,3*(14-f|0)|0),f=f+1|0,h|=C,d=0|T()|d}while(f>>>0

>>0)}}else h=u,d=o;g=0|en(0|h,0|d,0|n,0|r),f=0,p=0,_=0|T();do{if((0|f)>(0|r)|(0|f)==(0|r)&p>>>0>n>>>0){M=81;break e}if((-117440513&(m=0|i[4+(C=P+(g<<3)|0)>>2]))==(0|d)&&(0|i[C>>2])==(0|h)){M=65;break}g=0|Jt(0|(C=0|Xt(0|g,0|_,1,0)),0|T(),0|n,0|r),_=0|T(),p=0|Xt(0|p,0|f,1,0),f=0|T(),C=P+(g<<3)|0}while((0|i[C>>2])!=(0|h)||(0|i[C+4>>2])!=(0|d));if(65==(0|M)&&(M=0,!0&100663296==(117440512&m)))break;i[(C=t+(a<<3)|0)>>2]=u,i[C+4>>2]=o,a=0|Xt(0|a,0|c,1,0),c=0|T()}}while(0);if(A=0|Xt(0|A,0|l,1,0),!((0|(l=0|T()))<(0|r)|(0|l)==(0|r)&A>>>0>>0))break;u=0|i[(o=I+(A<<3)|0)>>2],o=0|i[o+4>>2]}o=w}else a=0,o=w}else a=0,e=0,o=0}while(0);if(cn(0|P,0,0|s),ln(0|I,0|x,e<<3),Ht(x),!(0|e)&!(0|o)){M=89;break}t=t+(a<<3)|0,r=o,n=e}if(16==(0|M))!0&!(117440512&o)?(o=4,M=27):M=21;else if(31==(0|M))S(27795,27122,620,27132);else{if(41==(0|M))return Ht(I),Ht(P),10;if(48==(0|M))return Ht(I),Ht(P),13;80==(0|M)?S(27795,27122,711,27132):81==(0|M)?S(27795,27122,723,27132):85==(0|M)&&(ln(0|t,0|I,n<<3),M=89)}return 21==(0|M)?(Ht(I),Ht(P),0|(M=5)):27==(0|M)?(Ht(I),Ht(P),0|(M=o)):89==(0|M)?(Ht(I),Ht(P),0|(M=0)):0},_constructCell:function(e,t,n,s){n|=0,s|=0;var o=0,a=0,A=0,l=0,c=0,u=0;if((e|=0)>>>0>15)return 4;if((t|=0)>>>0>121)return 17;A=0|rn(0|e,0,52),o=0|T(),l=0|rn(0|t,0,45),o=0|o|T()|134225919;e:do{if((0|e)>=1){for(l=1,A=!!(0|r[20528+t|0]),a=-1;;){if((t=0|i[n+(l+-1<<2)>>2])>>>0>6){o=18,t=10;break}if(!(!(0|t)|1^A)){if(1==(0|t)){o=19,t=10;break}A=0}if(c=0|rn(7,0,0|(u=3*(15-l|0)|0)),o&=~T(),a=(t=0|rn(0|t,((0|t)<0)<<31>>31,0|u))|a&~c,o=0|T()|o,!((0|l)<(0|e)))break e;l=l+1|0}if(10==(0|t))return 0|o}else a=-1}while(0);return i[(u=s)>>2]=a,i[u+4>>2]=o,0},_destroyLinkedMultiPolygon:ft,_directedEdgeToBoundary:Ce,_directedEdgeToCells:function(e,t,n){e|=0;var r,s,o,a=0;return r=M,M=M+16|0,a=r,!0&268435456==(2013265920&(t|=0))?(s=-2130706433&t|134217728,i[(o=n|=0)>>2]=e,i[o+4>>2]=s,i[a>>2]=0,t=0|nn(0|e,0|t,56),T(),a=0|O(e,s,7&t,a,n+8|0),M=r,0|a):(M=r,0|(a=6))},_edgeLengthKm:function(e,t,n){n|=0;var r,o=0,a=0,A=0,l=0,u=0,f=0,p=0;if(r=M,M=M+176|0,0|(e=0|Ce(e|=0,t|=0,l=r)))return l=e,A=+s[n>>3],A*=6371.007180918475,s[n>>3]=A,M=r,0|l;if(s[n>>3]=0,(0|(e=0|i[l>>2]))<=1)return l=0,A=0,A*=6371.007180918475,s[n>>3]=A,M=r,0|l;t=e+-1|0,e=0,o=+s[l+8>>3],a=+s[l+16>>3],A=0;do{f=o,o=+s[l+8+((e=e+1|0)<<4)>>3],p=+d(.5*(o-f)),u=a,a=+s[l+8+(e<<4)+8>>3],u=p*p+(u=+d(.5*(a-u)))*(+h(+f)*+h(+o)*u),A+=2*+_(+ +c(+u),+ +c(+(1-u)))}while((0|e)!=(0|t));return s[n>>3]=A,l=0,p=A,p*=6371.007180918475,s[n>>3]=p,M=r,0|l},_edgeLengthM:function(e,t,n){n|=0;var r,o=0,a=0,A=0,l=0,u=0,f=0,p=0;if(r=M,M=M+176|0,0|(e=0|Ce(e|=0,t|=0,l=r)))return l=e,A=+s[n>>3],A*=6371.007180918475,A*=1e3,s[n>>3]=A,M=r,0|l;if(s[n>>3]=0,(0|(e=0|i[l>>2]))<=1)return l=0,A=0,A*=6371.007180918475,A*=1e3,s[n>>3]=A,M=r,0|l;t=e+-1|0,e=0,o=+s[l+8>>3],a=+s[l+16>>3],A=0;do{f=o,o=+s[l+8+((e=e+1|0)<<4)>>3],p=+d(.5*(o-f)),u=a,a=+s[l+8+(e<<4)+8>>3],u=p*p+(u=+d(.5*(a-u)))*(+h(+f)*+h(+o)*u),A+=2*+_(+ +c(+u),+ +c(+(1-u)))}while((0|e)!=(0|t));return s[n>>3]=A,l=0,p=A,p*=6371.007180918475,p*=1e3,s[n>>3]=p,M=r,0|l},_edgeLengthRads:function(e,t,n){n|=0;var r,o=0,a=0,A=0,l=0,u=0,f=0,p=0;if(r=M,M=M+176|0,0|(e=0|Ce(e|=0,t|=0,l=r)))return M=r,0|e;if(s[n>>3]=0,(0|(e=0|i[l>>2]))<=1)return M=r,0;t=e+-1|0,e=0,o=+s[l+8>>3],a=+s[l+16>>3],A=0;do{f=o,o=+s[l+8+((e=e+1|0)<<4)>>3],p=+d(.5*(o-f)),u=a,a=+s[l+8+(e<<4)+8>>3],u=p*p+(u=+d(.5*(a-u)))*(+h(+o)*+h(+f)*u),A+=2*+_(+ +c(+u),+ +c(+(1-u)))}while((0|e)<(0|t));return s[n>>3]=A,M=r,0},_emscripten_replace_memory:function(e){return r=new Int8Array(e),i=new Int32Array(e),s=new Float64Array(e),n=e,!0},_free:Ht,_getBaseCellNumber:Be,_getDirectedEdgeDestination:function(e,t,n){e|=0,t|=0,n|=0;var r,s,o=0;return r=M,M=M+16|0,i[(o=r)>>2]=0,!0&268435456==(2013265920&t)?(s=0|nn(0|e,0|t,56),T(),o=0|O(e,-2130706433&t|134217728,7&s,o,n),M=r,0|o):(M=r,0|(o=6))},_getDirectedEdgeOrigin:function(e,t,n){return e|=0,n|=0,!0&268435456==(2013265920&(t|=0))?(i[n>>2]=e,i[n+4>>2]=-2130706433&t|134217728,0|(n=0)):0|(n=6)},_getHexagonAreaAvgKm2:At,_getHexagonAreaAvgM2:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(s[t>>3]=+s[20784+(e<<3)>>3],0|(t=0))},_getHexagonEdgeLengthAvgKm:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(s[t>>3]=+s[20912+(e<<3)>>3],0|(t=0))},_getHexagonEdgeLengthAvgM:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(s[t>>3]=+s[21040+(e<<3)>>3],0|(t=0))},_getIcosahedronFaces:function e(t,n,r){r|=0;var s,o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0;s=M,M=M+128|0,h=s+112|0,A=s+96|0,d=s,a=0|nn(0|(t|=0),0|(n|=0),52),T(),c=15&a,i[h>>2]=c,l=0|nn(0|t,0|n,45),T(),l&=127;e:do{if(0|G(l)){if(0|c)for(o=1;;){if(!(!((u=0|rn(7,0,3*(15-o|0)|0))&t)&!((0|T())&n))){a=0;break e}if(!(o>>>0>>0))break;o=o+1|0}if(!(1&a))return u=0|rn(c+1|0,0,52),d=T()|-15728641&n,d=0|e((u|t)&~(h=0|rn(7,0,3*(14-c|0)|0)),d&~T(),r),M=s,0|d;a=1}else a=0}while(0);if(!(o=0|Ke(t,n,A))){a?(Pe(A,h,d),u=5):(Ne(A,h,d),u=6);e:do{if(0|G(l))if(c)for(o=1;;){if(!(!((l=0|rn(7,0,3*(15-o|0)|0))&t)&!((0|T())&n))){t=2;break e}if(!(o>>>0>>0)){t=5;break}o=o+1|0}else t=5;else t=2}while(0);cn(0|r,-1,t<<2);e:do{if(a)for(A=0;;){if(Me(l=d+(A<<4)|0,0|i[h>>2]),l=0|i[l>>2],-1==(0|(c=0|i[r>>2]))|(0|c)==(0|l))o=r;else{a=0;do{if((a=a+1|0)>>>0>=t>>>0){o=1;break e}c=0|i[(o=r+(a<<2)|0)>>2]}while(!(-1==(0|c)|(0|c)==(0|l)))}if(i[o>>2]=l,(A=A+1|0)>>>0>=u>>>0){o=0;break}}else for(A=0;;){if(Ie(l=d+(A<<4)|0,0|i[h>>2],0,1),l=0|i[l>>2],-1==(0|(c=0|i[r>>2]))|(0|c)==(0|l))o=r;else{a=0;do{if((a=a+1|0)>>>0>=t>>>0){o=1;break e}c=0|i[(o=r+(a<<2)|0)>>2]}while(!(-1==(0|c)|(0|c)==(0|l)))}if(i[o>>2]=l,(A=A+1|0)>>>0>=u>>>0){o=0;break}}}while(0)}return M=s,0|o},_getIndexDigit:function(e,t,n,r){return r|=0,((n|=0)-1|0)>>>0>14?0|(r=4):(n=0|nn(0|(e|=0),0|(t|=0),3*(15-n|0)|0),T(),i[r>>2]=7&n,0|(r=0))},_getNumCells:lt,_getPentagons:et,_getRes0Cells:function(e){e|=0;var t=0,n=0,r=0;t=0;do{rn(0|t,0,45),r=134225919|T(),i[(n=e+(t<<3)|0)>>2]=-1,i[n+4>>2]=r,t=t+1|0}while(122!=(0|t));return 0},_getResolution:function(e,t){return t=0|nn(0|(e|=0),0|(t|=0),52),T(),15&t},_greatCircleDistanceKm:at,_greatCircleDistanceM:function(e,t){e|=0;var n,r,i,o=0;return r=+s[(t|=0)>>3],n=+s[e>>3],o=(i=+d(.5*(r-n)))*i+(o=+d(.5*(+s[t+8>>3]-+s[e+8>>3])))*(+h(+r)*+h(+n)*o),2*+_(+ +c(+o),+ +c(+(1-o)))*6371.007180918475*1e3},_greatCircleDistanceRads:function(e,t){e|=0;var n,r,i,o=0;return r=+s[(t|=0)>>3],n=+s[e>>3],o=(i=+d(.5*(r-n)))*i+(o=+d(.5*(+s[t+8>>3]-+s[e+8>>3])))*(+h(+r)*+h(+n)*o),2*+_(+ +c(+o),+ +c(+(1-o)))},_gridDisk:L,_gridDiskDistances:N,_gridDistance:function(e,t,n,r,s){n|=0,r|=0,s|=0;var o,a,A=0,l=0;return a=M,M=M+32|0,l=a,0|(o=0|gt(e|=0,t|=0,e,t,A=a+12|0))?(M=a,0|(l=o)):0|(e=0|gt(e,t,n,r,l))?(M=a,0|(l=e)):(A=0|xe(A,l),i[(l=s)>>2]=A,i[l+4>>2]=((0|A)<0)<<31>>31,M=a,0|(l=0))},_gridPathCells:function(e,t,n,r,s){n|=0,r|=0,s|=0;var o,a,A=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0,x=0,E=0,C=0,k=0;if(a=M,M=M+48|0,c=a+12|0,C=a,!(A=0|gt(e|=0,t|=0,e,t,o=a+24|0))&&!(A=0|gt(e,t,n,r,c))){E=((0|(x=0|xe(o,c)))<0)<<31>>31,i[o>>2]=0,i[o+4>>2]=0,i[o+8>>2]=0,i[c>>2]=0,i[c+4>>2]=0,i[c+8>>2]=0,0|gt(e,t,e,t,o)&&S(27795,27538,692,27747),0|gt(e,t,n,r,c)&&S(27795,27538,697,27747),Ee(o),Ee(c),f=0|x?1/+(0|x):0,n=0|i[o>>2],b=f*+((0|i[c>>2])-n|0),r=0|i[(v=o+4|0)>>2],y=f*+((0|i[c+4>>2])-r|0),A=0|i[(w=o+8|0)>>2],f*=+((0|i[c+8>>2])-A|0),i[C>>2]=n,i[(p=C+4|0)>>2]=r,i[(g=C+8|0)>>2]=A;e:do{if((0|x)<0)A=0;else for(m=0,_=0;;){k=b*(h=+(_>>>0)+4294967296*+(0|m))+ +(0|n),u=y*h+ +(0|r),h=f*h+ +(0|A),n=~~+An(+k),c=~~+An(+u),A=~~+An(+h),k=+l(+(+(0|n)-k)),u=+l(+(+(0|c)-u)),h=+l(+(+(0|A)-h));do{if(!(k>u&k>h)){if(d=0-n|0,u>h){r=d-A|0;break}r=c,A=d-c|0;break}n=0-(c+A)|0,r=c}while(0);if(i[C>>2]=n,i[p>>2]=r,i[g>>2]=A,Te(C),0|(A=0|mt(e,t,C,s+(_<<3)|0)))break e;if(!((0|m)<(0|E)|(0|m)==(0|E)&_>>>0>>0)){A=0;break e}n=0|Xt(0|_,0|m,1,0),m=r=0|T(),_=n,n=0|i[o>>2],r=0|i[v>>2],A=0|i[w>>2]}}while(0);return M=a,0|A}return M=a,0|A},_gridPathCellsSize:function(e,t,n,r,s){n|=0,r|=0,s|=0;var o,a=0,A=0,l=0;return o=M,M=M+32|0,l=o,(a=0|gt(e|=0,t|=0,e,t,A=o+12|0))||(a=0|gt(e,t,n,r,l))?(M=o,0|(l=a)):(r=0|Xt(0|(r=0|xe(A,l)),((0|r)<0)<<31>>31,1,0),A=0|T(),i[(l=s)>>2]=r,i[l+4>>2]=A,M=o,0|(l=0))},_gridRing:function(e,t,n,r){return 0|F(e|=0,t|=0,n|=0,r|=0)?(cn(0|r,0,48*n|0),0|(r=0|function(e,t,n,r){e|=0,t|=0,r|=0;var s,o=0,a=0,A=0,l=0,c=0,u=0,h=0,d=0;if(s=M,M=M+16|0,A=s,!(n|=0))return i[r>>2]=e,i[r+4>>2]=t,M=s,0;do{if((0|n)>=0){if((0|n)>13780509){if(0|(o=0|lt(15,A)))break;o=0|i[(a=A)>>2],a=0|i[a+4>>2]}else h=0|Zt(0|n,0|(o=((0|n)<0)<<31>>31),3,0),a=0|T(),o=0|Xt(0|n,0|o,1,0),o=0|Xt(0|(o=0|Zt(0|h,0|a,0|o,0|T())),0|T(),1,0),a=0|T(),i[(h=A)>>2]=o,i[h+4>>2]=a;if(u=0|$t(o,8)){if(!(h=0|$t(o,4))){Ht(u),o=13;break}if(0|(o=0|D(e,t,n,u,h,o,a,0))){Ht(u),Ht(h);break}if(t=0|i[A>>2],(0|(A=0|i[A+4>>2]))>0|!(0|A)&t>>>0>0){o=0,l=0,c=0;do{!(0|(a=0|i[(e=u+(l<<3)|0)>>2]))&!(0|(e=0|i[e+4>>2]))||(0|i[h+(l<<2)>>2])!=(0|n)||(i[(d=r+(o<<3)|0)>>2]=a,i[d+4>>2]=e,o=o+1|0),l=0|Xt(0|l,0|c,1,0),c=0|T()}while((0|c)<(0|A)|(0|c)==(0|A)&l>>>0>>0)}Ht(u),Ht(h),o=0}else o=13}else o=2}while(0);return M=s,0|o}(e,t,n,r))):0|(r=0)},_gridRingUnsafe:F,_i64Add:Xt,_i64Subtract:Qt,_isPentagon:je,_isResClassIII:function(e,t){return t=0|nn(0|(e|=0),0|(t|=0),52),T(),1&t},_isValidCell:De,_isValidDirectedEdge:Se,_isValidIndex:function(e,t){e|=0;var n=0,i=0,s=0,o=0;if(!0&134217728==(-16777216&(t|=0))&&(i=0|nn(0|e,0|t,52),T(),i&=15,n=0|nn(0|e,0|t,45),T(),(n&=127)>>>0<=121)&&!(613566756&(o=0|rn(0|(s=0|nn(0|e,0|t,0|(o=3*(15^i)|0))),0|T(),0|o))&Qt(-1227133514,-1171,0|o,0|(s=0|T())))&!(4681&s&T())&&15==(0|i)|!(0|(o=0|nn(0|rn(0|~e,0|~t,0|(o=19+(3*i|0)|0)),0|T(),0|o)))&!(0|T())){if(!(0|r[20528+n|0]))return 1;if(!(0|e)&!(0|(n=8191&t)))return 1;if(o=0|sn(0|e,0|n),T(),(63-o|0)%3|0)return 1}return 0|Se(e,t)?0|(o=1):0|(o=1&!!(0|Bt(e,t)))},_isValidVertex:Bt,_latLngToCell:Ye,_llvm_ctlz_i64:sn,_llvm_maxnum_f64:on,_llvm_minnum_f64:an,_llvm_round_f64:An,_localIjToCell:function(e,t,n,r,s){var o,a;return e|=0,t|=0,n|=0,s|=0,a=M,M=M+16|0,o=a,(r|=0)?n=15:(n=0|function(e,t){t|=0;var n,r,s,o=0,a=0,A=0;if(a=0|i[(e|=0)>>2],i[t>>2]=a,A=0|i[e+4>>2],i[(r=t+4|0)>>2]=A,i[(s=t+8|0)>>2]=0,e=(o=(0|A)<(0|a))?a:A,(0|(o=o?A:a))<0){if(-2147483648==(0|o)||((0|e)>0?(2147483647-e|0)<(0|o):(-2147483648-e|0)>(0|o)))return 1;if((0|e)>-1?(-2147483648|e)>=(0|o):(-2147483648^e)<(0|o))return 1}return e=A-a|0,(0|a)<0?(o=0-a|0,i[r>>2]=e,i[s>>2]=o,i[t>>2]=0,a=0):(e=A,o=0),(0|e)<0&&(a=a-e|0,i[t>>2]=a,o=o-e|0,i[s>>2]=o,i[r>>2]=0,e=0),n=a-o|0,A=e-o|0,(0|o)<0?(i[t>>2]=n,i[r>>2]=A,i[s>>2]=0,e=A,A=n,o=0):A=a,(0|(a=(0|o)<(0|(a=(0|e)<(0|A)?e:A))?o:a))<=0||(i[t>>2]=A-a,i[r>>2]=e-a,i[s>>2]=o-a),0}(n,o))||(n=0|mt(e,t,o,s)),M=a,0|n},_malloc:Wt,_maxFaceCount:function(e,t,n){n|=0;var r=0,s=0;if(s=0|nn(0|(e|=0),0|(t|=0),45),T(),!(0|G(127&s)))return s=2,i[n>>2]=s,0;if(s=0|nn(0|e,0|t,52),T(),!(s&=15))return s=5,i[n>>2]=s,0;for(r=1;;){if(!(!((0|rn(7,0,3*(15-r|0)|0))&e)&!((0|T())&t))){r=2,e=6;break}if(!(r>>>0>>0)){r=5,e=6;break}r=r+1|0}return 6==(0|e)?(i[n>>2]=r,0):0},_maxGridDiskSize:function(e,t){t|=0;var n=0,r=0,s=0;return(0|(e|=0))<0?0|(t=2):(0|e)>13780509?0|(t=0|lt(15,t)):(s=0|Zt(0|e,0|(n=((0|e)<0)<<31>>31),3,0),r=0|T(),n=0|Xt(0|e,0|n,1,0),n=0|Xt(0|(n=0|Zt(0|s,0|r,0|n,0|T())),0|T(),1,0),e=0|T(),i[t>>2]=n,i[t+4>>2]=e,0|(t=0))},_maxPolygonToCellsSize:function(e,t,n,r){e|=0,t|=0,r|=0;var s,o=0,a=0,A=0,l=0,c=0;if(s=M,M=M+48|0,o=s+16|0,a=s+8|0,A=s,0|(n=0|Et(n|=0)))return M=s,0|n;if(l=0|i[(c=e)+4>>2],i[(n=a)>>2]=i[c>>2],i[n+4>>2]=l,xt(a,o),!(n=0|te(o,t,A))){if(t=0|i[a>>2],(0|(a=0|i[e+8>>2]))>0){o=0|i[e+12>>2],n=0;do{t=(0|i[o+(n<<3)>>2])+t|0,n=n+1|0}while((0|n)<(0|a))}o=0|i[(n=A)>>2],(0|(n=0|i[n+4>>2]))<(0|(a=((0|t)<0)<<31>>31))|(0|n)==(0|a)&o>>>0>>0?(i[(n=A)>>2]=t,i[n+4>>2]=a,n=a):t=o,l=0|Xt(0|t,0|n,12,0),c=0|T(),i[(n=A)>>2]=l,i[n+4>>2]=c,i[(n=r)>>2]=l,i[n+4>>2]=c,n=0}return M=s,0|n},_maxPolygonToCellsSizeExperimental:function(e,t,n,o){t|=0,n|=0,o|=0;var a,A,c=0,u=0,d=0,f=0,p=0,g=0,m=0,_=0;if(A=M,M=M+48|0,p=A+32|0,f=A+40|0,a=A,!(0|i[(e|=0)>>2]))return i[(g=o)>>2]=0,i[g+4>>2]=0,M=A,0;Oe(p,0,0,0),c=0|i[(d=p)>>2],d=0|i[d+4>>2];do{if(t>>>0>15)i[(g=a)>>2]=0,i[g+4>>2]=0,i[a+8>>2]=4,i[a+12>>2]=-1,n=a+29|0,i[(g=a+16|0)>>2]=0,i[g+4>>2]=0,i[g+8>>2]=0,r[g+12|0]=0,r[0|n]=0|r[0|f],r[n+1|0]=0|r[f+1|0],r[n+2|0]=0|r[f+2|0],n=4,g=9;else{if(0|(n=0|Et(n))){i[(p=a)>>2]=0,i[p+4>>2]=0,i[a+8>>2]=n,i[a+12>>2]=-1,g=a+29|0,i[(p=a+16|0)>>2]=0,i[p+4>>2]=0,i[p+8>>2]=0,r[p+12|0]=0,r[0|g]=0|r[0|f],r[g+1|0]=0|r[f+1|0],r[g+2|0]=0|r[f+2|0],g=9;break}if(!(n=0|$t(1+(0|i[e+8>>2])|0,32))){i[(g=a)>>2]=0,i[g+4>>2]=0,i[a+8>>2]=13,i[a+12>>2]=-1,n=a+29|0,i[(g=a+16|0)>>2]=0,i[g+4>>2]=0,i[g+8>>2]=0,r[g+12|0]=0,r[0|n]=0|r[0|f],r[n+1|0]=0|r[f+1|0],r[n+2|0]=0|r[f+2|0],n=13,g=9;break}Tt(e,n),i[(_=a)>>2]=c,i[_+4>>2]=d,i[(d=a+8|0)>>2]=0,i[a+12>>2]=t,i[a+20>>2]=e,i[a+24>>2]=n,r[a+28|0]=0,r[0|(c=a+29|0)]=0|r[0|f],r[c+1|0]=0|r[f+1|0],r[c+2|0]=0|r[f+2|0],i[a+16>>2]=3,m=+q(n),m*=+Q(n),u=+l(+ +s[n>>3]),u=m/+h(+ +an(+u,+ +l(+ +s[n+8>>3])))*6371.007180918475*6371.007180918475,n=0|i[(c=a+12|0)>>2];e:do{if((0|n)>0)do{if(At(n+-1|0,p),!(u/+s[p>>3]>10))break e;n=(_=0|i[c>>2])-1|0,i[c>>2]=n}while((0|_)>1)}while(0);if(vt(a),i[(c=o)>>2]=0,i[c+4>>2]=0,!(!(0|(n=0|i[(c=a)>>2]))&!(0|(c=0|i[c+4>>2]))))do{Ue(n,c,t,p),f=p,f=0|Xt(0|i[(e=o)>>2],0|i[e+4>>2],0|i[f>>2],0|i[f+4>>2]),e=0|T(),i[(_=o)>>2]=f,i[_+4>>2]=e,vt(a),n=0|i[(_=a)>>2],c=0|i[_+4>>2]}while(!(!(0|n)&!(0|c)));n=0|i[d>>2]}}while(0);return M=A,0|n},_memcpy:ln,_memset:cn,_originToDirectedEdges:function(e,t,n){n|=0;var r,s=0;return r=!(0|je(e|=0,t|=0)),t&=-2130706433,i[(s=n)>>2]=r?e:0,i[s+4>>2]=r?285212672|t:0,i[(s=n+8|0)>>2]=e,i[s+4>>2]=301989888|t,i[(s=n+16|0)>>2]=e,i[s+4>>2]=318767104|t,i[(s=n+24|0)>>2]=e,i[s+4>>2]=335544320|t,i[(s=n+32|0)>>2]=e,i[s+4>>2]=352321536|t,i[(n=n+40|0)>>2]=e,i[n+4>>2]=369098752|t,0},_pentagonCount:function(){return 12},_polygonToCells:function(e,t,n,r){e|=0,t|=0,r|=0;var s,o,a,A,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0,b=0,v=0,y=0,w=0,x=0,E=0,S=0,C=0,k=0,R=0,P=0,I=0,L=0,N=0,O=0,F=0,U=0;if(A=M,M=M+112|0,s=A+80|0,d=A+72|0,o=A,a=A+56|0,0|(l=0|Et(n|=0)))return M=A,0|l;if(!(U=0|Wt(32+(i[(f=e+8|0)>>2]<<5)|0)))return M=A,13;if(Tt(e,U),!(l=0|Et(n))){if(F=0|i[(O=e)+4>>2],i[(l=d)>>2]=i[O>>2],i[l+4>>2]=F,xt(d,s),l=0|te(s,t,o))O=0,F=0;else{if(l=0|i[d>>2],(0|(c=0|i[f>>2]))>0){u=0|i[e+12>>2],n=0;do{l=(0|i[u+(n<<3)>>2])+l|0,n=n+1|0}while((0|n)!=(0|c));n=l}else n=l;c=0|i[(l=o)>>2],(0|(l=0|i[l+4>>2]))<(0|(u=((0|n)<0)<<31>>31))|(0|l)==(0|u)&c>>>0>>0?(i[(l=o)>>2]=n,i[l+4>>2]=u,l=u):n=c,O=0|Xt(0|n,0|l,12,0),F=0|T(),i[(l=o)>>2]=O,i[l+4>>2]=F,l=0}if(!l){if(!(n=0|$t(O,8)))return Ht(U),M=A,13;if(!(h=0|$t(O,8)))return Ht(U),Ht(n),M=A,13;i[(L=s)>>2]=0,i[L+4>>2]=0,N=0|i[(L=e)+4>>2],i[(l=d)>>2]=i[L>>2],i[l+4>>2]=N,l=0|j(d,O,F,t,s,n,h);e:do{if(l)Ht(n),Ht(h),Ht(U);else{t:do{if((0|i[f>>2])>0){for(u=e+12|0,c=0;l=0|j((0|i[u>>2])+(c<<3)|0,O,F,t,s,n,h),c=c+1|0,!(0|l);)if((0|c)>=(0|i[f>>2]))break t;Ht(n),Ht(h),Ht(U);break e}}while(0);(0|F)>0|!(0|F)&O>>>0>0&&cn(0|h,0,O<<3),L=0|i[(N=s)+4>>2];t:do{if((0|L)>0|!(0|L)&(0|i[N>>2])>>>0>0){R=n,P=h,I=n,L=h,N=n,l=n,S=n,C=h,k=h,n=h;n:for(;;){for(y=0,w=0,x=0,E=0,c=0,u=0;;){d=(h=o)+56|0;do{i[h>>2]=0,h=h+4|0}while((0|h)<(0|d));if(0|B(f=0|i[(t=R+(y<<3)|0)>>2],t=0|i[t+4>>2],1,o,0)){d=(h=o)+56|0;do{i[h>>2]=0,h=h+4|0}while((0|h)<(0|d));0|(h=0|$t(7,4))&&(D(f,t,1,o,h,7,0,0),Ht(h))}for(v=0;;){_=0|i[(b=o+(v<<3)|0)>>2],b=0|i[b+4>>2];r:do{if(!(0|_)&!(0|b))h=c,d=u;else{if(p=0|en(0|_,0|b,0|O,0|F),f=0|T(),!(!(0|(d=0|i[(t=h=r+(p<<3)|0)>>2]))&!(0|(t=0|i[t+4>>2])))){g=0,m=0;do{if((0|g)>(0|F)|(0|g)==(0|F)&m>>>0>O>>>0)break n;if((0|d)==(0|_)&(0|t)==(0|b)){h=c,d=u;break r}p=0|Jt(0|(h=0|Xt(0|p,0|f,1,0)),0|T(),0|O,0|F),f=0|T(),m=0|Xt(0|m,0|g,1,0),g=0|T(),d=0|i[(t=h=r+(p<<3)|0)>>2],t=0|i[t+4>>2]}while(!(!(0|d)&!(0|t)))}if(!(0|_)&!(0|b)){h=c,d=u;break}Ze(_,b,a),0|St(e,U,a)&&(m=0|Xt(0|c,0|u,1,0),u=0|T(),i[(g=h)>>2]=_,i[g+4>>2]=b,i[(c=P+(c<<3)|0)>>2]=_,i[c+4>>2]=b,c=m),h=c,d=u}}while(0);if((v=v+1|0)>>>0>=7)break;c=h,u=d}if(y=0|Xt(0|y,0|w,1,0),w=0|T(),x=0|Xt(0|x,0|E,1,0),E=0|T(),c=0|i[(u=s)>>2],!((0|E)<(0|(u=0|i[u+4>>2]))|(0|E)==(0|u)&x>>>0>>0))break;c=h,u=d}if((0|u)>0|!(0|u)&c>>>0>0){c=0,u=0;do{i[(E=R+(c<<3)|0)>>2]=0,i[E+4>>2]=0,c=0|Xt(0|c,0|u,1,0),u=0|T(),x=0|i[(E=s)+4>>2]}while((0|u)<(0|x)|((0|u)==(0|x)?c>>>0<(0|i[E>>2])>>>0:0))}if(i[(E=s)>>2]=h,i[E+4>>2]=d,!((0|d)>0|!(0|d)&h>>>0>0))break t;v=n,y=k,w=N,x=C,E=P,n=S,k=l,C=I,S=v,l=y,N=L,L=w,I=x,P=R,R=E}Ht(I),Ht(L),Ht(U),l=1;break e}l=h}while(0);Ht(U),Ht(n),Ht(l),l=0}}while(0);return M=A,0|l}}return Ht(U),M=A,0|l},_polygonToCellsExperimental:function(e,t,n,s,o,a){s|=0,o|=0,a|=0;var A,l,c,u=0,h=0,d=0,f=0,p=0,g=0,m=0,_=0;c=M,M=M+160|0,h=c+64|0,p=c+112|0,_=c,function(e,t,n,s){e|=0,t|=0,n|=0,s|=0;var o,a,A,l=0,c=0,u=0,h=0;A=M,M=M+48|0,o=A+40|0,a=A,Oe(c=A+32|0,0,0,0),u=0|i[c>>2],c=0|i[c+4>>2];do{if(n>>>0<=15){if(0|(l=0|Et(s))){i[(s=a)>>2]=0,i[s+4>>2]=0,i[a+8>>2]=l,i[a+12>>2]=-1,u=a+29|0,i[(s=a+16|0)>>2]=0,i[s+4>>2]=0,i[s+8>>2]=0,r[s+12|0]=0,r[0|u]=0|r[0|o],r[u+1|0]=0|r[o+1|0],r[u+2|0]=0|r[o+2|0];break}if(l=0|$t(1+(0|i[t+8>>2])|0,32)){Tt(t,l),i[(h=a)>>2]=u,i[h+4>>2]=c,i[a+8>>2]=0,i[a+12>>2]=n,i[a+16>>2]=s,i[a+20>>2]=t,i[a+24>>2]=l,r[a+28|0]=0,r[0|(u=a+29|0)]=0|r[0|o],r[u+1|0]=0|r[o+1|0],r[u+2|0]=0|r[o+2|0];break}i[(s=a)>>2]=0,i[s+4>>2]=0,i[a+8>>2]=13,i[a+12>>2]=-1,u=a+29|0,i[(s=a+16|0)>>2]=0,i[s+4>>2]=0,i[s+8>>2]=0,r[s+12|0]=0,r[0|u]=0|r[0|o],r[u+1|0]=0|r[o+1|0],r[u+2|0]=0|r[o+2|0];break}i[(u=a)>>2]=0,i[u+4>>2]=0,i[a+8>>2]=4,i[a+12>>2]=-1,h=a+29|0,i[(u=a+16|0)>>2]=0,i[u+4>>2]=0,i[u+8>>2]=0,r[u+12|0]=0,r[0|h]=0|r[0|o],r[h+1|0]=0|r[o+1|0],r[h+2|0]=0|r[o+2|0]}while(0);vt(a),i[e>>2]=i[a>>2],i[e+4>>2]=i[a+4>>2],i[e+8>>2]=i[a+8>>2],i[e+12>>2]=i[a+12>>2],i[e+16>>2]=i[a+16>>2],i[e+20>>2]=i[a+20>>2],i[e+24>>2]=i[a+24>>2],i[e+28>>2]=i[a+28>>2],M=A}(f=c+80|0,e|=0,t|=0,n|=0),tt(h,0|i[(d=f)>>2],0|i[d+4>>2],t),A=0|i[(d=h)>>2],d=0|i[d+4>>2],u=0|i[f+8>>2],i[(g=p+4|0)>>2]=i[f>>2],i[g+4>>2]=i[f+4>>2],i[g+8>>2]=i[f+8>>2],i[g+12>>2]=i[f+12>>2],i[g+16>>2]=i[f+16>>2],i[g+20>>2]=i[f+20>>2],i[g+24>>2]=i[f+24>>2],i[g+28>>2]=i[f+28>>2],i[(g=_)>>2]=A,i[g+4>>2]=d,i[(g=_+8|0)>>2]=u,t=p,n=36+(e=_+12|0)|0;do{i[e>>2]=i[t>>2],e=e+4|0,t=t+4|0}while((0|e)<(0|n));if(i[(p=_+48|0)>>2]=i[h>>2],i[p+4>>2]=i[h+4>>2],i[p+8>>2]=i[h+8>>2],i[p+12>>2]=i[h+12>>2],!(0|A)&!(0|d))return M=c,0|u;n=_+16|0,l=_+24|0,f=_+28|0,u=0,h=0,t=A,e=d;do{if(!((0|u)<(0|o)|(0|u)==(0|o)&h>>>0>>0)){m=4;break}if(d=h,h=0|Xt(0|h,0|u,1,0),u=0|T(),i[(d=a+(d<<3)|0)>>2]=t,i[d+4>>2]=e,rt(p),!(0|(t=0|i[(e=p)>>2]))&!(0|(e=0|i[e+4>>2]))){if(vt(n),!(0|(e=0|i[(t=n)>>2]))&!(0|(t=0|i[t+4>>2]))){m=10;break}nt(e,t,0|i[f>>2],p),t=0|i[(e=p)>>2],e=0|i[e+4>>2]}i[(d=_)>>2]=t,i[d+4>>2]=e}while(!(!(0|t)&!(0|e)));return 4==(0|m)?(0|(t=0|i[(e=_+40|0)>>2])&&Ht(t),i[(m=_+16|0)>>2]=0,i[m+4>>2]=0,i[l>>2]=0,i[_+36>>2]=0,i[f>>2]=-1,i[_+32>>2]=0,i[e>>2]=0,nt(0,0,0,p),i[_>>2]=0,i[_+4>>2]=0,i[g>>2]=0,M=c,0|(_=14)):(10==(0|m)&&(i[_>>2]=0,i[_+4>>2]=0,i[g>>2]=i[l>>2]),_=0|i[g>>2],M=c,0|_)},_readInt64AsDoubleFromPointer:function(e){return+(+((0|i[(e|=0)>>2])>>>0)+4294967296*+(0|i[e+4>>2]))},_res0CellCount:function(){return 122},_round:un,_sbrk:hn,_sizeOfCellBoundary:function(){return 168},_sizeOfCoordIJ:function(){return 8},_sizeOfGeoLoop:function(){return 8},_sizeOfGeoPolygon:function(){return 16},_sizeOfH3Index:function(){return 8},_sizeOfLatLng:function(){return 16},_sizeOfLinkedGeoPolygon:function(){return 12},_uncompactCells:function(e,t,n,r,s,o,a){e|=0,r|=0,s|=0,o|=0;var A,l=0,c=0,u=0,h=0,d=0,f=0,p=0,g=0;if(A=M,M=M+16|0,g=A,!((0|(n|=0))>0|!(0|n)&(t|=0)>>>0>0))return M=A,0;if((0|(a|=0))>=16)return M=A,12;f=0,p=0,d=0,l=0;e:for(;;){if(h=0|nn(0|(c=0|i[(u=e+(f<<3)|0)>>2]),0|(u=0|i[u+4>>2]),52),T(),(15&h)>(0|a)){l=12,c=11;break}if(tt(g,c,u,a),!(0|(u=0|i[(h=g)>>2]))&!(0|(h=0|i[h+4>>2])))c=d;else{c=d;do{if(!((0|l)<(0|o)|(0|l)==(0|o)&c>>>0>>0)){c=10;break e}i[(d=r+(c<<3)|0)>>2]=u,i[d+4>>2]=h,c=0|Xt(0|c,0|l,1,0),l=0|T(),rt(g),u=0|i[(d=g)>>2],h=0|i[d+4>>2]}while(!(!(0|u)&!(0|h)))}if(f=0|Xt(0|f,0|p,1,0),!((0|(p=0|T()))<(0|n)|(0|p)==(0|n)&f>>>0>>0)){l=0,c=11;break}d=c}return 10==(0|c)?(M=A,0|(g=14)):11==(0|c)?(M=A,0|l):0},_uncompactCellsSize:function(e,t,n,r,s){e|=0,t|=0,n|=0,r|=0,s|=0;var o,a,A=0,l=0,c=0,u=0,h=0,d=0;a=M,M=M+16|0,o=a;e:do{if((0|n)>0|!(0|n)&t>>>0>0){for(h=0,l=0,A=0,d=0;;){if(!(!(0|(c=0|i[(u=e+(h<<3)|0)>>2]))&!(0|(u=0|i[u+4>>2]))||(u=!(0|Ue(c,u,r,o)),l=0|Xt(0|i[(c=o)>>2],0|i[c+4>>2],0|l,0|A),A=0|T(),u))){A=12;break}if(h=0|Xt(0|h,0|d,1,0),!((0|(d=0|T()))<(0|n)|(0|d)==(0|n)&h>>>0>>0))break e}return M=a,0|A}l=0,A=0}while(0);return i[s>>2]=l,i[s+4>>2]=A,M=a,0},_vertexToLatLng:function(e,t,n){n|=0;var r,s,o,a,A=0,l=0;return a=M,M=M+192|0,s=a,o=a+168|0,A=0|nn(0|(e|=0),0|(t|=0),56),T(),A&=7,0|(r=0|Ke(e,l=-2130706433&t|134217728,o))?(M=a,0|(l=r)):(t=0|nn(0|e,0|t,52),T(),t&=15,0|je(e,l)?Re(o,t,A,1,s):Le(o,t,A,1,s),l=s+8|0,i[n>>2]=i[l>>2],i[n+4>>2]=i[l+4>>2],i[n+8>>2]=i[l+8>>2],i[n+12>>2]=i[l+12>>2],M=a,0|(l=0))},establishStackSpace:function(e,t){M=e|=0},stackAlloc:function(e){var t;return t=M,M=15+(M=M+(e|=0)|0)&-16,0|t},stackRestore:function(e){M=e|=0},stackSave:function(){return 0|M}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Float32Array:Float32Array,Float64Array:Float64Array},{b:function(e){A=e},c:function(){return A},d:function(e,t,n,r){ne("Assertion failed: "+b(e)+", at: "+[t?b(t):"unknown filename",n,r?b(r):"unknown function"])},e:function(e){return n.___errno_location&&(p[n.___errno_location()>>2]=e),e},f:G,g:function(e,t,n){d.set(d.subarray(t,t+n),e)},h:function(e){var t=G(),n=16777216,r=2130706432;if(e>r)return!1;for(var i=Math.max(t,16777216);i0))return 0;for(var i=n+r-1,s=0;s=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++s)),o<=127){if(n>=i)break;t[n++]=o}else if(o<=2047){if(n+1>=i)break;t[n++]=192|o>>6,t[n++]=128|63&o}else if(o<=65535){if(n+2>=i)break;t[n++]=224|o>>12,t[n++]=128|o>>6&63,t[n++]=128|63&o}else{if(n+3>=i)break;t[n++]=240|o>>18,t[n++]=128|o>>12&63,t[n++]=128|o>>6&63,t[n++]=128|63&o}}t[n]=0}(e,d,t,n)}(e,t=Q(n),n)}return t},array:function(e){var t,n,r=Q(e.length);return t=e,n=r,h.set(t,n),r}},s=c(e),o=[],a=0;if(r)for(var A=0;A>1]=t;break;case"i32":p[e>>2]=t;break;case"i64":O=[t>>>0,(D=t,+P(D)>=1?D>0?(0|L(+M(D/4294967296),4294967295))>>>0:~~+I((D-+(~~D>>>0))/4294967296)>>>0:0)],p[e>>2]=O[0],p[e+4>>2]=O[1];break;case"float":g[e>>2]=t;break;case"double":m[e>>3]=t;break;default:ne("invalid type for setValue: "+n)}},n.getValue=function(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return h[0|e];case"i16":return f[e>>1];case"i32":case"i64":return p[e>>2];case"float":return g[e>>2];case"double":return m[e>>3];default:ne("invalid type for getValue: "+t)}return null},F){j(F)||($=F,F=n.locateFile?n.locateFile($,s):s+$),N++,n.monitorRunDependencies&&n.monitorRunDependencies(N);var K=function(e){e.byteLength&&(e=new Uint8Array(e)),d.set(e,8),n.memoryInitializerRequest&&delete n.memoryInitializerRequest.response,function(){if(N--,n.monitorRunDependencies&&n.monitorRunDependencies(N),0==N&&B){var e=B;B=null,e()}}()},Z=function(){i(F,K,function(){throw"could not load memory initializer "+F})},J=V(F);if(J)K(J.buffer);else if(n.memoryInitializerRequest){var ee=function(){var e=n.memoryInitializerRequest,t=e.response;if(200!==e.status&&0!==e.status){var r=V(n.memoryInitializerRequestURL);if(!r)return void Z();t=r.buffer}K(t)};n.memoryInitializerRequest.response?setTimeout(ee,0):n.memoryInitializerRequest.addEventListener("load",ee)}else Z()}function te(e){function t(){X||(X=!0,l||(x(T),x(S),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)R(n.postRun.shift());x(C)}()))}N>0||(function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)k(n.preRun.shift());x(E)}(),N>0||(n.setStatus?(n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),t()},1)):t()))}function ne(e){throw n.onAbort&&n.onAbort(e),o(e+=""),a(e),l=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}if(B=function e(){X||te(),X||(B=e)},n.run=te,n.abort=ne,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();return te(),e}("object"==typeof Em?Em:{}),Tm="number",Sm={0:"Success",1:"The operation failed but a more specific error is not available",2:"Argument was outside of acceptable range",3:"Latitude or longitude arguments were outside of acceptable range",4:"Resolution argument was outside of acceptable range",5:"Cell argument was not valid",6:"Directed edge argument was not valid",7:"Undirected edge argument was not valid",8:"Vertex argument was not valid",9:"Pentagon distortion was encountered",10:"Duplicate input",11:"Cell arguments were not neighbors",12:"Cell arguments had incompatible resolutions",13:"Memory allocation failed",14:"Bounds of provided memory were insufficient",15:"Mode or flags argument was not valid",16:"Index argument was not valid",17:"Base cell number was outside of acceptable range",18:"Child indexing digits invalid",19:"Child indexing digits refer to a deleted subsequence"},Cm={1e3:"Unknown unit",1001:"Array length out of bounds",1002:"Got unexpected null value for H3 index"};function km(e,t,n){var r=n&&"value"in n,i=new Error((e[t]||"Unknown error")+" (code: "+t+(r?", value: "+n.value:"")+")");return i.code=t,i}function Rm(e,t){return km(Sm,e,2===arguments.length?{value:t}:{})}function Pm(e,t){return km(Cm,e,2===arguments.length?{value:t}:{})}function Im(e){if(0!==e)throw Rm(e)}var Mm={};[["sizeOfH3Index",Tm],["sizeOfLatLng",Tm],["sizeOfCellBoundary",Tm],["sizeOfGeoLoop",Tm],["sizeOfGeoPolygon",Tm],["sizeOfLinkedGeoPolygon",Tm],["sizeOfCoordIJ",Tm],["readInt64AsDoubleFromPointer",Tm],["isValidCell",Tm,[Tm,Tm]],["isValidIndex",Tm,[Tm,Tm]],["latLngToCell",Tm,[Tm,Tm,Tm,Tm]],["cellToLatLng",Tm,[Tm,Tm,Tm]],["cellToBoundary",Tm,[Tm,Tm,Tm]],["maxGridDiskSize",Tm,[Tm,Tm]],["gridDisk",Tm,[Tm,Tm,Tm,Tm]],["gridDiskDistances",Tm,[Tm,Tm,Tm,Tm,Tm]],["gridRing",Tm,[Tm,Tm,Tm,Tm]],["gridRingUnsafe",Tm,[Tm,Tm,Tm,Tm]],["maxPolygonToCellsSize",Tm,[Tm,Tm,Tm,Tm]],["polygonToCells",Tm,[Tm,Tm,Tm,Tm]],["maxPolygonToCellsSizeExperimental",Tm,[Tm,Tm,Tm,Tm]],["polygonToCellsExperimental",Tm,[Tm,Tm,Tm,Tm,Tm,Tm]],["cellsToLinkedMultiPolygon",Tm,[Tm,Tm,Tm]],["destroyLinkedMultiPolygon",null,[Tm]],["compactCells",Tm,[Tm,Tm,Tm,Tm]],["uncompactCells",Tm,[Tm,Tm,Tm,Tm,Tm,Tm]],["uncompactCellsSize",Tm,[Tm,Tm,Tm,Tm,Tm]],["isPentagon",Tm,[Tm,Tm]],["isResClassIII",Tm,[Tm,Tm]],["getBaseCellNumber",Tm,[Tm,Tm]],["getResolution",Tm,[Tm,Tm]],["getIndexDigit",Tm,[Tm,Tm,Tm]],["constructCell",Tm,[Tm,Tm,Tm,Tm]],["maxFaceCount",Tm,[Tm,Tm,Tm]],["getIcosahedronFaces",Tm,[Tm,Tm,Tm]],["cellToParent",Tm,[Tm,Tm,Tm,Tm]],["cellToChildren",Tm,[Tm,Tm,Tm,Tm]],["cellToCenterChild",Tm,[Tm,Tm,Tm,Tm]],["cellToChildrenSize",Tm,[Tm,Tm,Tm,Tm]],["cellToChildPos",Tm,[Tm,Tm,Tm,Tm]],["childPosToCell",Tm,[Tm,Tm,Tm,Tm,Tm,Tm]],["areNeighborCells",Tm,[Tm,Tm,Tm,Tm,Tm]],["cellsToDirectedEdge",Tm,[Tm,Tm,Tm,Tm,Tm]],["getDirectedEdgeOrigin",Tm,[Tm,Tm,Tm]],["getDirectedEdgeDestination",Tm,[Tm,Tm,Tm]],["isValidDirectedEdge",Tm,[Tm,Tm]],["directedEdgeToCells",Tm,[Tm,Tm,Tm]],["originToDirectedEdges",Tm,[Tm,Tm,Tm]],["directedEdgeToBoundary",Tm,[Tm,Tm,Tm]],["gridDistance",Tm,[Tm,Tm,Tm,Tm,Tm]],["gridPathCells",Tm,[Tm,Tm,Tm,Tm,Tm]],["gridPathCellsSize",Tm,[Tm,Tm,Tm,Tm,Tm]],["cellToLocalIj",Tm,[Tm,Tm,Tm,Tm,Tm,Tm]],["localIjToCell",Tm,[Tm,Tm,Tm,Tm,Tm]],["getHexagonAreaAvgM2",Tm,[Tm,Tm]],["getHexagonAreaAvgKm2",Tm,[Tm,Tm]],["getHexagonEdgeLengthAvgM",Tm,[Tm,Tm]],["getHexagonEdgeLengthAvgKm",Tm,[Tm,Tm]],["greatCircleDistanceM",Tm,[Tm,Tm]],["greatCircleDistanceKm",Tm,[Tm,Tm]],["greatCircleDistanceRads",Tm,[Tm,Tm]],["cellAreaM2",Tm,[Tm,Tm,Tm]],["cellAreaKm2",Tm,[Tm,Tm,Tm]],["cellAreaRads2",Tm,[Tm,Tm,Tm]],["edgeLengthM",Tm,[Tm,Tm,Tm]],["edgeLengthKm",Tm,[Tm,Tm,Tm]],["edgeLengthRads",Tm,[Tm,Tm,Tm]],["getNumCells",Tm,[Tm,Tm]],["getRes0Cells",Tm,[Tm]],["res0CellCount",Tm],["getPentagons",Tm,[Tm,Tm]],["pentagonCount",Tm],["cellToVertex",Tm,[Tm,Tm,Tm,Tm]],["cellToVertexes",Tm,[Tm,Tm,Tm]],["vertexToLatLng",Tm,[Tm,Tm,Tm]],["isValidVertex",Tm,[Tm,Tm]]].forEach(function(e){Mm[e[0]]=Em.cwrap.apply(Em,e)});var Lm=16,Nm=Mm.sizeOfH3Index(),Bm=Mm.sizeOfLatLng(),Dm=Mm.sizeOfCellBoundary();Mm.sizeOfGeoPolygon(),Mm.sizeOfGeoLoop(),Mm.sizeOfLinkedGeoPolygon(),Mm.sizeOfCoordIJ();var Om=/[^0-9a-fA-F]/;function Fm(e){if(Array.isArray(e)&&2===e.length&&Number.isInteger(e[0])&&Number.isInteger(e[1]))return e;if("string"!=typeof e||Om.test(e))return[0,0];var t=parseInt(e.substring(0,e.length-8),Lm);return[parseInt(e.substring(e.length-8),Lm),t]}function Um(e){if(e>=0)return e.toString(Lm);var t=jm(8,(e&=2147483647).toString(Lm));return(parseInt(t[0],Lm)+8).toString(Lm)+t.substring(1)}function jm(e,t){for(var n=e-t.length,r="",i=0;i15||Math.floor(e)!==e)throw Rm(4,e)}(e);var n,r,i=Em._malloc(8);try{switch(t){case"m":Im(Mm.getHexagonEdgeLengthAvgM(e,i));break;case"km":Im(Mm.getHexagonEdgeLengthAvgKm(e,i));break;default:throw Pm(1e3,t)}return n=i,void 0===r&&(r=0),Em.getValue(n+8*r,"double")}finally{Em._free(i)}}function Qm(e){return e*Math.PI/180}function Ym(e,t){t=void 0===t?e[0][0]:t;for(const n of e){const e=n[0]-t;e>180?n[0]-=360:e<-180&&(n[0]+=360)}}function qm(e,t,n){const r=e(t,n),[i,s]=$m(r);return[s,i]}function Km(e,t=1){const n=function(e){var t=Em._malloc(Dm),n=Fm(e),r=n[0],i=n[1];try{return Im(Mm.cellToBoundary(r,i,t)),function(e){for(var t=Em.getValue(e,"i32"),n=e+8,r=[],i=zm,s=0;s<2*t;s+=2)r.push(i(n+8*s));return r.push(r[0]),r}(t)}finally{Em._free(t)}}(e);return 1!==t?function(e,t,n){const[r,i]=$m(e),s=t.length;Ym(t,i);const o=t[0]===t[s-1]?s-1:s;for(let a=0;ae.hexagon},extruded:!0};class Jm extends Ag{initializeState(){Jm._checkH3Lib(),this.state={edgeLengthKM:0,resolution:-1}}shouldUpdateState({changeFlags:e}){return this._shouldUseHighPrecision()?e.propsOrDataChanged:e.somethingChanged}updateState({props:e,changeFlags:t}){if(!0!==e.highPrecision&&(t.dataChanged||t.updateTriggersChanged&&t.updateTriggersChanged.getHexagon)){const e=this._calculateH3DataProps();this.setState(e)}this._updateVertices(this.context.viewport)}_calculateH3DataProps(){let e=-1,t=!1,n=!1;const{iterable:r,objectInfo:i}=ap(this.props.data);for(const s of r){i.index++;const r=this.props.getHexagon(s,i),o=Wm(r);if(e<0){if(e=o,!this.props.highPrecision)break}else if(e!==o){n=!0;break}if(Vm(r)){t=!0;break}}return{resolution:e,edgeLengthKM:e>=0?Xm(e,"km"):0,hasMultipleRes:n,hasPentagon:t}}_shouldUseHighPrecision(){if("auto"===this.props.highPrecision){const{resolution:e,hasPentagon:t,hasMultipleRes:n}=this.state,{viewport:r}=this.context;return Boolean(null==r?void 0:r.resolution)||n||t||e>=0&&e<=5}return this.props.highPrecision}_updateVertices(e){if(this._shouldUseHighPrecision())return;const{resolution:t,edgeLengthKM:n,centerHex:r}=this.state;if(t<0)return;const i=this.props.centerHexagon||Hm(e.latitude,e.longitude,t);if(r===i)return;if(r)try{if(function(e,t){var n,r=Fm(e),i=r[0],s=r[1],o=Fm(t),a=o[0],A=o[1],l=Em._malloc(8);try{return Im(Mm.gridDistance(i,s,a,A,l)),n=l,Mm.readInt64AsDoubleFromPointer(n)}finally{Em._free(l)}}(r,i)*n<10)return}catch{}const{unitsPerMeter:s}=e.distanceScales;let o=Km(i);const[a,A]=$m(i),[l,c]=e.projectFlat([A,a]);o=o.map(t=>{const n=e.projectFlat(t);return[(n[0]-l)/s[0],(n[1]-c)/s[1]]}),this.setState({centerHex:i,vertices:o})}renderLayers(){return this._shouldUseHighPrecision()?this._renderPolygonLayer():this._renderColumnLayer()}_getForwardProps(){const{elevationScale:e,material:t,coverage:n,extruded:r,wireframe:i,stroked:s,filled:o,lineWidthUnits:a,lineWidthScale:A,lineWidthMinPixels:l,lineWidthMaxPixels:c,getFillColor:u,getElevation:h,getLineColor:d,getLineWidth:f,transitions:p,updateTriggers:g}=this.props;return{elevationScale:e,extruded:r,coverage:n,wireframe:i,stroked:s,filled:o,lineWidthUnits:a,lineWidthScale:A,lineWidthMinPixels:l,lineWidthMaxPixels:c,material:t,getElevation:h,getFillColor:u,getLineColor:d,getLineWidth:f,transitions:p,updateTriggers:{getFillColor:g.getFillColor,getElevation:g.getElevation,getLineColor:g.getLineColor,getLineWidth:g.getLineWidth}}}_renderPolygonLayer(){const{data:e,getHexagon:t,updateTriggers:n,coverage:r}=this.props,i=this.getSubLayerClass("hexagon-cell-hifi",xm),s=this._getForwardProps();return s.updateTriggers.getPolygon=function(e,t){let n;return n=null==e?t:"object"==typeof e?{...e,coverage:t}:{getHexagon:e,coverage:t},n}(n.getHexagon,r),new i(s,this.getSubLayerProps({id:"hexagon-cell-hifi",updateTriggers:s.updateTriggers}),{data:e,_normalize:!1,_windingOrder:"CCW",positionFormat:"XY",getPolygon:(e,n)=>function(e){const t=new Float64Array(2*e.length);let n=0;for(const r of e)t[n++]=r[0],t[n++]=r[1];return t}(Km(t(e,n),r))})}_renderColumnLayer(){const{data:e,getHexagon:t,updateTriggers:n}=this.props,r=this.getSubLayerClass("hexagon-cell",Vg),i=this._getForwardProps();return i.updateTriggers.getPosition=n.getHexagon,new r(i,this.getSubLayerProps({id:"hexagon-cell",flatShading:!0,updateTriggers:i.updateTriggers}),{data:e,diskResolution:6,radius:1,vertices:this.state.vertices,getPosition:qm.bind(null,t)})}}Jm.defaultProps=Zm,Jm.layerName="H3HexagonLayer",Jm._checkH3Lib=()=>{};const e_="mapbox",t_=Math.PI/180;function n_({map:e,gl:t,deck:n}){if(e.__deck)return e.__deck;const r=null==n?void 0:n.props._customRender,i=null==n?void 0:n.props.onLoad,s={...null==n?void 0:n.props,_customRender:()=>{e.triggerRepaint(),null==r||r("")}};let o;return s.parameters={...s_(e,!0),...s.parameters},s.views||(s.views=a_(e)),n&&n.props.gl!==t||(Object.assign(s,{gl:t,width:null,height:null,touchAction:"unset",viewState:A_(e)}),(null==n?void 0:n.isInitialized)?r_(n,e):s.onLoad=()=>{null==i||i(),r_(o,e)}),n?(o=n,n.setProps(s),n.userData.isExternal=!0):(o=new Jf(s),e.on("remove",()=>{i_(e)})),o.userData.mapboxLayers=new Set,e.__deck=o,e.on("render",()=>{o.isInitialized&&function(e,t){const{mapboxLayers:n,isExternal:r}=e.userData;if(r){const r=Array.from(n,e=>e.id),i=rh(e.props.layers,Boolean).some(e=>e&&!r.includes(e.id));let s=e.getViewports();const o=s.findIndex(e=>e.id===e_),a=s.length>1||o<0;(i||a)&&(o>=0&&(s=s.slice(),s[o]=l_(e,t)),e._drawLayers("mapbox-repaint",{viewports:s,layerFilter:t=>(!e.props.layerFilter||e.props.layerFilter(t))&&(t.viewport.id!==e_||!r.includes(t.layer.id)),clearCanvas:!1}))}e.userData.currentViewport=null}(o,e)}),o}function r_(e,t){const n=()=>{e.isInitialized?function(e,t){e.setProps({viewState:A_(t)}),e.needsRedraw({clearRedrawFlags:!0})}(e,t):t.off("move",n)};t.on("move",n)}function i_(e){var t;null==(t=e.__deck)||t.finalize(),e.__deck=null}function s_(e,t){const n=t?{depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:0,blend:!0,blendColorSrcFactor:"src-alpha",blendColorDstFactor:"one-minus-src-alpha",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one-minus-src-alpha",blendColorOperation:"add",blendAlphaOperation:"add"}:{};return"globe"===o_(e)&&(n.cullMode="back"),n}function o_(e){var t;const n=null==(t=e.getProjection)?void 0:t.call(e),r=(null==n?void 0:n.type)||(null==n?void 0:n.name);if("globe"===r)return"globe";if(r&&"mercator"!==r)throw new Error("Unsupported projection");return"mercator"}function a_(e){return"globe"===o_(e)?new _g({id:e_}):new Oh({id:e_})}function A_(e){var t;const{lng:n,lat:r}=e.getCenter(),i={longitude:(n+540)%360-180,latitude:r,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()};return(null==(t=e.getTerrain)?void 0:t.call(e))&&function(e,t){if(e.getFreeCameraOptions){const{position:n}=e.getFreeCameraOptions();if(!n||void 0===n.z)return;const r=e.transform.height,{longitude:i,latitude:s,pitch:o}=t,a=512*n.x,A=512*(1-n.y),l=512*n.z,c=fc([i,s]),u=a-c[0],h=A-c[1],d=Math.sqrt(u*u+h*h),f=o*t_,p=1.5*r,g=f<.001?p*Math.cos(f)/l:p*Math.sin(f)/d;t.zoom=Math.log2(g);const m=l-p*Math.cos(f)/g;t.position=[0,0,m/gc(s)]}else"number"==typeof e.transform.elevation&&(t.position=[0,0,e.transform.elevation])}(e,i),i}function l_(e,t,n){const r=A_(t),{views:i}=e.props,s=i&&rh(i).find(e=>e.id===e_)||a_(t);n&&(s.props.nearZMultiplier=.2);const o=(null==n?void 0:n.nearZ)??t.transform._nearZ,a=(null==n?void 0:n.farZ)??t.transform._farZ;return Number.isFinite(o)&&(r.nearZ=o/t.transform.height,r.farZ=a/t.transform.height),s.makeViewport({width:e.width,height:e.height,viewState:r})}function c_(e){if(e.userData.isExternal)return;const t=[];e.userData.mapboxLayers.forEach(e=>{const n=new(0,e.props.type)(e.props);t.push(n)}),e.setProps({layers:t})}class u_{constructor(e){if(!e.id)throw new Error("Layer must have an unique id");this.id=e.id,this.type="custom",this.renderingMode=e.renderingMode||"3d",this.slot=e.slot,this.map=null,this.deck=null,this.props=e}onAdd(e,t){var n;this.map=e,this.deck=n_({map:e,gl:t,deck:this.props.deck}),(n=this.deck).userData.mapboxLayers.add(this),c_(n)}onRemove(){var e;this.deck&&((e=this.deck).userData.mapboxLayers.delete(this),c_(e))}setProps(e){Object.assign(this.props,e,{id:this.id}),this.deck&&c_(this.deck)}render(e,t){!function(e,t,n,r){let{currentViewport:i}=e.userData,s=!1;i||(i=l_(e,t,r),e.userData.currentViewport=i,s=!0),e.isInitialized&&e._drawLayers("mapbox-repaint",{viewports:[i],layerFilter:t=>(!e.props.layerFilter||e.props.layerFilter(t))&&(n.id===t.layer.id||t.layer.props.operation.includes("terrain")),clearStack:s,clearCanvas:!1})}(this.deck,this.map,this,t)}}const h_="__UNDEFINED__";function d_(e,t,n,r){if(!(e&&t&&e.style&&e.style._loaded))return;const i=rh(r,Boolean);if(n!==r){const t=rh(n,Boolean),r=new Set(t.map(e=>e.id));for(const e of i)r.delete(e.id);for(const n of r)e.getLayer(n)&&e.removeLayer(n)}for(const a of i){const n=e.getLayer(a.id);n?(n.implementation||n).setProps(a.props):e.addLayer(new u_({id:a.id,deck:t,slot:a.props.slot}),a.props.beforeId)}const s=e.style._order,o={};for(const a of i){let{beforeId:e}=a.props;e&&s.includes(e)||(e=h_),o[e]=o[e]||[],o[e].push(a.id)}for(const a in o){const t=o[a];let n=a===h_?s.length:s.indexOf(a),r=a===h_?void 0:a;for(let i=t.length-1;i>=0;i--){const o=t[i],a=s.indexOf(o);a!==n-1&&(e.moveLayer(o,r),a>n&&n++),n--,r=o}}}class f_{constructor(e){this._handleStyleChange=()=>{var e;d_(this._map,this._deck,this._props.layers,this._props.layers),this._map&&o_(this._map)&&!this._props.views&&(null==(e=this._deck)||e.setProps({views:a_(this._map)}))},this._updateContainerSize=()=>{if(this._map&&this._container){const{clientWidth:e,clientHeight:t}=this._map.getContainer();Object.assign(this._container.style,{width:`${e}px`,height:`${t}px`})}},this._updateViewState=()=>{const e=this._deck,t=this._map;e&&t&&(e.setProps({views:this._props.views||a_(t),viewState:A_(t)}),e.isInitialized&&e.redraw())},this._handleMouseEvent=e=>{const t=this._deck;if(!t||!t.isInitialized)return;const n={type:e.type,offsetCenter:e.point,srcEvent:e},r=this._lastMouseDownPoint;switch(!e.point&&r&&(n.deltaX=e.originalEvent.clientX-r.clientX,n.deltaY=e.originalEvent.clientY-r.clientY,n.offsetCenter={x:r.x+n.deltaX,y:r.y+n.deltaY}),n.type){case"mousedown":t._onPointerDown(n),this._lastMouseDownPoint={...e.point,clientX:e.originalEvent.clientX,clientY:e.originalEvent.clientY};break;case"dragstart":n.type="panstart",t._onEvent(n);break;case"drag":n.type="panmove",t._onEvent(n);break;case"dragend":n.type="panend",t._onEvent(n);break;case"click":n.tapCount=1,t._onEvent(n);break;case"dblclick":n.type="click",n.tapCount=2,t._onEvent(n);break;case"mousemove":n.type="pointermove",t._onPointerMove(n);break;case"mouseout":n.type="pointerleave",t._onPointerMove(n);break;default:return}};const{interleaved:t=!1}=e;this._interleaved=t,this._props=this.filterProps(e)}filterProps(e){const{interleaved:t=!1,useDevicePixels:n,...r}=e;return t||void 0===n||(r.useDevicePixels=n),r}setProps(e){this._interleaved&&e.layers&&d_(this._map,this._deck,this._props.layers,e.layers),Object.assign(this._props,this.filterProps(e)),this._deck&&this._map&&this._deck.setProps({...this._props,parameters:{...s_(this._map,this._interleaved),...this._props.parameters}})}onAdd(e){return this._map=e,this._interleaved?this._onAddInterleaved(e):this._onAddOverlaid(e)}_onAddOverlaid(e){const t=document.createElement("div");return Object.assign(t.style,{position:"absolute",left:0,top:0,textAlign:"initial",pointerEvents:"none"}),this._container=t,this._deck=new Jf({...this._props,parent:t,parameters:{...s_(e,!1),...this._props.parameters},views:this._props.views||a_(e),viewState:A_(e)}),e.on("resize",this._updateContainerSize),e.on("render",this._updateViewState),e.on("mousedown",this._handleMouseEvent),e.on("dragstart",this._handleMouseEvent),e.on("drag",this._handleMouseEvent),e.on("dragend",this._handleMouseEvent),e.on("mousemove",this._handleMouseEvent),e.on("mouseout",this._handleMouseEvent),e.on("click",this._handleMouseEvent),e.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),t}_onAddInterleaved(e){const t=e.painter.context.gl;return t instanceof WebGLRenderingContext&&Gn.warn("Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility")(),this._deck=n_({map:e,gl:t,deck:new Jf({...this._props,gl:t,parameters:{...s_(e,!0),...this._props.parameters}})}),e.on("styledata",this._handleStyleChange),d_(e,this._deck,[],this._props.layers),document.createElement("div")}onRemove(){const e=this._map;e&&(this._interleaved?this._onRemoveInterleaved(e):this._onRemoveOverlaid(e)),this._deck=void 0,this._map=void 0,this._container=void 0}_onRemoveOverlaid(e){var t;e.off("resize",this._updateContainerSize),e.off("render",this._updateViewState),e.off("mousedown",this._handleMouseEvent),e.off("dragstart",this._handleMouseEvent),e.off("drag",this._handleMouseEvent),e.off("dragend",this._handleMouseEvent),e.off("mousemove",this._handleMouseEvent),e.off("mouseout",this._handleMouseEvent),e.off("click",this._handleMouseEvent),e.off("dblclick",this._handleMouseEvent),null==(t=this._deck)||t.finalize()}_onRemoveInterleaved(e){e.off("styledata",this._handleStyleChange),d_(e,this._deck,this._props.layers,[]),i_(e)}getDefaultPosition(){return"top-left"}pickObject(e){return bh(this._deck),this._deck.pickObject(e)}pickMultipleObjects(e){return bh(this._deck),this._deck.pickMultipleObjects(e)}pickObjects(e){return bh(this._deck),this._deck.pickObjects(e)}finalize(){this._map&&this._map.removeControl(this)}getCanvas(){return this._map?this._interleaved?this._map.getCanvas():this._deck.getCanvas():null}}const p_=f.createContext(null);function g_({children:e}){const{current:t}=_(),n=f.useRef(null),r=f.useRef(new Map),[i,o]=f.useState(!1);f.useEffect(()=>{const e=null==t?void 0:t.getMap();if(e)return n.current||(n.current=new f_({interleaved:!0,useDevicePixels:!0,layers:[]}),e.addControl(n.current),o(!0)),()=>{if(n.current&&e){try{e.removeControl(n.current)}catch{}n.current=null,o(!1)}}},[t]);const a=f.useCallback(()=>{if(!n.current)return;const e=[],t=Array.from(r.current.keys()).sort();for(const n of t){const t=r.current.get(n);t&&t.length>0&&e.push(...t)}n.current.setProps({layers:e})},[]),A=f.useCallback((e,t)=>{0===t.length?r.current.delete(e):r.current.set(e,t),a()},[a]);return s.jsx(p_.Provider,{value:{setLayers:A,isReady:i},children:e})}function m_(){const e=f.useContext(p_);if(!e)throw new Error("useDeckOverlay must be used within a DeckOverlayProvider");return e}const __=[[28,34,39,80],[31,39,48,90],[34,45,56,100],[36,53,67,110],[39,62,78,115],[42,70,90,120],[45,81,101,125],[48,92,112,130],[50,104,123,135],[53,115,134,140],[56,126,143,145],[62,137,151,150],[70,148,157,155],[81,160,162,160],[92,171,168,165],[106,182,174,170],[120,193,179,175],[137,204,185,180],[154,216,190,185],[174,227,196,190],[193,238,202,195],[216,249,210,200],[238,255,221,205],[255,255,235,210]];function b_({coveragePoints:e,visible:t,opacity:n=.7}){const{setLayers:r,isReady:i}=m_(),{h3Cells:o,minQuality:a,maxQuality:A}=f.useMemo(()=>{if(!e||!Array.isArray(e)||0===e.length)return{h3Cells:[],minQuality:0,maxQuality:0};const t=function(e){const t=new Map;for(const r of e){if("number"!=typeof r.lat||"number"!=typeof r.lon||isNaN(r.lat)||isNaN(r.lon))continue;const e=Hm(r.lat,r.lon,8),n=t.get(e),i=r.weight;n?(n.count++,n.qualitySum+=i):t.set(e,{count:1,qualitySum:i})}const n=[];for(const[r,i]of t.entries())n.push({hexId:r,count:i.count,avgQuality:i.qualitySum/i.count});return n}(e),n=t.map(e=>e.avgQuality);return{h3Cells:t,minQuality:Math.min(...n),maxQuality:Math.max(...n)}},[e]);return f.useEffect(()=>{if(!i)return;if(!t||0===o.length)return void r("wardriving",[]);const e=new Jm({id:"wardriving-coverage",data:o,getHexagon:e=>e.hexId,getFillColor:e=>function(e,t,n){const r=n-t;if(r<.001)return __[12];const i=(o=Math.max(0,Math.min(1,(e-t)/r)))<.15?o/.15*.1:o>.85?.9+(o-.85)/.15*.1:.1+(o-.15)/.7*.8,s=Math.min(23,Math.floor(24*i));var o;return __[s]}(e.avgQuality,a,A),opacity:n,filled:!0,stroked:!1,pickable:!1,extruded:!1});return r("wardriving",[e]),()=>{r("wardriving",[])}},[o,a,A,t,n,i,r]),o.length>0&&t?s.jsx("div",{"data-testid":"wardriving-hexlayer-active","data-point-count":(null==e?void 0:e.length)||0,"data-cell-count":o.length,"data-is-ready":i,style:{display:"none"}}):null}function v_(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}function y_(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}var w_,x_={},E_={};var T_,S_,C_={};var k_,R_,P_=(S_||(S_=1,k_=function(){if(w_)return E_;w_=1;var e=m();function t(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n