@pyscript/core 0.7.12 → 0.7.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/{codemirror-WbVPJuAs.js → codemirror-lkW_eC9r.js} +2 -2
  2. package/dist/{codemirror-WbVPJuAs.js.map → codemirror-lkW_eC9r.js.map} +1 -1
  3. package/dist/{codemirror_commands-BRu2f-2p.js → codemirror_commands-DL2aL4qa.js} +2 -2
  4. package/dist/{codemirror_commands-BRu2f-2p.js.map → codemirror_commands-DL2aL4qa.js.map} +1 -1
  5. package/dist/{codemirror_lang-python-q-wuh0nL.js → codemirror_lang-python-DD5EtV36.js} +2 -2
  6. package/dist/{codemirror_lang-python-q-wuh0nL.js.map → codemirror_lang-python-DD5EtV36.js.map} +1 -1
  7. package/dist/{codemirror_language-DqPeLcFN.js → codemirror_language-DRHeqAwG.js} +2 -2
  8. package/dist/{codemirror_language-DqPeLcFN.js.map → codemirror_language-DRHeqAwG.js.map} +1 -1
  9. package/dist/codemirror_state-BNbbkoNK.js +2 -0
  10. package/dist/codemirror_state-BNbbkoNK.js.map +1 -0
  11. package/dist/codemirror_view-FN7LalDk.js +2 -0
  12. package/dist/codemirror_view-FN7LalDk.js.map +1 -0
  13. package/dist/core-B4BRXuDy.js +4 -0
  14. package/dist/core-B4BRXuDy.js.map +1 -0
  15. package/dist/core.js +1 -1
  16. package/dist/{deprecations-manager-HQLYNCYn.js → deprecations-manager-BRHTwqUZ.js} +2 -2
  17. package/dist/{deprecations-manager-HQLYNCYn.js.map → deprecations-manager-BRHTwqUZ.js.map} +1 -1
  18. package/dist/{donkey-B3F8VdSV.js → donkey-CBEqGHeD.js} +2 -2
  19. package/dist/{donkey-B3F8VdSV.js.map → donkey-CBEqGHeD.js.map} +1 -1
  20. package/dist/{error-DS_5_C5_.js → error-DRVc1NKK.js} +2 -2
  21. package/dist/{error-DS_5_C5_.js.map → error-DRVc1NKK.js.map} +1 -1
  22. package/dist/{index-DaYI1YXo.js → index-C-U2wRvV.js} +2 -2
  23. package/dist/{index-DaYI1YXo.js.map → index-C-U2wRvV.js.map} +1 -1
  24. package/dist/{mpy-Bo2uW6nt.js → mpy-B-jI5Qug.js} +2 -2
  25. package/dist/{mpy-Bo2uW6nt.js.map → mpy-B-jI5Qug.js.map} +1 -1
  26. package/dist/{py-BEf8j7L5.js → py-DNLpCVR2.js} +2 -2
  27. package/dist/{py-BEf8j7L5.js.map → py-DNLpCVR2.js.map} +1 -1
  28. package/dist/{py-editor-C0XF2rwE.js → py-editor-DCtATRBs.js} +2 -2
  29. package/dist/{py-editor-C0XF2rwE.js.map → py-editor-DCtATRBs.js.map} +1 -1
  30. package/dist/{py-game-eWNz96mt.js → py-game-BGWt8dH1.js} +2 -2
  31. package/dist/{py-game-eWNz96mt.js.map → py-game-BGWt8dH1.js.map} +1 -1
  32. package/dist/{py-terminal-VtavPj1S.js → py-terminal-BKvzGq7q.js} +2 -2
  33. package/dist/{py-terminal-VtavPj1S.js.map → py-terminal-BKvzGq7q.js.map} +1 -1
  34. package/package.json +6 -6
  35. package/dist/codemirror_state-DWQh5Ruf.js +0 -2
  36. package/dist/codemirror_state-DWQh5Ruf.js.map +0 -1
  37. package/dist/codemirror_view-CMXZSWgf.js +0 -2
  38. package/dist/codemirror_view-CMXZSWgf.js.map +0 -1
  39. package/dist/core-DmpFMpAn.js +0 -4
  40. package/dist/core-DmpFMpAn.js.map +0 -1
@@ -1,4 +0,0 @@
1
- try{crypto.randomUUID()}catch(e){location.href.startsWith("http://0.0.0.0")&&(location.href=location.href.replace("0.0.0.0","localhost"))}const e=(e,t,n=globalThis)=>{const r=Symbol.for(e),s=r in n;return[s?n[r]:Object.defineProperty(n,r,{value:t})[r],s]};var t=Promise.withResolvers.bind(Promise);const n=new WeakMap,r=e=>{const t=e||console,r={buffered:o,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return n.set(t,r),t}}},s=new TextDecoder,o=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const o of r)o===t?e(s.decode(new Uint8Array(n.splice(0)))):n.push(o);else e(r)}},a=Object.getOwnPropertyDescriptors(Response.prototype),i=e=>"function"==typeof e,l={get:(e,t)=>a.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!i(r)?e.then(e=>e[t]):(...n)=>e.then(e=>e[t](...n)))(e,t,a[t]):((e,t)=>i(t)?t.bind(e):t)(e,e[t])};var c=(e,...t)=>new Proxy(fetch(e,...t).then(t=>t.ok?t:Promise.reject(new Error(`[${t.status}] Unable to fetch ${e}`))),l);const{assign:p}=Object,u="entries",d="readonly",f="readwrite",m={durability:"default",prefix:"IDBMap"},_=({target:{result:e}})=>e;class y extends EventTarget{#e;#t;#n;async#r(e,t){const n=(await this.#e).transaction(u,t,this.#t);return new Promise((t,r)=>p(e(n.objectStore(u)),{onsuccess:t,onerror:r}))}constructor(e,{durability:t=m.durability,prefix:n=m.prefix}=m){super(),this.#n=n,this.#t={durability:t},this.#e=new Promise((t,n)=>{p(indexedDB.open(`${this.#n}/${e}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(u),n.oncomplete=()=>t(e)},onsuccess(e){t(_(e))},onerror(e){n(e),this.dispatchEvent(e)}})}).then(e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e})}dispatchEvent(e){const{type:t,message:n,isTrusted:r}=e;return super.dispatchEvent(r?p(new Event(t),{message:n}):e)}async close(){(await this.#e).close()}get size(){return this.#r(e=>e.count(),d).then(_)}async clear(){await this.#r(e=>e.clear(),f)}async delete(e){await this.#r(t=>t.delete(e),f)}async entries(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e).then(t=>[e,t])))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r(t=>t.get(e),d).then(_)}async has(e){return void 0!==await this.#r(t=>t.getKey(e),d).then(_)}async keys(){return await this.#r(e=>e.getAllKeys(),d).then(_)}async set(e,t){return await this.#r(n=>n.put(t,e),f),this}async values(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e)))}get[Symbol.toStringTag](){return this.#n}}class h extends Map{#s;#o;constructor(...e){super(),this.#s=new y(...e),this.#o=this.#s.entries().then(e=>{for(const[t,n]of e)super.set(t,n)})}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then(()=>this.#s.clear()),super.clear()}delete(e){return this.#o=this.#o.then(()=>this.#s.delete(e)),super.delete(e)}set(e,t){return this.#o=this.#o.then(()=>this.#s.set(e,t)),super.set(e,t)}}const g={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n<r;n++)t+=arguments[n]+e[n];return t}(...e))},string(e){for(const t of e.split(/[\r\n]+/))if(t.trim().length){/^(\s+)/.test(t)&&(e=e.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return e}},{replace:w}="",A=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g,b={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"'},v=e=>b[e],k=(e,...t)=>g[typeof e](e,...t),E=e=>w.call(e,A,v),{isArray:j}=Array,{assign:B,create:x,defineProperties:S,defineProperty:R,entries:C}=Object,{all:$,resolve:D}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),T=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function P(e){return e.startsWith(".")?T(e,this):e}let F=0;const M=(e,t)=>({id:e.id||(e.id=`${t}-w${F++}`),tag:e.tagName}),O=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},L=(e,t,r,s)=>({type:t,config:r,interpreter:s,io:n.get(s),run:(t,...n)=>e.run(s,t,...n),runAsync:(t,...n)=>e.runAsync(s,t,...n),runEvent:(...t)=>e.runEvent(s,...t)}),N=e=>e.replace(/^(?:\n|\r\n)/,""),I=(e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,N(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,N(t),...o);return r&&await s(e,r,...o),a}},W=Symbol.for("polyscript.js_modules"),H=new Map;R(globalThis,W,{value:H});const U=new Proxy(H,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]}),z=(e,t)=>!t.startsWith("_"),q=(e,t)=>new Proxy(e,{has:z,get:(e,n)=>e[t][n]}),J=(e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,q(r,e));t.registerJSModule(n,s,r)},G=(e,t)=>import(e).then(e=>{H.set(t,{...e})}),K=e=>new Promise((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(B(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))}),V=e=>/\.css$/i.test(new URL(e).pathname),X=e=>/^(?:false|0|no)$/i.test(e.getAttribute("async")),Y=!globalThis.window,Z=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):ee(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Q=e=>{const t=e.split("/");return t.pop(),t.join("/")},ee=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},te=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\/+/,"/")},ne=e=>{const t=e.map(e=>e.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(e=>""!==e&&"."!==e).join("/");return e[0].startsWith("/")?`/${t}`:t},re=(e,t)=>c(T(e,t)).arrayBuffer(),se=(e,t,n,r)=>$((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${r}, please supply 'to_file' parameter.`)}return e.flatMap(({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(j(r))return r.map(n=>({url:ne([e,n]),path:ne([t,n])}));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:ne([t,s])}]})})(n).map(({url:n,path:s})=>re(n,r).then(n=>e.writeFile(t,s,n)))),oe=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,ae=(e,t)=>e.replace(/\{.+?\}/g,e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)}),ie=(e,t,n,r)=>$((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of C(e))if(/^\{.+\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,ae(o,t))}else{const e=ae(s,t),a=oe(e,ae(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map(({url:n,path:s})=>re(n,r).then(r=>e.writeFile(t,s,r,n)))),le=({main:e,worker:t},n)=>{const r=[];if(t&&Y)for(let[e,s]of C(t))e=T(e,n),r.push(G(e,s));if(e&&!Y)for(let[t,s]of C(e))t=T(t,n),V(t)?K(t):r.push(G(t,s));return $(r)},ce=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))};let pe=0;const ue=pe++,de=pe++,fe=pe++,me=pe++,_e=pe++,ye=pe++,he=pe++,ge=pe++,we=pe++,Ae=pe++,be=pe++,ve=pe++,ke=pe++,Ee=pe++,je=pe++,Be=pe++,xe=pe++,Se=pe++,Re=pe++,Ce=pe++,$e=pe++,De=pe++,Te=pe++,Pe=pe++,Fe=pe++,Me=pe++,Oe=pe++,Le=pe++;const Ne=globalThis.ImageData||class{},Ie=new TextDecoder,We=new TextEncoder,He=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),Ue=e=>{switch(e[0]){case"@":return Symbol[e.slice(1)];case"#":return Symbol.for(e.slice(1));case"!":return Symbol(e.slice(1));default:return Symbol()}},ze=e=>He.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),qe=Object.defineProperty,Je=Object.assign,Ge=Array.from,Ke=Array.isArray,Ve=ArrayBuffer.isView,Xe=(e,t)=>[e,t],Ye=e=>e,Ze={},Qe=e=>(t,n=new Map)=>{for(let r=0,s=t.length;r<s;r++)t[r]=e(t[r],n);return t},et=([e,t])=>0===e?t:Ue(t),tt=e=>"string"==typeof e?Xe(0,e):Xe(16,ze(e)),nt=(e,t)=>{for(let n=e.push,r=0,s=t.length;r<s;r+=32767)n.apply(e,t.subarray(r,r+32767))},rt=new ArrayBuffer(8),st=new DataView(rt),ot=new Uint8Array(rt),at=(e,t,n)=>(e.set(t,n),n),it=e=>{ot[0]=e[pt++],ot[1]=e[pt++],ot[2]=e[pt++],ot[3]=e[pt++],ot[4]=e[pt++],ot[5]=e[pt++],ot[6]=e[pt++],ot[7]=e[pt++]},lt=e=>(ot[0]=e[pt++],ot[1]=e[pt++],ot[2]=e[pt++],ot[3]=e[pt++],st.getUint32(0,!0)),ct=(e,t)=>{switch(e[pt++]){case _e:return it(e),st.getFloat64(0,!0);case ye:return e[pt++];case $e:{const n=at(t,pt-1,{});for(let r=0,s=lt(e);r<s;r++)n[ct(e,t)]=ct(e,t);return n}case Be:{const n=at(t,pt-1,[]);for(let r=0,s=lt(e);r<s;r++)n.push(ct(e,t));return n}case Pe:{const n=pt-1,r=ct(e,t);return at(t,n,new globalThis[r](ct(e,t)))}case xe:{const n=pt-1,r=lt(e);return at(t,n,e.slice(pt,pt+=r).buffer)}case Ee:{const n=pt-1,r=lt(e);return at(t,n,Ie.decode(e.slice(pt,pt+=r)))}case Se:return at(t,pt-1,new Date(ct(e,t)));case Ce:{const n=at(t,pt-1,new Map);for(let r=0,s=lt(e);r<s;r++)n.set(ct(e,t),ct(e,t));return n}case Te:{const n=at(t,pt-1,new Set);for(let r=0,s=lt(e);r<s;r++)n.add(ct(e,t));return n}case Re:{const n=ct(e,t),r=ct(e,t),s=ct(e,t),o=new(globalThis[n]||Error)(r);return at(t,pt-1,qe(o,"stack",{value:s}))}case Fe:{const n=ct(e,t),r=ct(e,t),s=ct(e,t),o=ct(e,t),a=ct(e,t);return at(t,pt-1,new Ne(n,r,s,{colorSpace:o,pixelFormat:a}))}case De:{const n=ct(e,t),r=ct(e,t);return at(t,pt-1,new RegExp(n,r))}case ue:return!1;case de:return!0;case he:return NaN;case ge:return 1/0;case we:return-1/0;case Ae:return 0;case be:return-0;case me:return null;case ve:return it(e),st.getBigInt64(0,!0);case ke:return it(e),st.getBigUint64(0,!0);case je:return Ue(ct(e,t));case Le:return t.get(lt(e));case Me:{const n=ct(e,t),r=ct(e,t);return at(t,pt-1,new Blob([e.slice(pt,pt+=r)],{type:n}))}case Oe:{const n=pt-1,r=ct(e,t),s=ct(e,t),o=ct(e,t);return at(t,n,new File([o],r,{type:o.type,lastModified:s}))}default:return}};let pt=0;class ut{static push(e,t){e.sync(!1),e._(t,t.length)}constructor(e,t){const n=[];this.l=0,this.o=n,this.v=new Uint8Array(e,t),this.push=n.push.bind(n)}get length(){return this.l+this.o.length}sync(e){const t=this.o,n=t.length;n&&this._(e?t:t.splice(0),n)}_(e,t){const{buffer:n,byteOffset:r}=this.v,s=this.l;this.l+=t,t+=r+s,n.byteLength<t&&n.grow(t),this.v.set(e,s)}}const{getPrototypeOf:dt}=Object,{construct:ft}=Reflect,{toStringTag:mt}=Symbol,{toString:_t}=Ze,yt=(e,t=e[mt])=>t in globalThis?t:yt(ft(dt(e.constructor),[0])),{isNaN:ht,isFinite:gt,isInteger:wt}=Number,{ownKeys:At}=Reflect,{is:bt}=Object,vt=(e,t,n)=>{const r=n.get(e),s=!r;return s?(st.setUint32(0,t.length,!0),n.set(e,[ot[0],ot[1],ot[2],ot[3]])):t.push(Le,r[0],r[1],r[2],r[3]),s},kt=(e,t,n)=>{st.setUint32(0,n,!0),e.push(t,ot[0],ot[1],ot[2],ot[3])},Et=(e,t,n)=>{switch(typeof e){case"number":e&&gt(e)?wt(e)&&e<256&&-1<e?t.push(ye,e):(st.setFloat64(0,e,!0),t.push(_e,ot[0],ot[1],ot[2],ot[3],ot[4],ot[5],ot[6],ot[7])):ht(e)?t.push(he):e?t.push(e<0?we:ge):t.push(bt(e,0)?Ae:be);break;case"object":switch(!0){case null===e:t.push(me);break;case!vt(e,t,n):break;case Ke(e):{const r=e.length;kt(t,Be,r);for(let s=0;s<r;s++)Et(e[s],t,n);break}case Ve(e):if(t.push(Pe),Et(yt(e),t,n),e=e.buffer,!vt(e,t,n))break;case e instanceof ArrayBuffer:{const n=new Uint8Array(e);kt(t,xe,n.length),Bt(t,n);break}case e instanceof Date:t.push(Se),Et(e.getTime(),t,n);break;case e instanceof Map:kt(t,Ce,e.size);for(const[r,s]of e)Et(r,t,n),Et(s,t,n);break;case e instanceof Set:kt(t,Te,e.size);for(const r of e)Et(r,t,n);break;case e instanceof Error:t.push(Re),Et(e.name,t,n),Et(e.message,t,n),Et(e.stack,t,n);break;case e instanceof Ne:t.push(Fe),Et(e.data,t,n),Et(e.width,t,n),Et(e.height,t,n),Et(e.colorSpace,t,n),Et(e.pixelFormat,t,n);break;case e instanceof RegExp:t.push(De),Et(e.source,t,n),Et(e.flags,t,n);break;case e instanceof File:t.push(Oe),Et(e.name,t,n),Et(e.lastModified,t,n);case e instanceof Blob:{const r=e.size;t.push(Me),Et(e.type,t,n),Et(r,t,n);const s=t.length;Bt(t,new Uint8Array(r)),jt.push(e.arrayBuffer().then(e=>[s,e]));break}default:if("toJSON"in e){const r=e.toJSON();Et(r===e?null:r,t,n)}else{const r=At(e),s=r.length;kt(t,$e,s);for(let o=0;o<s;o++){const s=r[o];Et(s,t,n),Et(e[s],t,n)}}}break;case"string":if(vt(e,t,n)){const n=We.encode(e);kt(t,Ee,n.length),Bt(t,n)}break;case"boolean":t.push(e?de:ue);break;case"symbol":t.push(je),Et(ze(e),t,n);break;case"bigint":{let n=ve;9223372036854775807n<e?(st.setBigUint64(0,e,!0),n=ke):st.setBigInt64(0,e,!0),t.push(n,ot[0],ot[1],ot[2],ot[3],ot[4],ot[5],ot[6],ot[7]);break}default:t.push(fe)}},jt=[];let Bt=nt;const xt=({byteOffset:e=0,Array:t=ut}={})=>(n,r)=>{const s=new t(r,e);Bt=t.push,Et(n,s,new Map);const o=s.length;return s.sync(!0),jt.length?Promise.all(jt.splice(0)).then(t=>{const n=new Uint8Array(r,e);for(const[e,r]of t)n.set(new Uint8Array(r),e);return o}):o},St={parse:e=>(pt=0,ct(e,new Map)),stringify:e=>{const t=[];return Bt=nt,Et(e,t,new Map),t}},Rt=new WeakMap,Ct=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await ie(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await se(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await le(r.js_modules,s),t("Loaded JS modules"))},$t=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await Rt.get(e)(t),t.map(t=>e.pyimport(t))),n.storage=async e=>{const t=new h(e);return await t.sync(),t},n.JSON=St),e.registerJsModule(t,n)},Dt=(e,t)=>{if(e.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},Tt=(e,t,...r)=>{try{return e.runPython(k(t),...r)}catch(t){n.get(e).stderr(t)}},Pt=async(e,t,...r)=>{try{return await e.runPythonAsync(k(t),...r)}catch(t){n.get(e).stderr(t)}},Ft=async(e,t,r)=>{const[s,...o]=t.split(".");let a,i=e.globals.get(s);for(const e of o)[a,i]=[i,i[e]];try{await i.call(a,r)}catch(t){n.get(e).stderr(t)}},Mt=new Map,Ot=e=>Mt.get(e),Lt=(e,t)=>{try{return Function("require",t)(Ot)}catch(t){n.get(e).stderr(t)}};var Nt={type:"dummy",module:()=>"data:text/javascript,",engine:e=>r().get(e),registerJSModule(e,t,n){Mt.set(t,n)},run:Lt,runAsync:Lt,runEvent:async(e,t,r)=>{try{await Function("require","e",`return ${t}(e)`)(Ot,r)}catch(t){n.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}},It=(new TextEncoder).encode("_F='github:'\n_E='user-agent'\n_D=True\n_C=False\n_B='/'\n_A=None\nfrom uio import StringIO\nimport sys\nclass Response:\n\tdef __init__(A,f):A.raw=f;A.encoding='utf-8';A._cached=_A\n\tdef close(A):\n\t\tif A.raw:A.raw.close();A.raw=_A\n\t\tA._cached=_A\n\t@property\n\tdef content(self):\n\t\tA=self\n\t\tif A._cached is _A:\n\t\t\ttry:A._cached=A.raw.read()\n\t\t\tfinally:A.raw.close();A.raw=_A\n\t\treturn A._cached\n\t@property\n\tdef text(self):return str(self.content,self.encoding)\n\tdef json(A):import ujson;return ujson.loads(A.content)\nHEADERS_TO_IGNORE=_E,\ntry:import js\nexcept Exception as err:raise OSError('This version of urequests can only be used in the browser')\nHEADERS_TO_IGNORE=_E,\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\n\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\n\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\n\telse:A.open(D,url,_C)\n\tfor(F,J)in headers.items():\n\t\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\n\tif E:A.timeout=int(E*1000)\n\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader('Content-Type','application/json')\n\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\ndef get(url,**A):return request('GET',url,**A)\n_PACKAGE_INDEX=const('https://micropython.org/pi/v2')\n_CHUNK_SIZE=128\ndef _ensure_path_exists(path):\n\timport os;A=path.split(_B)\n\tif not A[0]:A.pop(0);A[0]=_B+A[0]\n\tB=''\n\tfor C in range(len(A)-1):\n\t\tB+=A[C]\n\t\ttry:os.stat(B)\n\t\texcept:os.mkdir(B)\n\t\tB+=_B\ndef _chunk(src,dest):\n\tA=memoryview(bytearray(_CHUNK_SIZE))\n\twhile _D:\n\t\tB=src.readinto(A)\n\t\tif B==0:break\n\t\tdest(A if B==_CHUNK_SIZE else A[:B])\ndef _check_exists(path,short_hash):\n\tA=short_hash;import os\n\ttry:\n\t\timport binascii as C,hashlib as D\n\t\twith open(path,'rb')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],'utf-8');return F==A\n\texcept:return _C\ndef _rewrite_url(url,branch=_A):\n\tB=branch;A=url\n\tif not B:B='HEAD'\n\tif A.startswith(_F):A=A[7:].split(_B);A='https://raw.githubusercontent.com/'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\n\treturn A\ndef _download_file(url,dest):\n\tB=dest;A=get(url)\n\ttry:\n\t\tif A.status_code!=200:print('Error',A.status_code,'requesting',url);return _C\n\t\tprint('Copying:',B);_ensure_path_exists(B)\n\t\twith open(B,'wb')as C:_chunk(A.raw,C.write)\n\t\treturn _D\n\tfinally:A.close()\ndef _install_json(package_json_url,index,target,version,mpy):\n\tK='File not found: {} {}';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\n\ttry:\n\t\tif E.status_code!=200:print('Package not found:',G);return _C\n\t\tF=E.json()\n\tfinally:E.close()\n\tfor(A,C)in F.get('hashes',()):\n\t\tB=D+_B+A\n\t\tif _check_exists(B,C):print('Exists:',B)\n\t\telse:\n\t\t\tL='{}/file/{}/{}'.format(H,C[:2],C)\n\t\t\tif not _download_file(L,B):print(K.format(A,C));return _C\n\tfor(A,J)in F.get('urls',()):\n\t\tB=D+_B+A\n\t\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\n\tfor(M,N)in F.get('deps',()):\n\t\tif not _install_package(M,H,D,N,mpy):return _C\n\treturn _D\ndef _install_package(package,index,target,version,mpy):\n\tD=index;C=target;B=version;A=package\n\tif A.startswith('http://')or A.startswith('https://')or A.startswith(_F):\n\t\tif A.endswith('.py')or A.endswith('.mpy'):print('Downloading {} to {}'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\n\t\telse:\n\t\t\tif not A.endswith('.json'):\n\t\t\t\tif not A.endswith(_B):A+=_B\n\t\t\t\tA+='package.json'\n\t\t\tprint('Installing {} to {}'.format(A,C))\n\telse:\n\t\tif not B:B='latest'\n\t\tprint('Installing {} ({}) from {} to {}'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,'_mpy')else'py';A='{}/package/{}/{}/{}.json'.format(D,'py',A,B)\n\treturn _install_json(A,D,C,B,mpy)\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\n\tB=target;A=index\n\tif not B:\n\t\tfor C in sys.path:\n\t\t\tif C.endswith('/lib'):B=C;break\n\t\telse:print('Unable to find lib dir in sys.path');return\n\tif not A:A=_PACKAGE_INDEX\n\tif _install_package(package,A.rstrip(_B),B,version,mpy):print('Done')\n\telse:print('Package may be partially installed')");const Wt=async e=>(await import("./toml-BK2RWy-G.js")).parse(e);async function Ht(e,t){return new Promise((n,r)=>{e.syncfs(t,e=>{e?r(e):n()})})}function Ut(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await zt(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach(function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)}),i.sort();const l=[];if(Object.keys(o.entries).forEach(function(e){n.entries[e]||(l.push(e),a++)}),l.sort().reverse(),!a)return;const c="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=c.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(c,n,e)}}for(const t of l)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(c,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):ee(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path '${e}' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path '${e}' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory '${e}' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await Ht(t,!0),{syncfs:async()=>await Ht(t,!1)}}}const zt=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},{parse:qt}=JSON,Jt=(e,t)=>new URL(e,t).href,Gt=(e,t,n)=>{if(t in e)throw new Error(`Duplicated path: ${t}`);e[t]=n},Kt=(e,t,n)=>{for(const r in t)Gt(e,Jt(r,n),t[r])},Vt=(e,t,n,r)=>{const s=t[n];s&&(e[n]??={},Kt(e[n],s,r))},Xt=async(e,t=e.packages,n=new Set)=>{const r=[];for(const s of t){if(n.has(s))continue;n.add(s);const t=s.endsWith(".toml");if(t||s.endsWith(".json")){const o=await c(s).text(),{name:a,files:i,js_modules:l,packages:p}=t?await Wt(o):qt(o);if(n.has(a))throw new Error(`Unable to process ${a} @ ${s}`);n.add(a),p&&r.push(...await Xt(e,p,n)),l&&(e.js_modules??={},Vt(e.js_modules,l,"main",s),Vt(e.js_modules,l,"worker",s)),i&&(e.files??={},Kt(e.files,i,s))}else r.push(s)}return r},Yt=(e,t)=>{try{e.mkdir(t)}catch(e){}},Zt=ce("mpy");var Qt={type:"micropython",module:(e="1.27.0")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,s){const{stderr:a,stdout:i,get:l}=r({stderr:o(console.error),stdout:o(console.log)});n=n.replace(/\.m?js$/,".wasm"),Zt("Loading MicroPython");const c=await l(e({linebuffer:!1,stderr:a,stdout:i,url:n}));globalThis[W].set("-T-",this.transform.bind(this,c));const p=en.bind(this,c,s);return Rt.set(c,p),t.experimental_remote_packages&&(Zt("Loading remote packages"),t.packages=await Xt(t),Zt("Loaded remote packages")),await Ct(this,Zt,c,t,s),this.writeFile(c,"./mip.py",It),t.packages&&(Zt("Loading packages"),await p(t.packages.map(P,s)),Zt("Loaded packages")),Zt("Loaded MicroPython"),c.mountNativeFS||(c.mountNativeFS=Ut(c._module)),c},registerJSModule:$t,run:Tt,runAsync:Pt,runEvent:Ft,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},l=Dt(t,r);if(l){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),l){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-CgZGjqjF.js").then(async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Yt(s,i);else{Yt(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()})}case"tgz":case"tar.gz":{const t="./_.tar.gz";return Z(i,t,n),void e.runPython(`\n import os, gzip, tarfile\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\n for f in tar:\n name = f"${r}{f.name}"\n if f.type == tarfile.DIRTYPE:\n if f.name != "./":\n os.mkdir(name.strip("/"))\n else:\n dir = os.path.dirname(name)\n if not os.path.exists(dir):\n os.mkdir(dir)\n source = tar.extractfile(f)\n with open(name, "wb") as dest:\n dest.write(source.read())\n dest.close()\n tar.close()\n os.remove("${t}")\n `)}}}return Z(i,t,n)}};async function en(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=T(s,t),r=await c(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const tn={dict_converter:Object.fromEntries},{stringify:nn}=JSON,{apply:rn}=Reflect,sn=Function.prototype,on=e=>function(...t){return rn(e,this,t)};let an,ln;const cn=e=>{const t=new WeakMap,n=n=>{for(let r,s=0;s<n.length;s++)switch(typeof(r=n[s])){case"object":if(null===r)break;case"function":if(an in r&&!r[an].shared?.gcRegistered){e=!1;let o=t.get(r)?.deref();if(!o){o=ln(r);const e=new WeakRef(o);t.set(r,e),t.set(o,e)}n[s]=o,e=!0}}};Object.defineProperties(sn,{apply:{value(t,r){return e&&n(r),rn(this,t,r)}},call:{value(t,...r){return e&&n(r),rn(this,t,r)}}})},pn=ce("py"),un=new WeakMap;var dn={type:"pyodide",module:(e="0.29.1")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e,version:t},n,s,o){pn("Loading Pyodide");let{packages:a,index_urls:i}=n;if(a){if(a=a.map(P,o),!i){pn("Loading Packages Graph");const{default:e}=await Promise.resolve().then(function(){return yn});if(t in e){const n=e[t];for(const e of a){if(/^(?:\.|\/|https?:\/\/)/.test(e))continue;e.split(/[>=<]=/)[0]in n||console.warn(`Pyodide ${t} might not support ${e}`)}}pn("Loaded Packages Graph")}n.experimental_remote_packages&&(pn("Loading remote packages"),n.packages=a=await Xt(n,a),pn("Loaded remote packages"))}pn("Loading Storage");const l=s.slice(0,s.lastIndexOf("/")),c=new h(`${l}@${t}`),p={indexURL:l},u="never"!==n.packages_cache&&"0.28.0"!==t;if(await c.sync(),pn("Loaded Storage"),u||c.clear(),a&&u)if("passthrough"===n.packages_cache)p.packages=a,a=null,c.clear();else{a=a.sort();const e=nn(a);if(c.has(e)){const n=c.get(e);if(p.packages=a.map(e=>e.split(/[>=<]=/)[0]),t.startsWith("0.27")){const e=new Blob([n],{type:"application/json"});p.lockFileURL=URL.createObjectURL(e)}else p.lockFileContents=n;a=null}}const{stderr:d,stdout:f,get:m}=r();pn("Loading interpreter");const _=await m(e({stderr:d,stdout:f,...p}));pn("Loaded interpreter"),globalThis[W].set("-T-",this.transform.bind(this,_)),n.debug&&_.setDebug(!0);const y=mn.bind(_);return i&&un.set(_,i),Rt.set(_,y),await Ct(this,pn,_,n,o),a&&await y(a,c,u),await c.close(),p.lockFileURL&&URL.revokeObjectURL(p.lockFileURL),pn("Loaded Pyodide"),"auto"===n.experimental_create_proxy&&(_.runPython(["import js","from pyodide.ffi import to_js","o=js.Object.fromEntries","js.experimental_create_proxy=lambda r:to_js(r,dict_converter=o)"].join(";"),{globals:_.toPy({})}),ln=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[an]=Reflect.ownKeys(ln).filter(e=>"symbol"==typeof e&&"Symbol(pyproxy.attrs)"===String(e)),cn(!0)),_},registerJSModule:$t,run:on(Tt),runAsync:on(Pt),runEvent:on(Ft),transform:(e,t)=>rn(fn,e,[t]),writeFile:(e,t,n,r)=>{const s=Dt(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return Z({FS:o,PATH:a,PATH_FS:i},t,n)}};function fn(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(tn);if(e instanceof Map)return new Map([...e.entries()]);if(j(e))return e.map(fn,this)}return e}async function mn(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,pn(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(un.has(this)&&o.set_index_urls(un.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof h){const n=o.freeze();t.set(nn(e),n)}o.destroy()}var _n=new Proxy({v:["latest","stable","0.29.1","0.29.0","0.28.3","0.28.2","0.28.1","0.28.0","0.27.7","0.27.6","0.27.5","0.27.4","0.27.3","0.27.2","0.27.1","0.27.0"],p:{affine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],aiohappyeyeballs:[0,1,2,3,4,5,6,7],aiohttp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],aiosignal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],altair:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"annotated-types":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],anyio:[0,1,2,3,4,5,6,7,8,9,10],apsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"argon2-cffi":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"argon2-cffi-bindings":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],asciitree:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],astropy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],astropy_iers_data:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],asttokens:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"async-timeout":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],atomicwrites:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],attrs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"audioop-lts":[0,1,2,3,4,5,6],autograd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"awkward-cpp":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],b2d:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bcrypt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],beautifulsoup4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"bilby.cython":[0,1,2,3],biopython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bitarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bitstring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bleach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],blosc2:[0,1,2,3,4,5,6,7],bokeh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"boost-histogram":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],brotli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cachetools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],casadi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"cbor-diag":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],certifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cffi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cffi_example:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cftime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"charset-normalizer":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],clarabel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],click:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cligj:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],clingo:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cloudpickle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cmyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cobs:[0,1,2,3,4,5,6],colorspacious:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],contourpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],coolprop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],coverage:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cramjam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],crc32c:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cryptography:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"css-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],cssselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"cvxpy-base":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cycler:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cysignals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cytoolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],decorator:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],demes:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],deprecation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],diskcache:[0,1,2,3,4,5,6,7],distlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],distro:[0,1,2,3,4,5,6,7,8,9,10],docutils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],donfig:[0,1,2,3,4,5,6,7],ewah_bool_utils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],exceptiongroup:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],executing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fastapi:[0,1,2,3],fastcan:[0,1,2,3],fastparquet:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fiona:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fonttools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],freesasa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],frozenlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fsspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],future:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],galpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],gmpy2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],gsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],h11:[0,1,2,3,4,5,6,7,8,9,10],h3:[0,1,2,3,4,5,6,7,8,9,10,11,12],h5py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],highspy:[0,1,2,3],html5lib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],httpcore:[0,1,2,3,4,5,6,7,8,9,10],httpx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],idna:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],igraph:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],imageio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"imgui-bundle":[0,1,2,3,4,5,6,7],iminuit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],iniconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],inspice:[0,1,2,3,4,5,6,7],ipython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jedi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Jinja2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jiter:[0,1,2,3,4,5,6,7,8,9,10],joblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jsonpatch:[0,1,2,3],jsonpointer:[0,1,2,3],jsonschema:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jsonschema_specifications:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],kiwisolver:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"lakers-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lazy_loader:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"lazy-object-proxy":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],libcst:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lightgbm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],logbook:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lxml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lz4:[0,1,2,3,4,5,6,7],MarkupSafe:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"matplotlib-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"memory-allocator":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],micropip:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],mmh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"more-itertools":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],mpmath:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],msgpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],msgspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],msprime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],multidict:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],munch:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],mypy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],narwhals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ndindex:[0,1,2,3,4,5,6,7],netcdf4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],networkx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],newick:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],nh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],nlopt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],nltk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],numcodecs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],numpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],openai:[0,1,2,3,4,5,6,7,8,9,10],"opencv-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],optlang:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],orjson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],packaging:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pandas:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],parso:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],patsy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pcodec:[0,1,2,3,4,5,6,7,8,9,10,11,12],peewee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pi-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Pillow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pillow-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pkgconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],platformdirs:[0,1,2,3,4,5,6,7],pluggy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ply:[0,1,2,3,4,5,6,7],pplpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],primecountpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],prompt_toolkit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],propcache:[0,1,2,3,4,5,6,7],protobuf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pure-eval":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyclipper:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pycparser:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pycryptodome:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pydantic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pydantic_core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyerfa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pygame-ce":[0,1,2,3,8,9,10,11,12,13,14,15],Pygments:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyheif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyiceberg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyinstrument:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pylimer-tools":[0,1,2,3],PyMuPDF:[0,1,2,3,4,5,6],pynacl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pyodide-http":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pyodide-unix-timezones":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyparsing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyrsistent:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pysam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyshp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pytaglib:[0,1,2,3,4,5,6,7],pytest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pytest-asyncio":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pytest-benchmark":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pytest_httpx:[0,1,2,3,4,5,6,7,8,9,10],"python-calamine":[0,1,2,3],"python-dateutil":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-flint":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-magic":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-sat":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-solvespace":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pytz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pywavelets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyxel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyxirr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rasterio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rateslib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rebound:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],reboundx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],referencing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],regex:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],requests:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],retrying:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rich:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],river:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],RobotRaconteur:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"rpds-py":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"ruamel.yaml":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rustworkx:[0,1,2,3,4,5,6,7],"scikit-image":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"scikit-learn":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],scipy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],screed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],setuptools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],shapely:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],simplejson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sisl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],six:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"smart-open":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sniffio:[0,1,2,3,4,5,6,7,8,9,10],sortedcontainers:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],soundfile:[0,1,2,3,4,5,6,7],soupsieve:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sourmash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],soxr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sparseqr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sqlalchemy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"stack-data":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],starlette:[0,1,2,3],statsmodels:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],strictyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],svgwrite:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],swiglpk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sympy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],termcolor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],texttable:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],texture2ddecoder:[0,1,2,3,4,5,6,7],threadpoolctl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tiktoken:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tomli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tomli-w":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],toolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tqdm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],traitlets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],traits:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter-go":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter-java":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tskit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"typing-extensions":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tzdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ujson:[0,1,2,3,4,5,6,7],uncertainties:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],unyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],urllib3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"vega-datasets":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],vrplib:[0,1,2,3],wcwidth:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],webencodings:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],wordcloud:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],wrapt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xgboost:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xlrd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xxhash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xyzservices:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],yarl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],yt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zengl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zfpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zstandard:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"arro3-compute":[8,9,10,11,12,13,14,15],"arro3-core":[8,9,10,11,12,13,14,15],"arro3-io":[8,9,10,11,12,13,14,15],Cartopy:[8,9,10,11,12,13,14,15],duckdb:[8,9,10,11,12,13,14,15],gensim:[8,9,10,11,12,13,14,15],geopandas:[8,9,10,11,12,13,14,15],"matplotlib-pyodide":[8,9,10,11,12,13,14,15],mne:[8,9,10,11,12,13,14,15],osqp:[8,9,10],polars:[8,9,10,11,12,13,14,15],pyarrow:[8,9,10,11,12,13,14],pyproj:[8,9,10,11,12,13,14,15],"rust-abi-test":[8,9,10,11,12,13,14,15],"rust-panic-test":[8,9,10,11,12,13,14,15],zarr:[8,9,10,11,12,13,14,15]}},{has:(e,t)=>e.v.includes(t),get:(e,t)=>{const n=e.v.indexOf(t);return new Proxy(e.p,{has:(e,t)=>e[t]?.includes(n)})}}),yn=Object.freeze({__proto__:null,default:_n});const hn="ruby-wasm-wasi",gn=hn.replace(/\W+/g,"_");var wn={type:hn,experimental:!0,module:(e="2.8.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\/browser\/\+esm$/,"/ruby.wasm");const s=await c(n).arrayBuffer(),o=await WebAssembly.compile(s),{vm:a}=await e(o);return t.files&&await ie(this,a,t.files,r),t.fetch&&await se(this,a,t.fetch,r),t.js_modules&&await le(t.js_modules,r),a},registerJSModule(e,t,n){t=t.replace(/\W+/g,"__");const r=`__module_${gn}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(k(t),...n),runAsync:(e,t,...n)=>e.evalAsync(k(t),...n),async runEvent(e,t,n){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${gn}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${hn}`)}};var An={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,s,o){const{stderr:a,stdout:i,get:l}=r(),c=await l((new e).createEngine());return c.global.getTable(t.Base,e=>{c.global.setField(e,"print",i),c.global.setField(e,"printErr",a)}),n.files&&await ie(this,c,n.files,o),n.fetch&&await se(this,c,n.fetch,o),n.js_modules&&await le(n.js_modules,o),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...r)=>{try{return e.doStringSync(k(t),...r)}catch(t){n.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(k(t),...r)}catch(t){n.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[s,...o]=t.split(".");let a,i=e.global.get(s);for(const e of o)[a,i]=[i,i[e]];try{await i.call(a,r)}catch(t){n.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(ee(e,Q(t)),t=te(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const bn=new WeakMap,vn=new FinalizationRegistry(e=>e()),kn=async(e,t)=>{const{shelter:n,destroy:r,io:s}=bn.get(e),{output:o,result:a}=await n.captureR(k(t));for(const{type:e,data:t}of o)s[e](t);return vn.register(a,r),a};var En={type:"webr",experimental:!0,module:(e="0.5.8")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,s,o){const{get:a}=r(),i=new e.WebR;await a(i.init().then(()=>i));const l=await new i.Shelter;return bn.set(i,{module:e,shelter:l,destroy:l.destroy.bind(l),io:n.get(i)}),t.files&&await ie(this,i,t.files,o),t.fetch&&await se(this,i,t.fetch,o),t.js_modules&&await le(t.js_modules,o),i},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:kn,runAsync:kn,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>t,writeFile:()=>{}};const jn=new Map,Bn=new Map,xn=[],Sn=[],Rn=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=jn.get(n),o=/^(?:\.?\.?\/|[a-z0-9-]+:\/\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then(r=>(Bn.set(t,e),s(r,e,n,o)))}}),Cn=e=>{for(const t of[].concat(e.type))jn.set(t,e),xn.push(`script[type="${t}"]`),Sn.push(`${t}-`)};for(const e of[Nt,Qt,dn,_n,wn,An,En])Cn(e);const $n=(e,t=document)=>[...t.querySelectorAll(e)],Dn=(e,t=document)=>{const n=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),r=[];for(let e=0,{snapshotLength:t}=n;e<t;e++)r.push(n.snapshotItem(e));return r},Tn=new Proxy(new Map,{get:(e,n)=>(e.has(n)||e.set(n,t()),e.get(n))}),Pn=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),Fn=new Proxy(Object.freeze({}),{get:(e,t)=>"string"!=typeof t||Pn.has(t)?void 0:Tn[t].promise.then(e=>e.sync)});let Mn=0;const On=Mn++,Ln=Mn++,Nn=Mn++,In=Mn++,Wn=Mn++,Hn=Mn++,Un=Mn++,zn=Mn++,qn=Mn++,Jn=Mn++,Gn=Mn++,Kn=Mn++,Vn=Mn++,Xn=Mn++,Yn=Mn++;Mn++;const Zn=Mn++,Qn=Mn++,er=(e,t)=>[t?e:Ge(new Uint8Array(e)),e.resizable?e.maxByteLength:0],tr=/\[('|")?(.+?)\1\]/g,nr=(e,t)=>e?.[t];var rr=(e,t)=>t.replace(tr,".$2").split(".").reduce(nr,e),sr=(e,...t)=>t.map(or,e);function or(e){return"string"==typeof e?rr(this,e):this[e]}const ar=globalThis.Node||class{},{apply:ir,construct:lr,defineProperty:cr,deleteProperty:pr,get:ur,getOwnPropertyDescriptor:dr,getPrototypeOf:fr,has:mr,isExtensible:_r,ownKeys:yr,set:hr,setPrototypeOf:gr}=Reflect;var wr=({reflect:e=Ye,transform:t=Ye,remote:n=Ye,module:r=e=>import(e),buffer:s=!1,timeout:o=-1}=Ze)=>{const a=(t,r=new Map)=>{if(!Ke(t))return t;const[s,o]=t;switch(s){case 2:{if(null===o)return globalThis;let e=r.get(t);if(!e){e=o,r.set(t,o);for(const e in o)o[e]=a(o[e],r)}return e}case 4:return r.get(t)||(r.set(t,o),l(o,r));case 8:{let t=h.get(o),r=t?.deref();return r||(t&&w.unregister(t),r=function(...t){n.apply(this,t);for(let e=0,n=t.length;e<n;e++)t[e]=i(t[e]);return e(Hn,o,i(this),t).then(a)},t=new WeakRef(r),h.set(o,t),w.register(r,o,t)),r}case 16:return Ue(o);default:return 1&s?f(o):o}},i=e=>{switch(typeof e){case"object":{if(null===e)break;if(e===globalThis)return g;const n=t(e);return b&&A.has(n)||n instanceof Ne?Xe(0,n):Ve(n)?Xe(68,((e,t)=>{const{BYTES_PER_ELEMENT:n,byteOffset:r,buffer:s,length:o}=e;return[yt(e),er(s,t),r,o!==(s.byteLength-r)/n?o:0]})(n,s)):n instanceof ArrayBuffer?Xe(64,er(n,s)):Xe(Ke(n)?5:3,d(n))}case"function":return Xe(9,d(t(e)));case"symbol":return Xe(16,ze(e));case"bigint":return Xe(32,e.toString())}return e},l=Qe(a),c=Qe(et),p=Qe(tt),{clear:u,id:d,ref:f,unref:m}=((e=0,t=new Map,n=new Map)=>({clear:()=>{t.clear(),n.clear()},id:r=>{let s=n.get(r);if(void 0===s){for(;t.has(s=e++););t.set(s,r),n.set(r,s)}return s},ref:e=>t.get(e),unref:e=>(n.delete(t.get(e)),t.delete(e))}))(),_=/^(?:[0-9]+|length)$/,y=-1<o,h=new Map,g=Xe(2,null),w=new FinalizationRegistry(t=>{h.delete(t),e(On,t)});let A,b=!1;return{assign:Je,gather:sr,query:rr,direct:e=>(b||(b=!0,A=new WeakSet),A.add(e),e),evaluate:(e,...t)=>ir(e,null,t),reflect(e,t,...n){const s=null===t,o=s?globalThis:f(t);switch(e){case Jn:{const e=et(n[0]),t=s&&"import"===e,a=t?r:ur(o,e),l=i(a);if(!y)return l;let c,p=t,u=o;if(!t&&!(u instanceof ar||Ke(u)&&"string"==typeof e&&_.test(e)))if(e in o){for(;!(c=dr(u,e))&&(u=fr(u),u););p=!!c&&"value"in c}else p=!0;return[p,l]}case Hn:{const e=new Map;return i(ir(o,a(n[0],e),l(n[1],e)))}case Zn:return hr(o,et(n[0]),a(n[1]));case Vn:return mr(o,et(n[0]));case Yn:return p(yr(o),h);case Un:return i(lr(o,l(n[0])));case Gn:{const e=dr(o,et(n[0]));if(e)for(const t in e)e[t]=i(e[t]);return e}case zn:return cr(o,et(n[0]),a(n[1]));case qn:return pr(o,et(n[0]));case Kn:return i(fr(o));case Qn:return gr(o,a(n[0]));case Ln:return void Je(o,a(n[0]));case Nn:{const e=a(n[0]),t=Function(`return(${e}).apply(null,arguments)`);return i(ir(t,null,l(n[1])))}case In:for(let e,t=0,r=(n=c(n[0],h)).length;t<r;t++)e=n[t],n[t]=i("string"==typeof e?rr(o,e):o[e]);return n;case Wn:return i(rr(o,n[0]));case On:return m(t);case Xn:return _r(o)}},terminate(){for(const e of h.values())w.unregister(e);h.clear(),u()}}};const{addEventListener:Ar}=EventTarget.prototype,br=new WeakMap;Reflect.defineProperty(EventTarget.prototype,"addEventListener",{value(e,t,n){const r=n?.invoke;if(r){let t=br.get(this);t||br.set(this,t=new Map),t.set(e,[].concat(r)),delete n.invoke}return Ar.apply(this,arguments)}});const vr="59317780",kr="="+vr,Er="-"+vr;var jr=(e=e=>e)=>{const n=new Map;let r=0;return[()=>{let s;do{s=e(r++)}while(n.has(s));const o=t();return n.set(s,o),[s,o.promise]},(e,t,r)=>{const s=n.get(e);n.delete(e),r?s?.reject(r):s?.resolve(t)}]};const Br=[],xr=new WeakSet,Sr=(...e)=>(xr.add(e),e);let{SharedArrayBuffer:Rr}=globalThis,Cr=!0;try{new Rr(4,{maxByteLength:8})}catch(e){Cr=!1,Rr=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const{assign:$r,create:Dr}=Object,Tr=`coincident-${Cr?crypto.randomUUID():Math.random().toString(36).substring(2)}`,Pr={byteOffset:2*Int32Array.BYTES_PER_ELEMENT},Fr=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},Mr=e=>{e.stopImmediatePropagation(),e.preventDefault()},Or=(e,t=-1)=>e?.reflected_ffi_timeout??t,{defineProperty:Lr}=Object,[Nr,Ir]=jr();let[Wr,Hr]=Nr(),Ur=()=>Hr,{Atomics:zr,MessageChannel:qr,Worker:Jr}=globalThis;if(Cr)Ir(Wr);else{const e=new Map,n=(e,...t)=>{e.addEventListener(...t)};if("importScripts"in globalThis){n(globalThis,"message",e=>{Mr(e),Ir(Wr,e.data)},{once:!0});const{wait:t}=zr,{parse:r}=JSON,s=t=>{const n=new XMLHttpRequest;try{if(n.timeout=3e3,n.open("POST",`${i}?sabayon`,!1),n.setRequestHeader("Content-Type","application/json"),n.send(`["${a}",${e.get(t)}]`),200===n.status)return n;throw n}catch{return n.abort(),s(t)}},o=(e,t)=>(e.set(r(t.responseText)),"ok");let a,i;zr={wait:(n,...r)=>e.has(n)?o(n,s(n)):t(n,...r)},Hr=Hr.then(e=>{[a,i]=e})}else{const r=[Tr,Math.random()].join("-").replace(/\W/g,"-"),s=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");s.onmessage=async t=>{const[n,o,a]=t.data;if(o===r)for(const[t,[r,o]]of e)if(r===a){await o.promise;let e=t.length;for(;e--&&!t[e];);s.postMessage([n,t.slice(0,e+1)]);break}};const o=n=>{const[r,s,o]=n.data;e.set(s,[r,t()]),Lr(n,"data",{value:o})};qr=class extends qr{constructor(){super(),n(this.port1,"message",o)}},Jr=class extends Jr{constructor(e,t){super(e,t),super.postMessage([r,i])}};const{notify:a}=zr;zr={notify(t,...n){const r=e.get(t);return r?(r[1].resolve(),0):a(t,...n)}};let i="",l=null;const c=(e,t)=>{let r,s=!0;e.getRegistration(i).then(n=>n??e.register(i,t)).then(function t(o){const{controller:a}=e;if(s=s&&!!a,r=o.installing||o.waiting||o.active,"activated"===r.state){if(s){if(a.scriptURL===i)return Ir(Wr);o.unregister()}location.reload()}else n(r,"statechange",()=>t(o),{once:!0})})};Ur=(e,t)=>{if(!l){const n=new URL(e,location.href);i=`${n.protocol}//${n.host}${n.pathname}`,c(navigator.serviceWorker,t),l=Hr}return l}}}const Gr="InstallTrigger"in globalThis?Tr:"",Kr=e=>e,Vr=e=>e===kr?"main":e===Er?"worker":e;class Xr extends Event{#a;constructor(e){super("message"),this.#a=e}get data(){return this.#a}}var Yr=e=>{const t=e?.transform,n=Or(e),r=(e?.encoder||xt)(Pr),s=!1!==e?.transfer;return{Worker:class extends Jr{constructor(e,o){const a=Cr?"":o?.serviceWorker||"",{notify:i}=a?zr:Atomics,{port1:l,port2:c}=new(a?qr:MessageChannel),[p,u]=jr(Kr),d=new Map,f=Dr(null);a&&Ur(a);let m="";super(e,$r({type:"module"},o)),this.proxy=new Proxy(f,{get:(e,n)=>{if("then"===n)return;let r=d.get(n);return r||d.set(n,r=(...e)=>{const r=((e,t)=>{let n=Br;return e&&Ke(t.at(-1))&&xr.has(t.at(-1))&&(n=t.pop(),xr.delete(n)),n})(s,e),[o,a]=p();return l.postMessage([o,n,t?e.map(t):e],r),((e,t)=>{if(m){const n=setTimeout(console.warn,3e3,`💀🔒 - is proxy.${Vr(m)}() awaiting proxy.${Vr(t)}() ?`);e=e.then(e=>(clearTimeout(n),e),e=>(clearTimeout(n),Promise.reject(e)))}return e})(a,n)}),r},set:Fr}),Gr&&(Cr||a)&&super.addEventListener("message",e=>{const{data:t}=e;t?.ID===Gr&&(Mr(e),l.dispatchEvent(new Xr(t.data)))}),super.postMessage([Gr,a,Or(o,n)],[c]),l.addEventListener("message",async({data:e})=>{const n=e[0],s=typeof n;if("number"===s)u.apply(null,e);else if(m=e[1],await(async(e,t,n)=>{try{const r=await t[e[1]].apply(null,e[2]);e[1]=n?n(r):r,e[2]=null}catch(t){e[2]=t}})(e,f,t),m="","string"===s)l.postMessage(e);else{const t=e[2]||e[1],s=void 0===t?0:r(t,n.buffer);n[1]="number"==typeof s?s:await s,n[0]=1,i(n,0)}}),l.start()}},native:Cr,transfer:Sr}};const{url:Zr}=import.meta,Qr=/import\((['"])([^)]+?\.js)\1\)/g,es=(e,t,n)=>`import(${t}${new URL(n,Zr).href}${t})`,ts=Symbol.for("polyscript.js_modules");let ns;const{Worker:rs}=(e=>{const t=e?.import,n=Or(e),r=Yr({...e,encoder:e?.encoder||xt});class s extends r.Worker{#i;constructor(e,r){const{proxy:s}=super(e,r),o=wr({...r,buffer:!0,reflect:s[Er],timeout:Or(r,n),remote(e){e instanceof Event&&(e=>{const{currentTarget:t,target:n,type:r}=e,s=br.get(t||n)?.get(r);if(s)for(const t of s)e[t]()})(e)},module:r?.import||t||(e=>import(new URL(e,location).href))});this.#i=o.terminate,this.ffi={assign:o.assign,direct:o.direct,evaluate:o.evaluate,gather:o.gather,query:o.query},s[kr]=o.reflect}terminate(){this.#i(),super.terminate()}}return{...r,Worker:s}})({transfer:!1,transform:e=>(ns||(ns=globalThis[ts]?.get("-T-")))?.(e)??e});const{parse:ss}=JSON,os=(e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[T(e),n]},as=(e,t,n={})=>{const[r,s]=os(e,t);return"json"===s?n=c(r).json():"toml"===s?n=c(r).text().then(Wt):"string"===s?n=is(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=is(n)),[n,e=r]},is=e=>{try{return ss(e)}catch(t){return Wt(e)}},ls=(e,t,n,r={})=>(t&&([r,t]=as(t,n,r)),D(r).then(n=>Rn[e](n,t))),cs=(e,t="")=>`${e}@${t}`.replace(/@$/,"");function ps(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}const us="BeforeRun",ds="AfterRun",fs=[`code${us}`,`code${us}Async`,`code${ds}`,`code${ds}Async`],ms=["onWorker","onReady",`on${us}`,`on${us}Async`,`on${ds}`,`on${ds}Async`];function _s(e,t){const{run:n,runAsync:r}=jn.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const ys=(e,t,n,r,s,o)=>{if(s||o){const a=_s.bind(e,t),i=r?"runAsync":"run",l=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await l.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=l.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let hs=class{constructor(e,t={}){const{main:n,worker:r}=t;this.interpreter=e,this.onWorker=n?.onWorker;for(const e of ms.slice(1))this[e]=r?.[e];for(const e of fs)this[e]=r?.[e]}toJSON(){const e={};for(const t of ms.slice(1))this[t]&&(e[t]=ps(this[t]));for(const t of fs)this[t]&&(e[t]=k(this[t]()));return e}};var gs=(...e)=>function(n,r){if(e.length){const[t,n]=e;(r=B({},r||{type:t,version:n})).type||(r.type=t)}const[s]=os(r.config,r.configURL),o=((...e)=>new rs(URL.createObjectURL(new Blob(["/*@*/"+'const{assign:e}=Object,t="entries",n="readonly",r="readwrite",s={durability:"default",prefix:"IDBMap"},o=({target:{result:e}})=>e;class a extends EventTarget{#e;#t;#n;async#r(n,r){const s=(await this.#e).transaction(t,r,this.#t);return new Promise((r,o)=>e(n(s.objectStore(t)),{onsuccess:r,onerror:o}))}constructor(n,{durability:r=s.durability,prefix:a=s.prefix}=s){super(),this.#n=a,this.#t={durability:r},this.#e=new Promise((r,s)=>{e(indexedDB.open(`${this.#n}/${n}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(t),n.oncomplete=()=>r(e)},onsuccess(e){r(o(e))},onerror(e){s(e),this.dispatchEvent(e)}})}).then(e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e})}dispatchEvent(t){const{type:n,message:r,isTrusted:s}=t;return super.dispatchEvent(s?e(new Event(n),{message:r}):t)}async close(){(await this.#e).close()}get size(){return this.#r(e=>e.count(),n).then(o)}async clear(){await this.#r(e=>e.clear(),r)}async delete(e){await this.#r(t=>t.delete(e),r)}async entries(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e).then(t=>[e,t])))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r(t=>t.get(e),n).then(o)}async has(e){return void 0!==await this.#r(t=>t.getKey(e),n).then(o)}async keys(){return await this.#r(e=>e.getAllKeys(),n).then(o)}async set(e,t){return await this.#r(n=>n.put(t,e),r),this}async values(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e)))}get[Symbol.toStringTag](){return this.#n}}class i extends Map{#s;#o;constructor(...e){super(),this.#s=new a(...e),this.#o=this.#s.entries().then(e=>{for(const[t,n]of e)super.set(t,n)})}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then(()=>this.#s.clear()),super.clear()}delete(e){return this.#o=this.#o.then(()=>this.#s.delete(e)),super.delete(e)}set(e,t){return this.#o=this.#o.then(()=>this.#s.set(e,t)),super.set(e,t)}}const c="59317780",l="="+c,p="-"+c;let u=0;const d=u++,f=u++,h=u++,y=u++,m=u++,g=u++,w=u++,b=u++,_=u++,A=u++,k=u++,v=u++,x=u++,E=u++,j=u++,S=u++,$=u++,B=u++,P=u++,M=u++,F=u++,R=u++,T=u++,D=u++,L=u++,O=u++,C=u++,I=u++;const z=globalThis.ImageData||class{},U=new TextDecoder,H=new TextEncoder,W=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),q=e=>{switch(e[0]){case"@":return Symbol[e.slice(1)];case"#":return Symbol.for(e.slice(1));case"!":return Symbol(e.slice(1));default:return Symbol()}},N=e=>W.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),J=Object.defineProperty,K=Object.assign,G=Array.isArray,V=ArrayBuffer.isView,X=(e,t)=>[e,t],Y=e=>e,Z=[],Q={},ee=function(){},te=e=>(t,n=new Map)=>{for(let r=0,s=t.length;r<s;r++)t[r]=e(t[r],n);return t},ne=([e,t])=>0===e?t:q(t),re=e=>"string"==typeof e?X(0,e):X(16,N(e)),se=(e,t)=>{for(let n=e.push,r=0,s=t.length;r<s;r+=32767)n.apply(e,t.subarray(r,r+32767))},oe=new ArrayBuffer(8),ae=new DataView(oe),ie=new Uint8Array(oe),ce=(e,t,n)=>(e.set(t,n),n),le=e=>{ie[0]=e[de++],ie[1]=e[de++],ie[2]=e[de++],ie[3]=e[de++],ie[4]=e[de++],ie[5]=e[de++],ie[6]=e[de++],ie[7]=e[de++]},pe=e=>(ie[0]=e[de++],ie[1]=e[de++],ie[2]=e[de++],ie[3]=e[de++],ae.getUint32(0,!0)),ue=(e,t)=>{switch(e[de++]){case m:return le(e),ae.getFloat64(0,!0);case g:return e[de++];case F:{const n=ce(t,de-1,{});for(let r=0,s=pe(e);r<s;r++)n[ue(e,t)]=ue(e,t);return n}case S:{const n=ce(t,de-1,[]);for(let r=0,s=pe(e);r<s;r++)n.push(ue(e,t));return n}case D:{const n=de-1,r=ue(e,t);return ce(t,n,new globalThis[r](ue(e,t)))}case $:{const n=de-1,r=pe(e);return ce(t,n,e.slice(de,de+=r).buffer)}case E:{const n=de-1,r=pe(e);return ce(t,n,U.decode(e.slice(de,de+=r)))}case B:return ce(t,de-1,new Date(ue(e,t)));case M:{const n=ce(t,de-1,new Map);for(let r=0,s=pe(e);r<s;r++)n.set(ue(e,t),ue(e,t));return n}case T:{const n=ce(t,de-1,new Set);for(let r=0,s=pe(e);r<s;r++)n.add(ue(e,t));return n}case P:{const n=ue(e,t),r=ue(e,t),s=ue(e,t),o=new(globalThis[n]||Error)(r);return ce(t,de-1,J(o,"stack",{value:s}))}case L:{const n=ue(e,t),r=ue(e,t),s=ue(e,t),o=ue(e,t),a=ue(e,t);return ce(t,de-1,new z(n,r,s,{colorSpace:o,pixelFormat:a}))}case R:{const n=ue(e,t),r=ue(e,t);return ce(t,de-1,new RegExp(n,r))}case d:return!1;case f:return!0;case w:return NaN;case b:return 1/0;case _:return-1/0;case A:return 0;case k:return-0;case y:return null;case v:return le(e),ae.getBigInt64(0,!0);case x:return le(e),ae.getBigUint64(0,!0);case j:return q(ue(e,t));case I:return t.get(pe(e));case O:{const n=ue(e,t),r=ue(e,t);return ce(t,de-1,new Blob([e.slice(de,de+=r)],{type:n}))}case C:{const n=de-1,r=ue(e,t),s=ue(e,t),o=ue(e,t);return ce(t,n,new File([o],r,{type:o.type,lastModified:s}))}default:return}};let de=0;const fe=e=>(de=0,ue(e,new Map)),he=({byteOffset:e=0}={})=>(t,n)=>fe(new Uint8Array(n,e,t));let ye=0;const me=ye++,ge=ye++,we=ye++,be=ye++,_e=ye++,Ae=ye++,ke=ye++,ve=ye++,xe=ye++,Ee=ye++,je=ye++,Se=ye++,$e=ye++,Be=ye++,Pe=ye++;ye++;const Me=ye++,Fe=ye++,{getPrototypeOf:Re}=Object,{construct:Te}=Reflect,{toStringTag:De}=Symbol,{toString:Le}=Q,Oe=(e,t=Le.call(e).slice(8,-1))=>t in globalThis?t:Oe(Re(e)||Q),Ce=(e,t=e[De])=>t in globalThis?t:Ce(Te(Re(e.constructor),[0])),Ie=(e,t)=>new ArrayBuffer(e,{maxByteLength:t}),ze=([e,t],n)=>{const r=n?e.byteLength:e.length;if(n){if(t){const n=Ie(r,t);new Uint8Array(n).set(new Uint8Array(e)),e=n}}else{const n=t?Ie(r,t):new ArrayBuffer(r);new Uint8Array(n).set(e),e=n}return e};const Ue=/\\[(\'|")?(.+?)\\1\\]/g,He=(e,t)=>e?.[t];var We=e=>{const t=[],n=e=>{const n=t.splice(e);for(;e<n.length;)n[e++].delete(n[e++])};return class r extends Map{static keys=Symbol();static proto=Symbol();drop(e,t){return e!==r.proto&&super.delete(r.keys),super.delete(e),t}set(r,s){return((r,s)=>{t.push(r,s)<3&&setTimeout(n,e,0)})(super.set(r,s),r),s}}},qe=({reflect:e=Y,transform:t=Y,released:n=Y,buffer:r=!1,timeout:s=-1}=Q)=>{const o=te(ne),a=te(re),i=e=>{if(!G(e))return e;const[t,n]=e;if(1&t)return p(t,n);switch(t){case 2:return j;case 0:return n;case 16:return q(n);case 32:return BigInt(n);case 68:return(([e,t,n,r],s)=>{const o=ze(t,s),a=globalThis[e];return r?new a(o,n,r):new a(o,n)})(n,r);case 64:return ze(n,r)}},c=(e,n=new Map)=>{switch(typeof e){case"object":{if(null===e)break;if(e===globalThis)return E;if(x in e)return g;let r=n.get(e);if(!r){const s=t(e);if(w||!m.has(s)){if(G(s)){const t=[];r=X(4,t),n.set(e,r);for(let e=0,r=s.length;e<r;e++)t[e]=c(s[e],n);return r}if(!(V(s)||s instanceof ArrayBuffer||"Object"!==Oe(s))){const t={};r=X(2,t),n.set(e,r);for(const e in s)t[e]=c(s[e],n);return r}}r=X(0,s),n.set(e,r)}return r}case"function":{if(x in e)return g;let r=n.get(e);if(!r){const s=t(e);r=X(8,_(s)),n.set(e,r)}return r}case"symbol":return X(16,N(e))}return e},l=te(c),p=(e,t)=>{let n=v.get(t),r=n?.deref();return r||(n&&S.unregister(n),r=9===e?new Proxy(ee,new y(e,t)):new Proxy(3===e?Q:Z,new h(e,t)),n=new WeakRef(r),v.set(t,n),S.register(r,t,n)),r},u=e=>{switch(typeof e){case"object":if(null===e)break;case"function":return x in e}return!1},d=-1<s,f=d?We(s):Map;class h{constructor(e,t){this.t=e,this.v=t,d&&(this.$=new f)}get(t,n){if(d&&this.$.has(n))return this.$.get(n);const r=e(Ee,this.v,re(n));return d?r[0]?this.$.set(n,i(r[1])):i(r[1]):i(r)}set(t,n,r){const s=e(Me,this.v,re(n),c(r));return d?this.$.drop(n,s):s}has(t,n){return n===x?(g=[this.t,this.v],!0):e($e,this.v,re(n))}_oK(){return o(e(Pe,this.v),v)}ownKeys(e){return d?this.$.has(f.keys)?this.$.get(f.keys):this.$.set(f.keys,this._oK()):this._oK()}getOwnPropertyDescriptor(t,n){const r=i(e(je,this.v,re(n)));if(r)for(const e in r)r[e]=i(r[e]);return r}defineProperty(t,n,r){const s=e(ve,this.v,re(n),c(r));return d?this.$.drop(n,s):s}deleteProperty(t,n){const r=e(xe,this.v,re(n));return d?this.$.drop(n,r):r}_gPO(){return i(e(Se,this.v))}getPrototypeOf(e){return d?this.$.has(f.proto)?this.$.get(f.proto):this.$.set(f.proto,this._gPO()):this._gPO()}setPrototypeOf(t,n){const r=e(Fe,this.v,c(n));return d?this.$.drop(f.proto,r):r}isExtensible(t){return e(Be,this.v)}preventExtensions(e){return!1}}class y extends h{construct(t,n){return i(e(ke,this.v,l(n)))}apply(t,n,r){const s=new Map;return i(e(Ae,this.v,c(n,s),l(r,s)))}get(e,t){switch(t){case"apply":return(t,n)=>this.apply(e,t,n);case"call":return(t,...n)=>this.apply(e,t,n);default:return super.get(e,t)}}}let m,g,w=!0;const{apply:b}=Reflect,{id:_,ref:A,unref:k}=((e=0,t=new Map,n=new Map)=>({clear:()=>{t.clear(),n.clear()},id:r=>{let s=n.get(r);if(void 0===s){for(;t.has(s=e++););t.set(s,r),n.set(r,s)}return s},ref:e=>t.get(e),unref:e=>(n.delete(t.get(e)),t.delete(e))}))(),v=new Map,x=Symbol("reflected-ffi"),E=X(2,null),j=new Proxy(Q,new h(2,null)),S=new FinalizationRegistry(t=>{v.delete(t),e(me,t)});return{global:j,isProxy:u,assign(t,...n){const r=u(t),s=K(r?{}:t,...n);return r&&e(ge,g[1],c(s)),t},direct:e=>(w&&(w=!1,m=new WeakSet),m.add(e),e),evaluate:(t,...n)=>i(e(we,null,function(e=this){return String(e).replace(/^(async\\s*)?(\\bfunction\\b)?(.*?)\\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}(t),l(n))),gather(t,...n){const r=u(t),s=r?i:e=>t[e];r&&(n=e(be,g[1],a(n,v)));for(let e=0;e<n.length;e++)n[e]=s(n[e]);return n},query:(t,n)=>u(t)?i(e(_e,g[1],n)):((e,t)=>t.replace(Ue,".$2").split(".").reduce(He,e))(t,n),reflect:async(e,t,...r)=>{switch(e){case Ae:{const[e,n]=r;for(let e=0,t=n.length;e<t;e++)n[e]=i(n[e]);return c(await b(A(t),i(e),n))}case me:return n(A(t)),k(t)}}}};var Ne=Promise.withResolvers.bind(Promise),Je=(e=e=>e)=>{const t=new Map;let n=0;return[()=>{let r;do{r=e(n++)}while(t.has(r));const s=Ne();return t.set(r,s),[r,s.promise]},(e,n,r)=>{const s=t.get(e);t.delete(e),r?s?.reject(r):s?.resolve(n)}]};const Ke=[],Ge=new WeakSet,Ve=(...e)=>(Ge.add(e),e);let{SharedArrayBuffer:Xe}=globalThis,Ye=!0;try{new Xe(4,{maxByteLength:8})}catch(e){Ye=!1,Xe=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const{create:Ze}=Object,Qe=`coincident-${Ye?crypto.randomUUID():Math.random().toString(36).substring(2)}`,et=2*Int32Array.BYTES_PER_ELEMENT,tt={byteOffset:et},nt=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},rt=e=>{e.stopImmediatePropagation(),e.preventDefault()},[st,ot]=Je();let[at,it]=st(),ct=()=>it,lt=()=>{},{Atomics:pt,MessagePort:ut,SharedArrayBuffer:dt,postMessage:ft}=globalThis;if(Ye)ot(at);else{dt=Xe;const e=new Map,t=(e,...t)=>{e.addEventListener(...t)};if("importScripts"in globalThis){lt=t=>{e.set(t,null)};const n=t=>{const n=t[0],r=u++;return e.set(n,r),[r,n,t]},r=ft;ft=function(e,t){if(p){const s={ID:e.ID,data:n(e.data)};r(s,t)}else it.then(()=>this.postMessage(e,t))},ut=class extends ut{postMessage(e,t){p?super.postMessage(n(e),t):it.then(()=>this.postMessage(e,t))}},t(globalThis,"message",e=>{rt(e),ot(at,e.data)},{once:!0});const{wait:s}=pt,{parse:o}=JSON,a=t=>{const n=new XMLHttpRequest;try{if(n.timeout=3e3,n.open("POST",`${l}?sabayon`,!1),n.setRequestHeader("Content-Type","application/json"),n.send(`["${c}",${e.get(t)}]`),200===n.status)return n;throw n}catch{return n.abort(),a(t)}},i=(e,t)=>(e.set(o(t.responseText)),"ok");pt={wait:(t,...n)=>e.has(t)?i(t,a(t)):s(t,...n)};let c,l,p=!1,u=Math.random();it=it.then(e=>{[c,l]=e,p=!0})}else{const n=[Qe,Math.random()].join("-").replace(/\\W/g,"-"),r=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");r.onmessage=async t=>{const[s,o,a]=t.data;if(o===n)for(const[t,[n,o]]of e)if(n===a){await o.promise;let e=t.length;for(;e--&&!t[e];);r.postMessage([s,t.slice(0,e+1)]);break}};const{notify:s}=pt;pt={notify(t,...n){const r=e.get(t);return r?(r[1].resolve(),0):s(t,...n)}};let o="",a=null;const i=(e,n)=>{let r,s=!0;e.getRegistration(o).then(t=>t??e.register(o,n)).then(function n(a){const{controller:i}=e;if(s=s&&!!i,r=a.installing||a.waiting||a.active,"activated"===r.state){if(s){if(i.scriptURL===o)return ot(at);a.unregister()}location.reload()}else t(r,"statechange",()=>n(a),{once:!0})})};ct=(e,t)=>{if(!a){const n=new URL(e,location.href);o=`${n.protocol}//${n.host}${n.pathname}`,i(navigator.serviceWorker,t),a=it}return a}}}const{setPrototypeOf:ht}=Reflect;let{postMessage:yt}=globalThis;const mt=Ne(),gt=ut.prototype;addEventListener("message",e=>{rt(e);const[t,n,r]=e.data,[s]=e.ports;n&&(ht(s,gt),t&&(yt=ft)),mt.resolve([t,n,r,s])},{once:!0});var wt=async e=>{const[t,n,r,s]=await ct().then(()=>mt.promise),o=!!t,a=Ye||!!n,i=e?.transform,c=(e?.decoder||he)(tt),l=!1!==e?.transfer;let p,u,d,f;if(a){const t=new(n?dt:SharedArrayBuffer)(e?.minByteLength||32767,{maxByteLength:e?.maxByteLength||16777216});p=new Int32Array(t),n?(({wait:f}=pt),lt(p)):(({load:u,pause:d,wait:f}=Atomics),d&&(f=(e,t)=>{do{d()}while(u(e,t)<1)}))}const[h,y]=Je(String),m=new Map,g=Ze(null),w=new Proxy(g,{get(e,n){if("then"===n)return;let r=m.get(n);return r||m.set(n,r=(...e)=>{const r=((e,t)=>{let n=Ke;return e&&G(t.at(-1))&&Ge.has(t.at(-1))&&(n=t.pop(),Ge.delete(n)),n})(l,e),u=[p,n,i?e.map(i):e];if(a){o?yt({ID:t,data:u},r):s.postMessage(u,r),f(p,0),p[0]=0;const e=p[1]?c(p[1],p.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=h();return u[0]=e,s.postMessage(u,r),t}}),r},set:nt});return s.addEventListener("message",async({data:e})=>{"string"==typeof e[0]?y.apply(null,e):(await(async(e,t,n)=>{try{const r=await t[e[1]].apply(null,e[2]);e[1]=n?n(r):r,e[2]=null}catch(t){e[2]=t}})(e,g,i),s.postMessage(e))}),s.start(),{native:Ye,proxy:w,ffi_timeout:r,sync:a,transfer:Ve}};const bt={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n<r;n++)t+=arguments[n]+e[n];return t}(...e))},string(e){for(const t of e.split(/[\\r\\n]+/))if(t.trim().length){/^(\\s+)/.test(t)&&(e=e.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return e}},_t=new WeakMap,At=e=>{const t=e||console,n={buffered:vt,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return _t.set(t,n),t}}},kt=new TextDecoder,vt=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(kt.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},xt=(e,...t)=>bt[typeof e](e,...t),{isArray:Et}=Array,{assign:jt,create:St,defineProperty:$t,entries:Bt}=Object,{all:Pt,resolve:Mt}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),Ft=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function Rt(e){return e.startsWith(".")?Ft(e,this):e}const Tt=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},Dt=e=>Function(`\'use strict\';return (${e})`)(),Lt=e=>e.replace(/^(?:\\n|\\r\\n)/,""),Ot=Symbol.for("polyscript.js_modules"),Ct=new Map;$t(globalThis,Ot,{value:Ct}),new Proxy(Ct,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]});const It=(e,t)=>!t.startsWith("_"),zt=(e,t)=>new Proxy(e,{has:It,get:(e,n)=>e[t][n]}),Ut=(e,t)=>import(e).then(e=>{Ct.set(t,{...e})}),Ht=e=>new Promise((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(jt(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))}),Wt=e=>/\\.css$/i.test(new URL(e).pathname),qt=(e,t)=>e.has(t),Nt=e=>[...e.keys()];var Jt=(e,t,n,r)=>{const s=globalThis[Ot];if(n)for(let[e,t]of Bt(n)){let n=s.get(t);n&&!Et(n)||(s.set(t,n||(n=[])),n.push(e))}return((e,t,n,r)=>new Proxy(e,{has:qt,ownKeys:Nt,get:(e,s)=>{let o=e.get(s);if(Et(o)){let a=o;o=null;for(let e of a)e=Ft(e,r),Wt(e)?n.importCSS(e):(n.importJS(e,s),o=t[Ot].get(s));e.set(s,o)}return o}}))(s,e,t,r)};const Kt=new Map,Gt=e=>Kt.get(e),Vt=(e,t)=>{try{return Function("require",t)(Gt)}catch(t){_t.get(e).stderr(t)}};var Xt={type:"dummy",module:()=>"data:text/javascript,",engine:e=>At().get(e),registerJSModule(e,t,n){Kt.set(t,n)},run:Vt,runAsync:Vt,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(Gt,n)}catch(t){_t.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};const Yt=Object.getOwnPropertyDescriptors(Response.prototype),Zt=e=>"function"==typeof e,Qt={get:(e,t)=>Yt.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!Zt(r)?e.then(e=>e[t]):(...n)=>e.then(e=>e[t](...n)))(e,t,Yt[t]):((e,t)=>Zt(t)?t.bind(e):t)(e,e[t])};var en=(e,...t)=>new Proxy(fetch(e,...t).then(t=>t.ok?t:Promise.reject(new Error(`[${t.status}] Unable to fetch ${e}`))),Qt);const tn=!globalThis.window,nn=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):sn(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},rn=e=>{const t=e.split("/");return t.pop(),t.join("/")},sn=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},on=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\\/+/,"/")},an=e=>{const t=e.map(e=>e.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(e=>""!==e&&"."!==e).join("/");return e[0].startsWith("/")?`/${t}`:t},cn=(e,t)=>en(Ft(e,t)).arrayBuffer(),ln=(e,t,n,r)=>Pt((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${r}, please supply \'to_file\' parameter.`)}return e.flatMap(({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(Et(r))return r.map(n=>({url:an([e,n]),path:an([t,n])}));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:an([t,s])}]})})(n).map(({url:n,path:s})=>cn(n,r).then(n=>e.writeFile(t,s,n)))),pn=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,un=(e,t)=>e.replace(/\\{.+?\\}/g,e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)}),dn=(e,t,n,r)=>Pt((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of Bt(e))if(/^\\{.+\\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,un(o,t))}else{const e=un(s,t),a=pn(e,un(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map(({url:n,path:s})=>cn(n,r).then(r=>e.writeFile(t,s,r,n)))),fn=({main:e,worker:t},n)=>{const r=[];if(t&&tn)for(let[e,s]of Bt(t))e=Ft(e,n),r.push(Ut(e,s));if(e&&!tn)for(let[t,s]of Bt(e))t=Ft(t,n),Wt(t)?Ht(t):r.push(Ut(t,s));return Pt(r)},hn=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))},{isNaN:yn,isFinite:mn,isInteger:gn}=Number,{ownKeys:wn}=Reflect,{is:bn}=Object,_n=(e,t,n)=>{const r=n.get(e),s=!r;return s?(ae.setUint32(0,t.length,!0),n.set(e,[ie[0],ie[1],ie[2],ie[3]])):t.push(I,r[0],r[1],r[2],r[3]),s},An=(e,t,n)=>{ae.setUint32(0,n,!0),e.push(t,ie[0],ie[1],ie[2],ie[3])},kn=(e,t,n)=>{switch(typeof e){case"number":e&&mn(e)?gn(e)&&e<256&&-1<e?t.push(g,e):(ae.setFloat64(0,e,!0),t.push(m,ie[0],ie[1],ie[2],ie[3],ie[4],ie[5],ie[6],ie[7])):yn(e)?t.push(w):e?t.push(e<0?_:b):t.push(bn(e,0)?A:k);break;case"object":switch(!0){case null===e:t.push(y);break;case!_n(e,t,n):break;case G(e):{const r=e.length;An(t,S,r);for(let s=0;s<r;s++)kn(e[s],t,n);break}case V(e):if(t.push(D),kn(Ce(e),t,n),e=e.buffer,!_n(e,t,n))break;case e instanceof ArrayBuffer:{const n=new Uint8Array(e);An(t,$,n.length),xn(t,n);break}case e instanceof Date:t.push(B),kn(e.getTime(),t,n);break;case e instanceof Map:An(t,M,e.size);for(const[r,s]of e)kn(r,t,n),kn(s,t,n);break;case e instanceof Set:An(t,T,e.size);for(const r of e)kn(r,t,n);break;case e instanceof Error:t.push(P),kn(e.name,t,n),kn(e.message,t,n),kn(e.stack,t,n);break;case e instanceof z:t.push(L),kn(e.data,t,n),kn(e.width,t,n),kn(e.height,t,n),kn(e.colorSpace,t,n),kn(e.pixelFormat,t,n);break;case e instanceof RegExp:t.push(R),kn(e.source,t,n),kn(e.flags,t,n);break;case e instanceof File:t.push(C),kn(e.name,t,n),kn(e.lastModified,t,n);case e instanceof Blob:{const r=e.size;t.push(O),kn(e.type,t,n),kn(r,t,n);const s=t.length;xn(t,new Uint8Array(r)),vn.push(e.arrayBuffer().then(e=>[s,e]));break}default:if("toJSON"in e){const r=e.toJSON();kn(r===e?null:r,t,n)}else{const r=wn(e),s=r.length;An(t,F,s);for(let o=0;o<s;o++){const s=r[o];kn(s,t,n),kn(e[s],t,n)}}}break;case"string":if(_n(e,t,n)){const n=H.encode(e);An(t,E,n.length),xn(t,n)}break;case"boolean":t.push(e?f:d);break;case"symbol":t.push(j),kn(N(e),t,n);break;case"bigint":{let n=v;9223372036854775807n<e?(ae.setBigUint64(0,e,!0),n=x):ae.setBigInt64(0,e,!0),t.push(n,ie[0],ie[1],ie[2],ie[3],ie[4],ie[5],ie[6],ie[7]);break}default:t.push(h)}},vn=[];let xn=se;const En={parse:fe,stringify:e=>{const t=[];return xn=se,kn(e,t,new Map),t}},jn=new WeakMap,Sn=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await dn(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await ln(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await fn(r.js_modules,s),t("Loaded JS modules"))},$n=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await jn.get(e)(t),t.map(t=>e.pyimport(t))),n.storage=async e=>{const t=new i(e);return await t.sync(),t},n.JSON=En),e.registerJsModule(t,n)},Bn=(e,t)=>{if(e.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},Pn=(e,t,...n)=>{try{return e.runPython(xt(t),...n)}catch(t){_t.get(e).stderr(t)}},Mn=async(e,t,...n)=>{try{return await e.runPythonAsync(xt(t),...n)}catch(t){_t.get(e).stderr(t)}},Fn=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){_t.get(e).stderr(t)}};var Rn=(new TextEncoder).encode("_F=\'github:\'\\n_E=\'user-agent\'\\n_D=True\\n_C=False\\n_B=\'/\'\\n_A=None\\nfrom uio import StringIO\\nimport sys\\nclass Response:\\n\\tdef __init__(A,f):A.raw=f;A.encoding=\'utf-8\';A._cached=_A\\n\\tdef close(A):\\n\\t\\tif A.raw:A.raw.close();A.raw=_A\\n\\t\\tA._cached=_A\\n\\t@property\\n\\tdef content(self):\\n\\t\\tA=self\\n\\t\\tif A._cached is _A:\\n\\t\\t\\ttry:A._cached=A.raw.read()\\n\\t\\t\\tfinally:A.raw.close();A.raw=_A\\n\\t\\treturn A._cached\\n\\t@property\\n\\tdef text(self):return str(self.content,self.encoding)\\n\\tdef json(A):import ujson;return ujson.loads(A.content)\\nHEADERS_TO_IGNORE=_E,\\ntry:import js\\nexcept Exception as err:raise OSError(\'This version of urequests can only be used in the browser\')\\nHEADERS_TO_IGNORE=_E,\\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\\n\\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\\n\\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\\n\\telse:A.open(D,url,_C)\\n\\tfor(F,J)in headers.items():\\n\\t\\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\\n\\tif E:A.timeout=int(E*1000)\\n\\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader(\'Content-Type\',\'application/json\')\\n\\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\\ndef get(url,**A):return request(\'GET\',url,**A)\\n_PACKAGE_INDEX=const(\'https://micropython.org/pi/v2\')\\n_CHUNK_SIZE=128\\ndef _ensure_path_exists(path):\\n\\timport os;A=path.split(_B)\\n\\tif not A[0]:A.pop(0);A[0]=_B+A[0]\\n\\tB=\'\'\\n\\tfor C in range(len(A)-1):\\n\\t\\tB+=A[C]\\n\\t\\ttry:os.stat(B)\\n\\t\\texcept:os.mkdir(B)\\n\\t\\tB+=_B\\ndef _chunk(src,dest):\\n\\tA=memoryview(bytearray(_CHUNK_SIZE))\\n\\twhile _D:\\n\\t\\tB=src.readinto(A)\\n\\t\\tif B==0:break\\n\\t\\tdest(A if B==_CHUNK_SIZE else A[:B])\\ndef _check_exists(path,short_hash):\\n\\tA=short_hash;import os\\n\\ttry:\\n\\t\\timport binascii as C,hashlib as D\\n\\t\\twith open(path,\'rb\')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],\'utf-8\');return F==A\\n\\texcept:return _C\\ndef _rewrite_url(url,branch=_A):\\n\\tB=branch;A=url\\n\\tif not B:B=\'HEAD\'\\n\\tif A.startswith(_F):A=A[7:].split(_B);A=\'https://raw.githubusercontent.com/\'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\\n\\treturn A\\ndef _download_file(url,dest):\\n\\tB=dest;A=get(url)\\n\\ttry:\\n\\t\\tif A.status_code!=200:print(\'Error\',A.status_code,\'requesting\',url);return _C\\n\\t\\tprint(\'Copying:\',B);_ensure_path_exists(B)\\n\\t\\twith open(B,\'wb\')as C:_chunk(A.raw,C.write)\\n\\t\\treturn _D\\n\\tfinally:A.close()\\ndef _install_json(package_json_url,index,target,version,mpy):\\n\\tK=\'File not found: {} {}\';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\\n\\ttry:\\n\\t\\tif E.status_code!=200:print(\'Package not found:\',G);return _C\\n\\t\\tF=E.json()\\n\\tfinally:E.close()\\n\\tfor(A,C)in F.get(\'hashes\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif _check_exists(B,C):print(\'Exists:\',B)\\n\\t\\telse:\\n\\t\\t\\tL=\'{}/file/{}/{}\'.format(H,C[:2],C)\\n\\t\\t\\tif not _download_file(L,B):print(K.format(A,C));return _C\\n\\tfor(A,J)in F.get(\'urls\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\\n\\tfor(M,N)in F.get(\'deps\',()):\\n\\t\\tif not _install_package(M,H,D,N,mpy):return _C\\n\\treturn _D\\ndef _install_package(package,index,target,version,mpy):\\n\\tD=index;C=target;B=version;A=package\\n\\tif A.startswith(\'http://\')or A.startswith(\'https://\')or A.startswith(_F):\\n\\t\\tif A.endswith(\'.py\')or A.endswith(\'.mpy\'):print(\'Downloading {} to {}\'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\\n\\t\\telse:\\n\\t\\t\\tif not A.endswith(\'.json\'):\\n\\t\\t\\t\\tif not A.endswith(_B):A+=_B\\n\\t\\t\\t\\tA+=\'package.json\'\\n\\t\\t\\tprint(\'Installing {} to {}\'.format(A,C))\\n\\telse:\\n\\t\\tif not B:B=\'latest\'\\n\\t\\tprint(\'Installing {} ({}) from {} to {}\'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,\'_mpy\')else\'py\';A=\'{}/package/{}/{}/{}.json\'.format(D,\'py\',A,B)\\n\\treturn _install_json(A,D,C,B,mpy)\\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\\n\\tB=target;A=index\\n\\tif not B:\\n\\t\\tfor C in sys.path:\\n\\t\\t\\tif C.endswith(\'/lib\'):B=C;break\\n\\t\\telse:print(\'Unable to find lib dir in sys.path\');return\\n\\tif not A:A=_PACKAGE_INDEX\\n\\tif _install_package(package,A.rstrip(_B),B,version,mpy):print(\'Done\')\\n\\telse:print(\'Package may be partially installed\')");const Tn=async e=>(await import("./toml-BK2RWy-G.js")).parse(e);async function Dn(e,t){return new Promise((n,r)=>{e.syncfs(t,e=>{e?r(e):n()})})}function Ln(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await On(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach(function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)}),i.sort();const c=[];if(Object.keys(o.entries).forEach(function(e){n.entries[e]||(c.push(e),a++)}),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument \'fileSystemHandle\' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):sn(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path \'${e}\' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path \'${e}\' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory \'${e}\' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await Dn(t,!0),{syncfs:async()=>await Dn(t,!1)}}}const On=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},{parse:Cn}=JSON,In=(e,t)=>new URL(e,t).href,zn=(e,t,n)=>{if(t in e)throw new Error(`Duplicated path: ${t}`);e[t]=n},Un=(e,t,n)=>{for(const r in t)zn(e,In(r,n),t[r])},Hn=(e,t,n,r)=>{const s=t[n];s&&(e[n]??={},Un(e[n],s,r))},Wn=async(e,t=e.packages,n=new Set)=>{const r=[];for(const s of t){if(n.has(s))continue;n.add(s);const t=s.endsWith(".toml");if(t||s.endsWith(".json")){const o=await en(s).text(),{name:a,files:i,js_modules:c,packages:l}=t?await Tn(o):Cn(o);if(n.has(a))throw new Error(`Unable to process ${a} @ ${s}`);n.add(a),l&&r.push(...await Wn(e,l,n)),c&&(e.js_modules??={},Hn(e.js_modules,c,"main",s),Hn(e.js_modules,c,"worker",s)),i&&(e.files??={},Un(e.files,i,s))}else r.push(s)}return r},qn=(e,t)=>{try{e.mkdir(t)}catch(e){}},Nn=hn("mpy");var Jn={type:"micropython",module:(e="1.27.0")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=At({stderr:vt(console.error),stdout:vt(console.log)});n=n.replace(/\\.m?js$/,".wasm"),Nn("Loading MicroPython");const i=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n}));globalThis[Ot].set("-T-",this.transform.bind(this,i));const c=Kn.bind(this,i,r);return jn.set(i,c),t.experimental_remote_packages&&(Nn("Loading remote packages"),t.packages=await Wn(t),Nn("Loaded remote packages")),await Sn(this,Nn,i,t,r),this.writeFile(i,"./mip.py",Rn),t.packages&&(Nn("Loading packages"),await c(t.packages.map(Rt,r)),Nn("Loaded packages")),Nn("Loaded MicroPython"),i.mountNativeFS||(i.mountNativeFS=Ln(i._module)),i},registerJSModule:$n,run:Pn,runAsync:Mn,runEvent:Fn,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=Bn(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-CgZGjqjF.js").then(async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)qn(s,i);else{qn(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()})}case"tgz":case"tar.gz":{const t="./_.tar.gz";return nn(i,t,n),void e.runPython(`\\n import os, gzip, tarfile\\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\\n for f in tar:\\n name = f"${r}{f.name}"\\n if f.type == tarfile.DIRTYPE:\\n if f.name != "./":\\n os.mkdir(name.strip("/"))\\n else:\\n dir = os.path.dirname(name)\\n if not os.path.exists(dir):\\n os.mkdir(dir)\\n source = tar.extractfile(f)\\n with open(name, "wb") as dest:\\n dest.write(source.read())\\n dest.close()\\n tar.close()\\n os.remove("${t}")\\n `)}}}return nn(i,t,n)}};async function Kn(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=Ft(s,t),r=await en(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const Gn={dict_converter:Object.fromEntries},{stringify:Vn}=JSON,{apply:Xn}=Reflect,Yn=Function.prototype,Zn=e=>function(...t){return Xn(e,this,t)};let Qn,er;const tr=e=>{const t=new WeakMap,n=n=>{for(let r,s=0;s<n.length;s++)switch(typeof(r=n[s])){case"object":if(null===r)break;case"function":if(Qn in r&&!r[Qn].shared?.gcRegistered){e=!1;let o=t.get(r)?.deref();if(!o){o=er(r);const e=new WeakRef(o);t.set(r,e),t.set(o,e)}n[s]=o,e=!0}}};Object.defineProperties(Yn,{apply:{value(t,r){return e&&n(r),Xn(this,t,r)}},call:{value(t,...r){return e&&n(r),Xn(this,t,r)}}})},nr=hn("py"),rr=new WeakMap;var sr={type:"pyodide",module:(e="0.29.1")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e,version:t},n,r,s){nr("Loading Pyodide");let{packages:o,index_urls:a}=n;if(o){if(o=o.map(Rt,s),!a){nr("Loading Packages Graph");const{default:e}=await Promise.resolve().then(function(){return cr});if(t in e){const n=e[t];for(const e of o){if(/^(?:\\.|\\/|https?:\\/\\/)/.test(e))continue;e.split(/[>=<]=/)[0]in n||console.warn(`Pyodide ${t} might not support ${e}`)}}nr("Loaded Packages Graph")}n.experimental_remote_packages&&(nr("Loading remote packages"),n.packages=o=await Wn(n,o),nr("Loaded remote packages"))}nr("Loading Storage");const c=r.slice(0,r.lastIndexOf("/")),l=new i(`${c}@${t}`),p={indexURL:c},u="never"!==n.packages_cache&&"0.28.0"!==t;if(await l.sync(),nr("Loaded Storage"),u||l.clear(),o&&u)if("passthrough"===n.packages_cache)p.packages=o,o=null,l.clear();else{o=o.sort();const e=Vn(o);if(l.has(e)){const n=l.get(e);if(p.packages=o.map(e=>e.split(/[>=<]=/)[0]),t.startsWith("0.27")){const e=new Blob([n],{type:"application/json"});p.lockFileURL=URL.createObjectURL(e)}else p.lockFileContents=n;o=null}}const{stderr:d,stdout:f,get:h}=At();nr("Loading interpreter");const y=await h(e({stderr:d,stdout:f,...p}));nr("Loaded interpreter"),globalThis[Ot].set("-T-",this.transform.bind(this,y)),n.debug&&y.setDebug(!0);const m=ar.bind(y);return a&&rr.set(y,a),jn.set(y,m),await Sn(this,nr,y,n,s),o&&await m(o,l,u),await l.close(),p.lockFileURL&&URL.revokeObjectURL(p.lockFileURL),nr("Loaded Pyodide"),"auto"===n.experimental_create_proxy&&(y.runPython(["import js","from pyodide.ffi import to_js","o=js.Object.fromEntries","js.experimental_create_proxy=lambda r:to_js(r,dict_converter=o)"].join(";"),{globals:y.toPy({})}),er=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Qn]=Reflect.ownKeys(er).filter(e=>"symbol"==typeof e&&"Symbol(pyproxy.attrs)"===String(e)),tr(!0)),y},registerJSModule:$n,run:Zn(Pn),runAsync:Zn(Mn),runEvent:Zn(Fn),transform:(e,t)=>Xn(or,e,[t]),writeFile:(e,t,n,r)=>{const s=Bn(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return nn({FS:o,PATH:a,PATH_FS:i},t,n)}};function or(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(Gn);if(e instanceof Map)return new Map([...e.entries()]);if(Et(e))return e.map(or,this)}return e}async function ar(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,nr(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(rr.has(this)&&o.set_index_urls(rr.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof i){const n=o.freeze();t.set(Vn(e),n)}o.destroy()}var ir=new Proxy({v:["latest","stable","0.29.1","0.29.0","0.28.3","0.28.2","0.28.1","0.28.0","0.27.7","0.27.6","0.27.5","0.27.4","0.27.3","0.27.2","0.27.1","0.27.0"],p:{affine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],aiohappyeyeballs:[0,1,2,3,4,5,6,7],aiohttp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],aiosignal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],altair:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"annotated-types":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],anyio:[0,1,2,3,4,5,6,7,8,9,10],apsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"argon2-cffi":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"argon2-cffi-bindings":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],asciitree:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],astropy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],astropy_iers_data:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],asttokens:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"async-timeout":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],atomicwrites:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],attrs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"audioop-lts":[0,1,2,3,4,5,6],autograd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"awkward-cpp":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],b2d:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bcrypt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],beautifulsoup4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"bilby.cython":[0,1,2,3],biopython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bitarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bitstring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],bleach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],blosc2:[0,1,2,3,4,5,6,7],bokeh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"boost-histogram":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],brotli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cachetools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],casadi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"cbor-diag":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],certifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cffi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cffi_example:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cftime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"charset-normalizer":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],clarabel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],click:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cligj:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],clingo:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cloudpickle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cmyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cobs:[0,1,2,3,4,5,6],colorspacious:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],contourpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],coolprop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],coverage:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cramjam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],crc32c:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cryptography:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"css-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],cssselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"cvxpy-base":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cycler:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cysignals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cytoolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],decorator:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],demes:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],deprecation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],diskcache:[0,1,2,3,4,5,6,7],distlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],distro:[0,1,2,3,4,5,6,7,8,9,10],docutils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],donfig:[0,1,2,3,4,5,6,7],ewah_bool_utils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],exceptiongroup:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],executing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fastapi:[0,1,2,3],fastcan:[0,1,2,3],fastparquet:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fiona:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fonttools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],freesasa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],frozenlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],fsspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],future:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],galpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],gmpy2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],gsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],h11:[0,1,2,3,4,5,6,7,8,9,10],h3:[0,1,2,3,4,5,6,7,8,9,10,11,12],h5py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],highspy:[0,1,2,3],html5lib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],httpcore:[0,1,2,3,4,5,6,7,8,9,10],httpx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],idna:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],igraph:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],imageio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"imgui-bundle":[0,1,2,3,4,5,6,7],iminuit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],iniconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],inspice:[0,1,2,3,4,5,6,7],ipython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jedi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Jinja2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jiter:[0,1,2,3,4,5,6,7,8,9,10],joblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jsonpatch:[0,1,2,3],jsonpointer:[0,1,2,3],jsonschema:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],jsonschema_specifications:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],kiwisolver:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"lakers-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lazy_loader:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"lazy-object-proxy":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],libcst:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lightgbm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],logbook:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lxml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],lz4:[0,1,2,3,4,5,6,7],MarkupSafe:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"matplotlib-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"memory-allocator":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],micropip:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],mmh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"more-itertools":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],mpmath:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],msgpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],msgspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],msprime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],multidict:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],munch:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],mypy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],narwhals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ndindex:[0,1,2,3,4,5,6,7],netcdf4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],networkx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],newick:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],nh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],nlopt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],nltk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],numcodecs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],numpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],openai:[0,1,2,3,4,5,6,7,8,9,10],"opencv-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],optlang:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],orjson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],packaging:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pandas:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],parso:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],patsy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pcodec:[0,1,2,3,4,5,6,7,8,9,10,11,12],peewee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pi-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Pillow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pillow-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pkgconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],platformdirs:[0,1,2,3,4,5,6,7],pluggy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ply:[0,1,2,3,4,5,6,7],pplpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],primecountpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],prompt_toolkit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],propcache:[0,1,2,3,4,5,6,7],protobuf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pure-eval":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyclipper:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pycparser:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pycryptodome:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pydantic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pydantic_core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyerfa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pygame-ce":[0,1,2,3,8,9,10,11,12,13,14,15],Pygments:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyheif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyiceberg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyinstrument:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pylimer-tools":[0,1,2,3],PyMuPDF:[0,1,2,3,4,5,6],pynacl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pyodide-http":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pyodide-unix-timezones":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyparsing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyrsistent:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pysam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyshp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pytaglib:[0,1,2,3,4,5,6,7],pytest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pytest-asyncio":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"pytest-benchmark":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pytest_httpx:[0,1,2,3,4,5,6,7,8,9,10],"python-calamine":[0,1,2,3],"python-dateutil":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-flint":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-magic":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-sat":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"python-solvespace":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pytz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pywavelets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyxel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyxirr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],pyyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rasterio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rateslib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rebound:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],reboundx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],referencing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],regex:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],requests:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],retrying:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rich:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],river:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],RobotRaconteur:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"rpds-py":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"ruamel.yaml":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],rustworkx:[0,1,2,3,4,5,6,7],"scikit-image":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"scikit-learn":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],scipy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],screed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],setuptools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],shapely:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],simplejson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sisl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],six:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"smart-open":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sniffio:[0,1,2,3,4,5,6,7,8,9,10],sortedcontainers:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],soundfile:[0,1,2,3,4,5,6,7],soupsieve:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sourmash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],soxr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sparseqr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sqlalchemy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"stack-data":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],starlette:[0,1,2,3],statsmodels:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],strictyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],svgwrite:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],swiglpk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sympy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],termcolor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],texttable:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],texture2ddecoder:[0,1,2,3,4,5,6,7],threadpoolctl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tiktoken:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tomli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tomli-w":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],toolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tqdm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],traitlets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],traits:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter-go":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter-java":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"tree-sitter-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tskit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"typing-extensions":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tzdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ujson:[0,1,2,3,4,5,6,7],uncertainties:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],unyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],urllib3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"vega-datasets":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],vrplib:[0,1,2,3],wcwidth:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],webencodings:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],wordcloud:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],wrapt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xgboost:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xlrd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xxhash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xyzservices:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],yarl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],yt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zengl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zfpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zstandard:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"arro3-compute":[8,9,10,11,12,13,14,15],"arro3-core":[8,9,10,11,12,13,14,15],"arro3-io":[8,9,10,11,12,13,14,15],Cartopy:[8,9,10,11,12,13,14,15],duckdb:[8,9,10,11,12,13,14,15],gensim:[8,9,10,11,12,13,14,15],geopandas:[8,9,10,11,12,13,14,15],"matplotlib-pyodide":[8,9,10,11,12,13,14,15],mne:[8,9,10,11,12,13,14,15],osqp:[8,9,10],polars:[8,9,10,11,12,13,14,15],pyarrow:[8,9,10,11,12,13,14],pyproj:[8,9,10,11,12,13,14,15],"rust-abi-test":[8,9,10,11,12,13,14,15],"rust-panic-test":[8,9,10,11,12,13,14,15],zarr:[8,9,10,11,12,13,14,15]}},{has:(e,t)=>e.v.includes(t),get:(e,t)=>{const n=e.v.indexOf(t);return new Proxy(e.p,{has:(e,t)=>e[t]?.includes(n)})}}),cr=Object.freeze({__proto__:null,default:ir});const lr="ruby-wasm-wasi",pr=lr.replace(/\\W+/g,"_");var ur={type:lr,experimental:!0,module:(e="2.8.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\\/browser\\/\\+esm$/,"/ruby.wasm");const s=await en(n).arrayBuffer(),o=await WebAssembly.compile(s),{vm:a}=await e(o);return t.files&&await dn(this,a,t.files,r),t.fetch&&await ln(this,a,t.fetch,r),t.js_modules&&await fn(t.js_modules,r),a},registerJSModule(e,t,n){t=t.replace(/\\W+/g,"__");const r=`__module_${pr}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(xt(t),...n),runAsync:(e,t,...n)=>e.evalAsync(xt(t),...n),async runEvent(e,t,n){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${pr}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${lr}`)}};var dr={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=At(),c=await i((new e).createEngine());return c.global.getTable(t.Base,e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)}),n.files&&await dn(this,c,n.files,s),n.fetch&&await ln(this,c,n.fetch,s),n.js_modules&&await fn(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(xt(t),...n)}catch(t){_t.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(xt(t),...n)}catch(t){_t.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){_t.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(sn(e,rn(t)),t=on(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const fr=new WeakMap,hr=new FinalizationRegistry(e=>e()),yr=async(e,t)=>{const{shelter:n,destroy:r,io:s}=fr.get(e),{output:o,result:a}=await n.captureR(xt(t));for(const{type:e,data:t}of o)s[e](t);return hr.register(a,r),a};var mr={type:"webr",experimental:!0,module:(e="0.5.8")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=At(),o=new e.WebR;await s(o.init().then(()=>o));const a=await new o.Shelter;return fr.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:_t.get(o)}),t.files&&await dn(this,o,t.files,r),t.fetch&&await ln(this,o,t.fetch,r),t.js_modules&&await fn(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:yr,runAsync:yr,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>t,writeFile:()=>{}};const gr=new Map,wr=new Map,br=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=gr.get(n),o=/^(?:\\.?\\.?\\/|[a-z0-9-]+:\\/\\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then(r=>(wr.set(t,e),s(r,e,n,o)))}}),_r=e=>{for(const t of[].concat(e.type))gr.set(t,e)};for(const e of[Xt,Jn,sr,ir,ur,dr,mr])_r(e);const{parse:Ar}=JSON,kr=(e,t,n={})=>{const[r,s]=((e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[Ft(e),n]})(e,t);return"json"===s?n=en(r).json():"toml"===s?n=en(r).text().then(Tn):"string"===s?n=vr(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=vr(n)),[n,e=r]},vr=e=>{try{return Ar(e)}catch(t){return Tn(e)}},xr="BeforeRun",Er="AfterRun",jr=[`code${xr}`,`code${xr}Async`,`code${Er}`,`code${Er}Async`],Sr=["onWorker","onReady",`on${xr}`,`on${xr}Async`,`on${Er}`,`on${Er}Async`];function $r(e,t){const{run:n,runAsync:r}=gr.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const Br=(e,t,n,r,s,o)=>{if(s||o){const a=$r.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Pr,Mr,Fr;const Rr=(e,t)=>{addEventListener(e,t||(async t=>{try{await Pr,Mr(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{proxy:Tr,sync:Dr,native:Lr,window:Or,isWindowProxy:Cr,ffi:Ir}=await(async e=>{const t=await wt({...e,decoder:e?.decoder||he}),n=qe({...e,buffer:!0,reflect:t.proxy[l],timeout:t.ffi_timeout});return t.proxy[p]=n.reflect,{...t,window:n.global,isWindowProxy:n.isProxy,ffi:{assign:n.assign,direct:n.direct,evaluate:n.evaluate,gather:n.gather,query:n.query}}})({transfer:!1,transform:e=>Fr?Fr(e):e}),zr={polyfill:Dr,sync:Tr,window:Lr||Dr?Or:null,isWindowProxy:Cr,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};Rr("message",({data:{options:e,config:t,configURL:n,code:r,hooks:s}})=>{Pr=(async()=>{try{const{id:o,tag:c,type:l,custom:p,version:u,config:d,async:f}=e,h=((e,t="")=>`${e}@${t}`.replace(/@$/,""))(l,u),y=await((e,t,n,r={})=>(t&&([r,t]=kr(t,n,r)),Mt(r).then(n=>br[e](n,t))))(h,t,n,d),{js_modules:m}=wr.get(h),g=m?.main,w=St(gr.get(l)),b=((e,t,n,r)=>({type:t,config:n,interpreter:r,io:_t.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}))(w,p||l,d||{},y);let _="run";if(f&&(_+="Async"),s){let e,t,n="",r="";for(const e of jr){const t=s[e];if(t){const s=e.endsWith("Async");(s&&f||!s&&!f)&&(e.startsWith("codeBefore")?n=t:r=t)}}(n||r)&&((e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,Lt(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Lt(t),...o);return r&&await s(e,r,...o),a}})(w,_,n,r);for(const n of Sr.slice(2)){const r=s[n];if(r){const s=n.endsWith("Async");if(s&&f||!s&&!f){const s=Dt(r);n.startsWith("onBefore")?e=s:t=s}}}Br(w,b,zr,f,e,t)}let A,k,v,x=null,E="";(Lr||Dr)&&(({CustomEvent:A,document:k}=Or),x=o&&k.getElementById(o)||null,v=e=>Tt(x,p||l,e,!0,A));const j=Jt(Or,Tr,g,t);if(((e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,zt(r,e));t.registerJSModule(n,s,r)})(l,w,y,j),w.registerJSModule(y,"polyscript",{IDBMap:a,IDBMapSync:i,xworker:zr,currentScript:x,config:b.config,js_modules:j,ffi:Ir,get target(){return!E&&x&&("SCRIPT"===c?x.after(jt(Or.document.createElement(`script-${p||l}`),{id:E=`${o}-target`})):(E=o,x.replaceChildren(),x.style.display="block")),E}}),Mr=w.runEvent.bind(w,y),Fr=w.transform.bind(w,y),x&&v("ready"),s?.onReady&&Dt(s?.onReady).call(w,$r.call(w,b,y),zr),await w[_](y,r),["micropython","pyodide"].includes(w.type)){const e="polyscript",t=`__${e}_workers__`,n="__export__";y.runPython([`import js as ${t}`,`${t}.${t} = "${n}" in locals() and ${n} or []`,`del ${t}`].join("\\n"));const r=[...globalThis[t]];delete globalThis[t],r.length&&y.runPython([`from ${e} import xworker as ${t}`,...r.map(e=>`${t}.sync.${e} = ${e}`),`del ${t}`].join("\\n"))}return x&&v("done"),postMessage("polyscript:done"),y}catch(e){postMessage(e)}})(),Rr("error"),Rr("message"),Rr("messageerror"),(Lr||Dr)&&addEventListener("py:progress",({type:e,detail:t})=>{Or.dispatchEvent(new Or.CustomEvent(e,{detail:t}))})});\n'.replace(Qr,es)],{type:"text/javascript"})),...e))({serviceWorker:r?.serviceWorker||r?.service_worker,reflected_ffi_timeout:globalThis.reflected_ffi_timeout??-1}),{postMessage:a}=o,i=this instanceof hs;let l=!1;const p=B(o.proxy,{importJS:G,importCSS:K,isStuck:()=>l,notStuck(){l=!1}}),u=t();let d=c(n).text().then(e=>{const t=i?this.toJSON():void 0;a.call(o,{options:r,config:s,code:e,hooks:t})}).then(()=>{d={then:e=>e()}});return S(o,{unstuck:{value(){l=!0}},sync:{value:p},ready:{value:u.promise},postMessage:{value:(e,...t)=>d.then(()=>a.call(o,e,...t))},onerror:{writable:!0,configurable:!0,value:console.error}}),o.addEventListener("message",e=>{const{data:t}=e,n=t instanceof Error;(n||"polyscript:done"===t)&&(e.stopImmediatePropagation(),n?(u.reject(t),o.onerror(x(e,{type:{value:"error"},error:{value:t}}))):u.resolve(o))}),i&&this.onWorker?.(this.interpreter,o),o};const ws="Invalid content";var As=e=>{const{src:t,worker:n}=e.attributes;if(n){let{value:r}=n;if(r)throw new SyntaxError("Invalid worker attribute");if(r=t?.value,!r){if(t)throw new SyntaxError("Invalid worker attribute");if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");r=E(t),console.warn(`Deprecated: use <script type="${o}"> for an always safe content parsing:\n`,r)}else r=e.textContent;return URL.createObjectURL(new Blob([k(r)],{type:"text/plain"}))}return r}if(t&&e.textContent.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*(?:\/\/|#).*/gm,"").trim())throw new SyntaxError(ws)};const bs=(e,t)=>{const n=(e=>{let t=e;for(;t.parentNode;)t=t.parentNode;return t})(e);return n.getElementById(t)||((e,t=document)=>t.querySelector(e))(t,n)},vs=new WeakMap,ks={get(){let e=vs.get(this);return e||(e=document.createElement(`${this.type}-script`),vs.set(this,e),Ss(this)),e},set(e){"string"==typeof e?vs.set(this,bs(this,e)):(vs.set(this,e),Ss(this))}},Es=new WeakMap,js=new Map,Bs=(e,t)=>{const n=e?.value;return n?t+n:""},xs=(e,t,n,r,s,o,a=e)=>{if(!js.has(t)){const i={interpreter:ls(n,s,o),queue:D(),XWorker:gs(e,r)};js.set(t,i),js.has(e)||js.set(e,i),js.has(a)||js.set(a,i)}return js.get(t)},Ss=async e=>{if(Es.has(e)){const{target:t}=e;t&&(e.closest("head")?document.body.append(t):e.after(t))}else{const{attributes:{config:t,env:n,name:r,target:s,version:o,"service-worker":a},src:i,type:l}=e,p=!X(e),u=o?.value,d=cs(l,u);let f=Bs(t,"|");const m=Bs(n,"")||`${d}${f}`;f=f.slice(1);const _=As(e);if(_){const t=new(gs(l,u))(_,{...M(e,l),version:u,async:p,config:f,serviceWorker:a?.value});Es.set(R(e,"xworker",{value:t}),{xworker:t});const n=r?.value;return void(n&&Tn[n].resolve(t.ready))}const g=Bs(s,""),w=xs(l,m,d,u,f);Es.set(R(e,"target",ks),w),g&&vs.set(e,bs(e,g));const A=i?c(i).text():e.textContent;w.queue=w.queue.then(()=>(async(e,t,n,r)=>{const{type:s}=e,o=jn.get(s);o.experimental&&console.warn(`The ${s} interpreter is experimental`);const[a,i]=await $([Es.get(e).interpreter,t]);try{J(s,o,a,U),o.registerJSModule(a,"polyscript",{IDBMap:y,IDBMapSync:h,XWorker:n,currentScript:e,js_modules:U,workers:Fn}),O(e,s,"ready"),R(document,"currentScript",{configurable:!0,get:()=>e});const t=O.bind(null,e,s,"done");let l=o[r?"runAsync":"run"](a,i);return r&&(l=await l),t(),l}finally{delete document.currentScript}})(e,A,w.XWorker,p))}},Rs=new Proxy(x(null),{get:(e,t)=>new Promise(queueMicrotask).then(()=>Cs(t))}),Cs=async e=>{if(js.has(e)){const{interpreter:t,queue:n}=js.get(e);return(await $([t,n]))[0]}const t=js.size?`Available interpreters are: ${[...js.keys()].map(e=>`"${e}"`).join(", ")}.`:"There are no interpreters in this page.";throw new Error(`The interpreter "${e}" was not found. ${t}`)},$s=async e=>{const{type:t,currentTarget:n}=e;if(Sn.length)for(let{name:r,value:s,ownerElement:o}of Dn(`./@*[${Sn.map(e=>`name()="${e}${t}"`).join(" or ")}]`,n)){r=r.slice(0,-(t.length+1));const n=await Cs(o.getAttribute(`${r}-env`)||r);jn.get(r).runEvent(n,s,e)}},Ds=e=>{if(Sn.length)for(let{name:t,ownerElement:n}of Dn(`.//@*[${Sn.map(e=>`starts-with(name(),"${e}")`).join(" or ")}]`,e)){const e=t.lastIndexOf("-"),r=t.slice(e+1);"env"!==r&&(n.addEventListener(r,$s),"disabled"in n&&!n.disabled&&(n.disabled=!0,Rs[t.slice(0,e)].then(()=>{n.disabled=!1})))}},Ts=gs(),Ps=[],Fs=new Map,Ms=new Map,Os=new Map,Ls=async e=>{for(const t of Ps)if(e.matches(t)){const n=Ms.get(t),r=Ns.get(n),{resolve:s}=Os.get(n),{options:o,known:a}=r;if(a.has(e))return;a.add(e);for(const[t,n]of Fs)e.matches(t)&&await n(e);const{interpreter:i,configURL:l,config:c,version:p,env:u,onerror:d,hooks:f}=o;let m;try{const t=As(e);if(t){let r=p,o=l,a=e.getAttribute("config")||c||{};if(!r||!a){const[e,t]=as(a,l);a=await e,o=t,r=a.version||a.interpreter,r&&/\.m?js$/.test(r)&&(r=new URL(r,o).href)}Number.isSafeInteger(a?.experimental_ffi_timeout)&&(globalThis.reflected_ffi_timeout=a.experimental_ffi_timeout);const u=Ts.call(new hs(null,f),t,{...M(e,n),configURL:o,version:r,type:i,custom:n,config:a,async:!X(e),serviceWorker:e.getAttribute("service-worker")});R(e,"xworker",{value:u}),s({type:n,xworker:u});const d=e.getAttribute("name");return void(d&&Tn[d].resolve(u.ready))}}catch(e){m=e}const _=cs(i,p),g=u||`${_}${c?`|${c}`:""}`,{interpreter:w,XWorker:A}=xs(n,g,_,p,c,l,i),b=await w,v=x(jn.get(i)),E=new hs(b,f),j=function(...e){return A.apply(E,e)},B={...L(v,n,structuredClone(Bn.get(_)),b),XWorker:j};J(i,v,b,U),v.registerJSModule(b,"polyscript",{IDBMap:y,IDBMapSync:h,XWorker:j,config:B.config,currentScript:n.startsWith("_")?null:e,js_modules:U,workers:Fn});for(const t of["Run","RunAsync"]){let n,r,s="",o="";for(const e of fs){const n=f?.main?.[e];n&&e.endsWith(t)&&(e.startsWith("codeBefore")?s=k(n()):o=k(n()))}(s||o)&&I(v,`r${t.slice(1)}`,s,o);for(let e=2;e<ms.length;e++){const s=ms[e],o=f?.main?.[s];o&&s.endsWith(t)&&(s.startsWith("onBefore")?n=o:r=o)}ys(v,B,e,t.endsWith("Async"),n,r)}r.queue=r.queue.then(()=>(s(B),m&&d?.(m,e),f?.main?.onReady?.(B,e)))}},Ns=new Map;let Is=0;const Ws=e=>(Os.has(e)||Os.set(e,t()),Os.get(e).promise),[{customObserver:Hs,define:Us,whenDefined:zs,env:qs,Hook:Js,XWorker:Gs},Ks]=e("polyscript",{customObserver:Fs,define:(e,t)=>{let n=null==e;if(n)e="_ps"+Is++;else if(jn.has(e)||Ns.has(e))throw new Error(`<script type="${e}"> already registered`);if(!jn.has(t?.interpreter))throw new Error("Unspecified interpreter");jn.set(e,jn.get(t.interpreter));const r=[`script[type="${e}"]`];if(Ws(e),n){const{hooks:n}=t,r=n?.main?.onReady;t={...t,hooks:{...n,main:{...n?.main,onReady(t,n){Ps.splice(Ps.indexOf(e),1),jn.delete(e),Ns.delete(e),Os.delete(e),n.remove(),r?.(t)}}}},document.head.append(B(document.createElement("script"),{type:e}))}else r.push(`${e}-script`),Sn.push(`${e}-`);for(const t of r)Ms.set(t,e);Ps.push(...r),Ns.set(e,{options:B({env:e},t),known:new WeakSet,queue:Promise.resolve()}),n||Ds(document),$n(r.join(",")).forEach(Ls)},whenDefined:Ws,env:Rs,Hook:hs,XWorker:Ts});if(!Ks){const e=new MutationObserver(e=>{const n=xn.join(",");for(const{type:r,target:s,attributeName:o,addedNodes:a}of e){if("attributes"===r){const e=o.lastIndexOf("-")+1;if(e){const t=o.slice(0,e);for(const n of Sn)if(t===n){const t=o.slice(e);if("env"!==t){const e=s.hasAttribute(o)?"add":"remove";s[`${e}EventListener`](t,$s)}break}}continue}for(const e of a)1===e.nodeType&&(Ds(e),n&&e.matches(n)?Ss(e):t(n,e,!0))}}),t=(e,t,n)=>{e&&$n(e,t).forEach(Ss),(e=Ps.join(","))&&(n&&Ls(t),$n(e,t).forEach(Ls))},n=t=>(e.observe(t,{childList:!0,subtree:!0,attributes:!0}),t),{attachShadow:r}=Element.prototype;B(Element.prototype,{attachShadow(e){return n(r.call(this,e))}}),queueMicrotask(()=>{Ds(n(document)),t(xn.join(","),document,!1)})}var Vs=new Map([["py","pyodide"],["mpy","micropython"]]);const Xs=[];for(const[e]of Vs){const n=[`script[type="${e}"]`,`${e}-script`];for(const r of document.querySelectorAll(n.join(","))){const{promise:n,resolve:s}=t();Xs.push(n),r.addEventListener(`${e}:done`,s,{once:!0})}}Promise.all(Xs).then(()=>{dispatchEvent(new Event("py:all-done"))});var Ys={codemirror:()=>Promise.resolve().then(function(){return Uo}),"deprecations-manager":()=>import("./deprecations-manager-HQLYNCYn.js"),donkey:()=>import("./donkey-B3F8VdSV.js"),error:()=>import("./error-DS_5_C5_.js"),"py-editor":()=>import("./py-editor-C0XF2rwE.js"),"py-game":()=>import("./py-game-eWNz96mt.js"),"py-terminal":()=>import("./py-terminal-VtavPj1S.js")};const Zs={CONFLICTING_CODE:"PY0409",BAD_CONFIG:"PY1000",FETCH_ERROR:"PY0001",FETCH_UNAUTHORIZED_ERROR:"PY0401",FETCH_FORBIDDEN_ERROR:"PY0403",FETCH_NOT_FOUND_ERROR:"PY0404",FETCH_SERVER_ERROR:"PY0500",FETCH_UNAVAILABLE_ERROR:"PY0503"};class Qs extends Error{constructor(e,t="",n="text"){super(`(${e}): ${t}`),this.errorCode=e,this.messageType=n,this.name="UserError"}}class eo extends Qs{constructor(e,t){super(e,t),this.name="FetchError"}}const to=e=>e.text();async function no(e,t){let n;try{n=await fetch(e,t)}catch(t){const n=t;let r;throw r=e.startsWith("http")?`Fetching from URL ${e} failed with error '${n.message}'. Are your filename and path correct?`:'Polyscript: Access to local files\n (using [[fetch]] configurations in &lt;py-config&gt;)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style="text-decoration: underline;" href="https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062">this reference</a>\n on starting a simple webserver with Python.\n ',new eo(Zs.FETCH_ERROR,r)}if(!n.ok){const t=`Fetching from URL ${e} failed with error ${n.status} (${n.statusText}). Are your filename and path correct?`;switch(n.status){case 404:throw new eo(Zs.FETCH_NOT_FOUND_ERROR,t);case 401:throw new eo(Zs.FETCH_UNAUTHORIZED_ERROR,t);case 403:throw new eo(Zs.FETCH_FORBIDDEN_ERROR,t);case 500:throw new eo(Zs.FETCH_SERVER_ERROR,t);case 503:throw new eo(Zs.FETCH_UNAVAILABLE_ERROR,t);default:throw new eo(Zs.FETCH_ERROR,t)}}return n}const{BAD_CONFIG:ro,CONFLICTING_CODE:so}=Zs,oo=async(e,t)=>{let n=e?.trim(),r="",s=!1,o=/^{/.test(n)&&/}$/.test(n);if(!o&&/\.(\w+)(?:\?\S*)?$/.test(n)){const e=RegExp.$1;"json"===e&&"toml"!==t?o=!0:"toml"===e&&"json"!==t?s=!0:((e,t="")=>{let n=`(${ro}): Invalid URL: ${e}`;throw t&&(n+=`\nexpected ${t} content`),new Error(n)})(n,t),r=n,n=(await no(r).then(to)).trim()}return{json:o,toml:s||!o&&!!n,text:n,url:r}},ao=e=>new Error(`(${so}): ${e}`),io=(e,t=location.href)=>new URL(e,t).href,lo=(e,t,{message:n})=>{let r=`(${ro}): Invalid ${e}`;return t&&(r+=` @ ${t}`),new SyntaxError(`${r}\n${n}`)},co=new Map;for(const[e]of Vs){let t,n,r,s,o,a,i,l,c=$n(`${e}-config`),p=$n([`script[type="${e}"][config]:not([worker])`,`${e}-script[config]:not([worker])`].join(","));if(c.length>1?r=ao(`Too many ${e}-config`):c.length&&p.length?r=ao(`Ambiguous ${e}-config VS config attribute`):c.length?([l]=c,o=l.getAttribute("src")||l.textContent,a=l.getAttribute("type"),i=l.getAttribute("config-parser")):p.length&&([l,...p]=p,o=l.getAttribute("config"),i=l.getAttribute("config-parser"),p.some(e=>e.getAttribute("config")!==o)&&(r=ao("Unable to use different configs on main"))),!r&&o)try{const{json:e,toml:t,text:l,url:c}=await oo(o,a);if(c&&(s=io(c)),o=l,e||"json"===a)try{n=JSON.parse(l)}catch(e){r=lo("JSON",c,e)}else if(t||"toml"===a)try{const e=i?await import(i):await import("./toml-Blg7Izee.js"),t=e.parse||e.default;n=t(l)}catch(e){r=lo("TOML",c,e)}}catch(e){r=e}t=async()=>{const e=[];for(const[t,s]of Object.entries(Ys))r?"error"===t&&s().then(({notify:e})=>e(r.message)):n?.plugins?.includes(`!${t}`)?"error"===t&&e.push(s().then(({notOnDOM:e})=>e())):e.push(s().then(({default:e})=>e));return await Promise.all(e)},Number.isSafeInteger(n?.experimental_ffi_timeout)&&(globalThis.reflected_ffi_timeout=n?.experimental_ffi_timeout),co.set(e,{config:n,configURL:s,plugins:t,error:r})}const po=e=>{e.preventDefault(),e.stopImmediatePropagation()},uo="@pyscript.fs",fo="storage permissions not granted",mo=new y(uo),_o=async e=>{if(!("showDirectoryPicker"in globalThis))return Promise.reject(new Error("showDirectoryPicker is not supported"));const{promise:n,resolve:r,reject:s}=t(),o={id:"pyscript",mode:"readwrite",...e};e.hint&&(o.startIn=e.hint);const a=async()=>{try{const e=await showDirectoryPicker(o);if("granted"===await e.requestPermission(o))return r(e),!0}catch({message:e}){console.warn(e)}return!1};if(navigator.userActivation?.isActive)await a()||s(new Error(fo));else{const e=B(document.createElement("dialog"),{className:"pyscript-fs",innerHTML:["<strong>ℹ️ Persistent FileSystem</strong><hr>","<p><small>PyScript would like to access a local folder.</small></p>","<div><button title='ok'>✅ Authorize</button>","<button title='cancel'>❌</button></div>"].join("")}),[t,n]=$n("button",e);t.addEventListener("click",async t=>{po(t),await a()&&e.close()}),n.addEventListener("click",async t=>{po(t),s(new Error(fo)),e.close()}),document.body.appendChild(e).showModal()}return n};var yo=Object.freeze({__proto__:null,ERROR:fo,NAMESPACE:uo,getFileSystemDirectoryHandle:_o,idb:mo}),ho={is_pyterminal:()=>!1,sleep:e=>new Promise(t=>setTimeout(t,1e3*e)),getFSHandler:e=>_o(e),storeFSHandler:async(e,t={})=>!!await mo.has(e)||_o(t).then(async n=>(await mo.set(e,{handler:n,options:t}),!0),()=>!1),async deleteFSHandler(e){const t=await mo.has(e);return t&&await mo.delete(e),t}};const go=e=>{R(document,"currentScript",{configurable:!0,get:()=>e})},wo=()=>{delete document.currentScript};var Ao=async(e,t,n,r)=>{const s=r.endsWith("Async");(r.startsWith("onBefore")?go:wo)(n);for(const o of e(r))s?await o(t,n):o(t,n)};const bo=()=>!0,vo=e=>{throw new TypeError(e)},ko=(e,t)=>{const n=[];if(e)for(const t of e.split(/\s*\|\s*/))"object"===t?n.push(e=>null!==e&&typeof e===t):"null"===t?n.push(e=>null===e):n.push(e=>typeof e===t);if(t)for(const e of[].concat(t))n.push(t=>t instanceof e);switch(n.length){case 0:return bo;case 1:return n[0];default:return e=>n.some(t=>t(e))}},Eo=(e,t,n,r=vo)=>s=>{const o=[`Invalid ${typeof s} ${n}: expected `];e&&(o.push(e),t&&o.push(" or ")),t&&(o.push("an instanceof "),o.push([].concat(t).map(({name:e})=>e).join(" | "))),r(o.join(""),s)},jo=(e=>t=>{const[n,r]=((e,t="value")=>{const n=e?.typeof,r=e?.instanceof;return[ko(n,r),Eo(n,r,t,e?.onerror)]})(t);return class extends e{add(e){return n(e)?super.add(e):r(e)}}})(Set);function Bo(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}const{entries:xo}=Object,So=["import os as _os","from pathlib import Path as _Path","_path = None"],Ro=new class extends Array{#l=!1;#c;#p;constructor(e,...t){super(),this.#p=e,this.#c=t}push(...e){return this.#l&&super.push(...e),this.#p.push(...e)}path(e){for(const t of this.#c)if(this.#l=e.startsWith(t))break}}(So,"-"),Co=(e,t)=>{for(const[n,r]of xo(t))if(Ro.path(`${e}/${n}`),Ro.push(`_path = _Path("${e}/${n}")`),"string"==typeof r){const e=JSON.stringify(r);Ro.push(`_path.write_text(${e},encoding="utf-8")`)}else Ro.push(`if not _os.path.exists("${e}/${n}"):`),Ro.push(" _path.mkdir(parents=True, exist_ok=True)"),Co(`${e}/${n}`,r)};Co(".",{pyscript:{"__init__.py":"from polyscript import lazy_py_modules as py_import\nfrom pyscript.context import RUNNING_IN_WORKER,PyWorker,config,current_target,document,js_import,js_modules,sync,window\nfrom pyscript.display import HTML,display\nfrom pyscript.fetch import fetch\nfrom pyscript.storage import Storage,storage\nfrom pyscript.websocket import WebSocket\nfrom pyscript.events import when,Event\nif not RUNNING_IN_WORKER:from pyscript.workers import create_named_worker,workers","context.py":"_A=None\nimport json,sys,js\nfrom polyscript import config as _polyscript_config,js_modules\nfrom pyscript.util import NotSupported\nRUNNING_IN_WORKER=not hasattr(js,'document')\nconfig=json.loads(js.JSON.stringify(_polyscript_config))\nif isinstance(config,str):config={}\njs_import=_A\nwindow=_A\ndocument=_A\nsync=_A\nif'MicroPython'in sys.version:config['type']='mpy'\nelse:config['type']='py'\nclass _JSModuleProxy:\n\tdef __init__(A,name):A.name=name\n\tdef __getattr__(B,field):\n\t\tA=field\n\t\tif not A.startswith('_'):return getattr(getattr(js_modules,B.name),A)\nfor module_name in js.Reflect.ownKeys(js_modules):sys.modules[f\"pyscript.js_modules.{module_name}\"]=_JSModuleProxy(module_name)\nsys.modules['pyscript.js_modules']=js_modules\nif RUNNING_IN_WORKER:\n\timport polyscript;PyWorker=NotSupported('pyscript.PyWorker','pyscript.PyWorker works only when running in the main thread')\n\ttry:window=polyscript.xworker.window;document=window.document;js.document=document;js_import=window.Function('return (...urls) => Promise.all(urls.map((url) => import(url)))')()\n\texcept:sab_error_message='Unable to use `window` or `document` in worker. This requires SharedArrayBuffer support. See: https://docs.pyscript.net/latest/faq/#sharedarraybuffer';js.console.warn(sab_error_message);window=NotSupported('pyscript.window',sab_error_message);document=NotSupported('pyscript.document',sab_error_message)\n\tsync=polyscript.xworker.sync\n\tdef current_target():return polyscript.target\nelse:\n\timport _pyscript;from _pyscript import PyWorker as _PyWorker;from pyscript.ffi import to_js;js_import=_pyscript.js_import\n\tdef PyWorker(url,**A):return _PyWorker(url,to_js(A))\n\twindow=js;document=js.document;sync=NotSupported('pyscript.sync','pyscript.sync works only when running in a worker')\n\tdef current_target():return _pyscript.target","display.py":"_I='__repr__'\n_H='savefig'\n_G='application/json'\n_F='image/svg+xml'\n_E='application/javascript'\n_D='image/jpeg'\n_C='text/html'\n_B='image/png'\n_A='text/plain'\nimport base64,html,io\nfrom collections import OrderedDict\nfrom pyscript.context import current_target,document,window\nfrom pyscript.ffi import is_none\ndef _render_image(mime,value,meta):\n\tA=value\n\tif isinstance(A,bytes):A=base64.b64encode(A).decode('utf-8')\n\tB=''.join([f' {A}=\"{B}\"'for(A,B)in meta.items()]);return f'<img src=\"data:{mime};base64,{A}\"{B}>'\n_MIME_TO_RENDERERS={_A:lambda v,m:html.escape(v),_C:lambda v,m:v,_B:lambda v,m:_render_image(_B,v,m),_D:lambda v,m:_render_image(_D,v,m),_F:lambda v,m:v,_G:lambda v,m:v,_E:lambda v,m:f\"<script>{v}<\\\\/script>\"}\n_METHOD_TO_MIME=OrderedDict([(_H,_B),('_repr_png_',_B),('_repr_jpeg_',_D),('_repr_svg_',_F),('_repr_html_',_C),('_repr_json_',_G),('_repr_javascript_',_E),(_I,_A)])\nclass HTML:\n\tdef __init__(A,html):A._html=html\n\tdef _repr_html_(A):return A._html\ndef _get_representation(obj,method):\n\tB=method;A=obj\n\tif B==_I:return repr(A)\n\tif not hasattr(A,B):return\n\tif B==_H:C=io.BytesIO();A.savefig(C,format='png');C.seek(0);return base64.b64encode(C.read()).decode('utf-8')\n\treturn getattr(A,B)()\ndef _get_content_and_mime(obj):\n\tC=obj\n\tif isinstance(C,str):return html.escape(C),_A\n\tE=_get_representation(C,'_repr_mimebundle_')\n\tif E:\n\t\tif isinstance(E,tuple):F,G=E\n\t\telse:F,G=E,{}\n\t\tfor(B,A)in F.items():\n\t\t\tif B in _MIME_TO_RENDERERS:\n\t\t\t\tD=G.get(B,{})\n\t\t\t\tif isinstance(A,tuple):A,H=A;D.update(H)\n\t\t\t\treturn _MIME_TO_RENDERERS[B](A,D),B\n\tfor(I,B)in _METHOD_TO_MIME.items():\n\t\tif B not in _MIME_TO_RENDERERS:continue\n\t\tA=_get_representation(C,I)\n\t\tif A is None:continue\n\t\tD={}\n\t\tif isinstance(A,tuple):A,D=A\n\t\treturn _MIME_TO_RENDERERS[B](A,D),B\n\twindow.console.warn(f\"Object {type(C).__name__} has no supported representation method. Using __repr__ as fallback.\");A=repr(C);return html.escape(A),_A\ndef _write_to_dom(element,value,append):\n\tC=element;B,D=_get_content_and_mime(value)\n\tif not B.strip():return\n\tif append:A=document.createElement('div');C.append(A)\n\telse:A=C\n\tif D in(_E,_C):A.append(document.createRange().createContextualFragment(B))\n\telse:A.innerHTML=B\ndef display(*D,target=None,append=True):\n\tC=append;A=target\n\tif isinstance(A,str):A=A[1:]if A.startswith('#')else A\n\telif is_none(A):A=current_target()\n\tB=document.getElementById(A)\n\tif is_none(B):raise ValueError(f\"Cannot find element with id='{A}' in the page.\")\n\tif B.tagName=='SCRIPT'and hasattr(B,'target'):B=B.target\n\tif not C:B.replaceChildren()\n\tfor E in D:_write_to_dom(B,E,C)","events.py":"import asyncio,inspect\nfrom functools import wraps\nfrom pyscript.context import document\nfrom pyscript.ffi import create_proxy,to_js\nfrom pyscript.util import is_awaitable\nclass Event:\n\tdef __init__(A):A._listeners=[]\n\tdef trigger(C,result):\n\t\tB=result\n\t\tfor A in C._listeners:\n\t\t\tif is_awaitable(A):asyncio.create_task(A(B))\n\t\t\telse:A(B)\n\tdef add_listener(B,listener):\n\t\tA=listener\n\t\tif not callable(A):C='Listener must be callable.';raise ValueError(C)\n\t\tif A not in B._listeners:B._listeners.append(A)\n\tdef remove_listener(A,*B):\n\t\tif B:\n\t\t\tfor C in B:\n\t\t\t\ttry:A._listeners.remove(C)\n\t\t\t\texcept ValueError:pass\n\t\telse:A._listeners=[]\ndef when(event_type,selector=None,**C):\n\tB=selector;A=event_type\n\tif isinstance(A,str):\n\t\tif not B:raise ValueError('Selector required for DOM event handling.')\n\t\tD=_get_elements(B)\n\t\tif not D:raise ValueError(f\"No elements found for selector: {B}\")\n\tdef E(func):\n\t\tB=_create_wrapper(func)\n\t\tif isinstance(A,Event):A.add_listener(B)\n\t\telif isinstance(A,list)and all(isinstance(A,Event)for A in A):\n\t\t\tfor E in A:E.add_listener(B)\n\t\telse:\n\t\t\tfor F in D:F.addEventListener(A,create_proxy(B),to_js(C)if C else False)\n\t\treturn B\n\treturn E\ndef _get_elements(selector):\n\tA=selector;from pyscript.web import Element as B,ElementCollection as C\n\tif isinstance(A,str):return list(document.querySelectorAll(A))\n\telif isinstance(A,B):return[A._dom_element]\n\telif isinstance(A,C):return[A._dom_element for A in A]\n\telif isinstance(A,list):return A\n\telse:return[A]\ndef _create_wrapper(func):\n\tA=func;B=A\n\twhile hasattr(B,'__wrapped__'):B=B.__wrapped__\n\tE=inspect.signature(B);D=bool(E.parameters)\n\tif is_awaitable(A):\n\t\tif D:\n\t\t\tasync def C(event):return await A(event)\n\t\telse:\n\t\t\tasync def C(*B,**C):return await A()\n\telif D:\n\t\tdef C(event):return A(event)\n\telse:\n\t\tdef C(*B,**C):return A()\n\treturn wraps(A)(C)","fetch.py":"import json,js\nfrom pyscript.util import as_bytearray\nclass _FetchResponse:\n\tdef __init__(A,response):A._response=response\n\tdef __getattr__(A,attr):return getattr(A._response,attr)\n\tasync def arrayBuffer(B):\n\t\tA=await B._response.arrayBuffer()\n\t\tif hasattr(A,'to_py'):return A.to_py()\n\t\treturn memoryview(as_bytearray(A))\n\tasync def blob(A):return await A._response.blob()\n\tasync def bytearray(A):B=await A._response.arrayBuffer();return as_bytearray(B)\n\tasync def json(A):return json.loads(await A.text())\n\tasync def text(A):return await A._response.text()\nclass _FetchPromise:\n\tdef __init__(B,promise):A=promise;B._promise=A;A._response=None;A.arrayBuffer=B.arrayBuffer;A.blob=B.blob;A.bytearray=B.bytearray;A.json=B.json;A.text=B.text\n\t@staticmethod\n\tdef setup(promise,response):A=promise;A._response=_FetchResponse(response);return A._response\n\tasync def _get_response(A):\n\t\tif not A._promise._response:await A._promise\n\t\treturn A._promise._response\n\tasync def arrayBuffer(A):B=await A._get_response();return await B.arrayBuffer()\n\tasync def blob(A):B=await A._get_response();return await B.blob()\n\tasync def bytearray(A):B=await A._get_response();return await B.bytearray()\n\tasync def json(A):B=await A._get_response();return await B.json()\n\tasync def text(A):B=await A._get_response();return await B.text()\ndef fetch(url,**B):\n\tC=js.JSON.parse(json.dumps(B))\n\tdef D(response,*B):return _FetchPromise.setup(A,response)\n\tA=js.fetch(url,C).then(D);_FetchPromise(A);return A","ffi.py":"try:\n\timport js;from pyodide.ffi import create_proxy as _cp,to_js as _py_tjs,jsnull;from_entries=js.Object.fromEntries\n\tdef _to_js_wrapper(value,**A):\n\t\tB='dict_converter'\n\t\tif B not in A:A[B]=from_entries\n\t\treturn _py_tjs(value,**A)\nexcept:from jsffi import create_proxy as _cp;from jsffi import to_js as _to_js_wrapper;import js;jsnull=js.Object.getPrototypeOf(js.Object.prototype)\ndef create_proxy(func):return _cp(func)\ndef to_js(value,**A):return _to_js_wrapper(value,**A)\ndef is_none(value):A=value;return A is None or A is jsnull\ntry:from polyscript import ffi as _ffi;_assign=_ffi.assign;direct=_ffi.direct;gather=_ffi.gather;query=_ffi.query\nexcept:import js;_assign=js.Object.assign;direct=lambda source:source\ndef assign(source,*B):\n\tA=source\n\tfor C in B:_assign(A,to_js(C))\n\treturn A","flatted.py":"import json as _json\nclass _Known:\n\tdef __init__(A):A.key=[];A.value=[]\nclass _String:\n\tdef __init__(A,value):A.value=value\ndef _array_keys(value):\n\tA=[];B=0\n\tfor C in value:A.append(B);B+=1\n\treturn A\ndef _object_keys(value):\n\tA=[]\n\tfor B in value:A.append(B)\n\treturn A\ndef _is_array(value):return isinstance(value,(list,tuple))\ndef _is_object(value):return isinstance(value,dict)\ndef _is_string(value):return isinstance(value,str)\ndef _index(known,input,value):B=value;A=known;input.append(B);C=str(len(input)-1);A.key.append(B);A.value.append(C);return C\ndef _loop(keys,input,known,output):\n\tA=output\n\tfor B in keys:\n\t\tC=A[B]\n\t\tif isinstance(C,_String):_ref(B,input[int(C.value)],input,known,A)\n\treturn A\ndef _ref(key,value,input,known,output):\n\tB=known;A=value\n\tif _is_array(A)and A not in B:B.append(A);A=_loop(_array_keys(A),input,B,A)\n\telif _is_object(A)and A not in B:B.append(A);A=_loop(_object_keys(A),input,B,A)\n\toutput[key]=A\ndef _relate(known,input,value):\n\tB=known;A=value\n\tif _is_string(A)or _is_array(A)or _is_object(A):\n\t\ttry:return B.value[B.key.index(A)]\n\t\texcept:return _index(B,input,A)\n\treturn A\ndef _transform(known,input,value):\n\tB=known;A=value\n\tif _is_array(A):\n\t\tC=[]\n\t\tfor F in A:C.append(_relate(B,input,F))\n\t\treturn C\n\tif _is_object(A):\n\t\tD={}\n\t\tfor E in A:D[E]=_relate(B,input,A[E])\n\t\treturn D\n\treturn A\ndef _wrap(value):\n\tA=value\n\tif _is_string(A):return _String(A)\n\tif _is_array(A):\n\t\tB=0\n\t\tfor D in A:A[B]=_wrap(D);B+=1\n\telif _is_object(A):\n\t\tfor C in A:A[C]=_wrap(A[C])\n\treturn A\ndef parse(value,*C,**D):\n\tA=value;E=_json.loads(A,*C,**D);B=[]\n\tfor A in E:B.append(_wrap(A))\n\tinput=[]\n\tfor A in B:\n\t\tif isinstance(A,_String):input.append(A.value)\n\t\telse:input.append(A)\n\tA=input[0]\n\tif _is_array(A):return _loop(_array_keys(A),input,[A],A)\n\tif _is_object(A):return _loop(_object_keys(A),input,[A],A)\n\treturn A\ndef stringify(value,*D,**E):\n\tB=_Known();input=[];C=[];A=int(_index(B,input,value))\n\twhile A<len(input):C.append(_transform(B,input,input[A]));A+=1\n\treturn _json.dumps(C,*D,**E)","fs.py":"_B='pyscript'\n_A=None\nimport js\nfrom _pyscript import fs as _fs,interpreter\nfrom pyscript import window\nfrom pyscript.ffi import to_js\nfrom pyscript.context import RUNNING_IN_WORKER\nif RUNNING_IN_WORKER:from pyscript.context import sync as sync_with_worker;from polyscript import IDBMap\nmounted={}\nasync def _check_permission(details):A=details;B=A.handler;C=A.options;D=await B.queryPermission(C);return B if D=='granted'else _A\nasync def mount(path,mode='readwrite',root='',id=_B):\n\tC=path;js.console.warn('experimental pyscript.fs ⚠️');D=f\"{C}@{id}\"\n\tif C in mounted:\n\t\tfor H in mounted.keys():\n\t\t\tif H.startswith(f\"{C}@\")and H!=D:raise ValueError(f\"Path '{C}' is already mounted with a different ID. Unmount it first or use a different path.\")\n\tA=_A;B=_A;F={'id':id,'mode':mode}\n\tif root!='':F['startIn']=root\n\tif RUNNING_IN_WORKER:\n\t\tG=sync_with_worker.storeFSHandler(D,to_js(F))\n\t\tif isinstance(G,bool):E=G\n\t\telse:E=await G\n\t\tif E:\n\t\t\tJ=IDBMap.new(_fs.NAMESPACE);A=await J.get(D);B=await _check_permission(A)\n\t\t\tif B is _A:await js.Promise.resolve(sync_with_worker.getFSHandler(A.options));B=A.handler\n\t\telse:raise RuntimeError(_fs.ERROR)\n\telse:\n\t\tE=await _fs.idb.has(D)\n\t\tif E:\n\t\t\tA=await _fs.idb.get(D);B=await _check_permission(A)\n\t\t\tif B is _A:B=await _fs.getFileSystemDirectoryHandle(A.options)\n\t\telse:I=to_js(F);B=await _fs.getFileSystemDirectoryHandle(I);A={'handler':B,'options':I};await _fs.idb.set(D,to_js(A))\n\tmounted[C]=await interpreter.mountNativeFS(C,B)\nasync def sync(path):\n\tA=path\n\tif A not in mounted:raise KeyError(f\"Path '{A}' is not mounted. Use fs.mount() to mount it first.\")\n\tawait mounted[A].syncfs()\nasync def unmount(path):\n\tA=path\n\tif A not in mounted:raise KeyError(f\"Path '{A}' is not mounted. Cannot unmount.\")\n\tawait sync(A);interpreter._module.FS.unmount(A);del mounted[A]\nasync def revoke(path,id=_B):\n\tB=path;C=f\"{B}@{id}\"\n\tif RUNNING_IN_WORKER:A=sync_with_worker.deleteFSHandler(C)\n\telse:\n\t\tA=await _fs.idb.has(C)\n\t\tif A:A=await _fs.idb.delete(C)\n\tif A:\n\t\tinterpreter._module.FS.unmount(B)\n\t\tif B in mounted:del mounted[B]\n\treturn A","media.py":"from pyscript import window\nfrom pyscript.ffi import to_js\nclass Device:\n\tdef __init__(A,device):A._device_info=device\n\t@property\n\tdef id(self):return self._device_info.deviceId\n\t@property\n\tdef group(self):return self._device_info.groupId\n\t@property\n\tdef kind(self):return self._device_info.kind\n\t@property\n\tdef label(self):return self._device_info.label\n\tdef __getitem__(A,key):return getattr(A,key)\n\t@classmethod\n\tasync def request_stream(F,audio=False,video=True):\n\t\tE='video';D='audio';C=video;B=audio;A={}\n\t\tif isinstance(B,bool):A[D]=B\n\t\telif isinstance(B,dict):A[D]=B\n\t\tif isinstance(C,bool):A[E]=C\n\t\telif isinstance(C,dict):A[E]=C\n\t\treturn await window.navigator.mediaDevices.getUserMedia(to_js(A))\n\t@classmethod\n\tasync def load(A,audio=False,video=True):return await A.request_stream(audio=audio,video=video)\n\tasync def get_stream(A):B=A.kind.replace('input','').replace('output','');C={B:{'deviceId':{'exact':A.id}}};return await A.request_stream(**C)\nasync def list_devices():A=await window.navigator.mediaDevices.enumerateDevices();return[Device(A)for A in A]","storage.py":"_C='memoryview'\n_B='bytearray'\n_A='generic'\nfrom polyscript import storage as _polyscript_storage\nfrom pyscript.flatted import parse as _parse\nfrom pyscript.flatted import stringify as _stringify\nfrom pyscript.ffi import is_none\ndef _convert_to_idb(value):\n\tA=value\n\tif is_none(A):return _stringify(['null',0])\n\tif isinstance(A,(bool,float,int,str,list,dict,tuple)):return _stringify([_A,A])\n\tif isinstance(A,bytearray):return _stringify([_B,list(A)])\n\tif isinstance(A,memoryview):return _stringify([_C,list(A)])\n\traise TypeError(f\"Cannot serialize type {type(A).__name__} for storage.\")\ndef _convert_from_idb(value):\n\tC=value;A,B=_parse(C)\n\tif A=='null':return\n\tif A==_A:return B\n\tif A==_B:return bytearray(B)\n\tif A==_C:return memoryview(bytearray(B))\n\treturn C\nclass Storage(dict):\n\tdef __init__(B,store):A=store;super().__init__({A:_convert_from_idb(B)for(A,B)in A.entries()});B._store=A\n\tdef __delitem__(A,key):A._store.delete(key);super().__delitem__(key)\n\tdef __setitem__(B,key,value):A=value;B._store.set(key,_convert_to_idb(A));super().__setitem__(key,A)\n\tdef clear(A):A._store.clear();super().clear()\n\tasync def sync(A):await A._store.sync()\nasync def storage(name='',storage_class=Storage):\n\tif not name:raise ValueError('Storage name must be a non-empty string')\n\tA=await _polyscript_storage(f\"@pyscript/{name}\");return storage_class(A)","util.py":"import js,inspect\ndef as_bytearray(buffer):\n\tA=js.Uint8Array.new(buffer);B=A.length;C=bytearray(B)\n\tfor D in range(B):C[D]=A[D]\n\treturn C\nclass NotSupported:\n\tdef __init__(A,name,error):object.__setattr__(A,'name',name);object.__setattr__(A,'error',error)\n\tdef __repr__(A):return f\"<NotSupported {A.name} [{A.error}]>\"\n\tdef __getattr__(A,attr):raise AttributeError(A.error)\n\tdef __setattr__(A,attr,value):raise AttributeError(A.error)\n\tdef __call__(A,*B):raise TypeError(A.error)\ndef is_awaitable(obj):\n\tA=obj;from pyscript import config as C\n\tif C['type']=='mpy':\n\t\tB=repr(A)\n\t\tif'<closure <generator>'in B:return True\n\t\tif'<bound_method'in B and'<generator>'in B:return True\n\t\treturn inspect.isgeneratorfunction(A)\n\treturn inspect.iscoroutinefunction(A)","web.py":"_D='object'\n_C='tagName'\n_B='on_'\n_A=None\nfrom pyscript import document,when,Event\nfrom pyscript.ffi import create_proxy,is_none\ndef _wrap_if_not_none(dom_element):return Element.wrap_dom_element(dom_element)if not is_none(dom_element)else _A\ndef _find_by_id(dom_node,target_id):element_id=target_id[1:]if target_id.startswith('#')else target_id;result=dom_node.querySelector(f\"#{element_id}\");return _wrap_if_not_none(result)\ndef _find_and_wrap(dom_node,selector):return ElementCollection.wrap_dom_elements(dom_node.querySelectorAll(selector))\nclass Element:\n\telement_classes_by_tag_name={}\n\t@classmethod\n\tdef get_tag_name(cls):return cls.__name__.replace('_','')\n\t@classmethod\n\tdef register_element_classes(cls,element_classes):\n\t\tfor element_class in element_classes:tag_name=element_class.get_tag_name();cls.element_classes_by_tag_name[tag_name]=element_class\n\t@classmethod\n\tdef unregister_element_classes(cls,element_classes):\n\t\tfor element_class in element_classes:tag_name=element_class.get_tag_name();cls.element_classes_by_tag_name.pop(tag_name,_A)\n\t@classmethod\n\tdef wrap_dom_element(cls,dom_element):element_cls=cls.element_classes_by_tag_name.get(dom_element.tagName.lower(),cls);return element_cls(dom_element=dom_element)\n\tdef __init__(self,dom_element=_A,classes=_A,style=_A,**kwargs):\n\t\tif is_none(dom_element):self._dom_element=document.createElement(type(self).get_tag_name())\n\t\telse:self._dom_element=dom_element\n\t\tself._on_events={};self.update(classes=classes,style=style,**kwargs)\n\tdef __eq__(self,obj):return isinstance(obj,Element)and obj._dom_element==self._dom_element\n\tdef __getitem__(self,key):\n\t\tif isinstance(key,(int,slice)):return self.children[key]\n\t\tif isinstance(key,str):return _find_by_id(self._dom_element,key)\n\t\traise TypeError(f\"Element indices must be integers, slices, or strings, not {type(key).__name__}.\")\n\tdef __getattr__(self,name):\n\t\tif name.startswith(_B):return self.get_event(name)\n\t\tdom_name=self._normalize_attribute_name(name);return getattr(self._dom_element,dom_name)\n\tdef __setattr__(self,name,value):\n\t\tif name.startswith('_'):super().__setattr__(name,value)\n\t\telif name.startswith(_B):self.get_event(name).add_listener(value)\n\t\telse:dom_name=self._normalize_attribute_name(name);setattr(self._dom_element,dom_name,value)\n\tdef _normalize_attribute_name(self,name):\n\t\tif name.endswith('_'):name=name[:-1]\n\t\tif name=='for':return'htmlFor'\n\t\tif name=='class':return'className'\n\t\treturn name\n\tdef get_event(self,name):\n\t\tif not name.startswith(_B):raise ValueError(\"Event names must start with 'on_'.\")\n\t\tevent_name=name[3:]\n\t\tif not hasattr(self._dom_element,event_name):raise ValueError(f\"Element has no '{event_name}' event.\")\n\t\tif name in self._on_events:return self._on_events[name]\n\t\tev=Event();self._on_events[name]=ev;self._dom_element.addEventListener(event_name,create_proxy(ev.trigger));return ev\n\t@property\n\tdef children(self):return ElementCollection.wrap_dom_elements(self._dom_element.children)\n\t@property\n\tdef classes(self):\n\t\tif not hasattr(self,'_classes'):self._classes=Classes(self)\n\t\treturn self._classes\n\t@property\n\tdef style(self):\n\t\tif not hasattr(self,'_style'):self._style=Style(self)\n\t\treturn self._style\n\t@property\n\tdef parent(self):\n\t\tif is_none(self._dom_element.parentElement):return\n\t\treturn Element.wrap_dom_element(self._dom_element.parentElement)\n\tdef append(self,*items):\n\t\tfor item in items:\n\t\t\tif isinstance(item,Element):self._dom_element.appendChild(item._dom_element)\n\t\t\telif isinstance(item,ElementCollection):\n\t\t\t\tfor element in item:self._dom_element.appendChild(element._dom_element)\n\t\t\telif isinstance(item,(list,tuple)):\n\t\t\t\tfor child in item:self.append(child)\n\t\t\telif hasattr(item,_C):self._dom_element.appendChild(item)\n\t\t\telif hasattr(item,'length'):\n\t\t\t\tfor element in item:self._dom_element.appendChild(element)\n\t\t\telse:raise TypeError(f\"Cannot append {type(item).__name__} to element.\")\n\tdef clone(self,clone_id=_A):clone=Element.wrap_dom_element(self._dom_element.cloneNode(True));clone.id=clone_id;return clone\n\tdef find(self,selector):return _find_and_wrap(self._dom_element,selector)\n\tdef show_me(self):self._dom_element.scrollIntoView()\n\tdef update(self,classes=_A,style=_A,**kwargs):\n\t\tif classes:\n\t\t\tif isinstance(classes,str):self.classes.add(classes)\n\t\t\telse:\n\t\t\t\tfor class_name in classes:self.classes.add(class_name)\n\t\tif style:\n\t\t\tfor(key,value)in style.items():self.style[key]=value\n\t\tfor(name,value)in kwargs.items():setattr(self,name,value)\nclass Classes(set):\n\tdef __init__(self,element):self._class_list=element._dom_element.classList;super().__init__(self._class_list)\n\tdef _extract_class_names(self,class_name):return[name for name in class_name.split()if name]if' 'in class_name else[class_name]\n\tdef add(self,class_name):\n\t\tfor name in self._extract_class_names(class_name):super().add(name);self._class_list.add(name)\n\tdef remove(self,class_name):\n\t\tfor name in self._extract_class_names(class_name):super().remove(name);self._class_list.remove(name)\n\tdef discard(self,class_name):\n\t\tfor name in self._extract_class_names(class_name):\n\t\t\tsuper().discard(name)\n\t\t\tif name in self._class_list:self._class_list.remove(name)\n\tdef clear(self):\n\t\tsuper().clear()\n\t\twhile self._class_list.length>0:self._class_list.remove(self._class_list.item(0))\nclass Style(dict):\n\tdef __init__(self,element):self._style=element._dom_element.style;super().__init__()\n\tdef __setitem__(self,key,value):super().__setitem__(key,value);self._style.setProperty(key,str(value))\n\tdef __delitem__(self,key):super().__delitem__(key);self._style.removeProperty(key)\nclass HasOptions:\n\t@property\n\tdef options(self):\n\t\tif not hasattr(self,'_options'):self._options=Options(self)\n\t\treturn self._options\nclass Options:\n\tdef __init__(self,element):self._element=element\n\tdef __getitem__(self,key):return self.options[key]\n\tdef __iter__(self):yield from self.options\n\tdef __len__(self):return len(self.options)\n\tdef __repr__(self):return f\"{self.__class__.__name__} (length: {len(self)}) {self.options}\"\n\t@property\n\tdef options(self):return[Element.wrap_dom_element(o)for o in self._element._dom_element.options]\n\t@property\n\tdef selected(self):return self.options[self._element._dom_element.selectedIndex]\n\tdef add(self,value=_A,html=_A,text=_A,before=_A,**kwargs):\n\t\tif value:kwargs['value']=value\n\t\tif html:kwargs['innerHTML']=html\n\t\tif text:kwargs['text']=text\n\t\tnew_option=option(**kwargs)\n\t\tif before and isinstance(before,Element):before=before._dom_element\n\t\tself._element._dom_element.add(new_option._dom_element,before)\n\tdef clear(self):self._element._dom_element.length=0\n\tdef remove(self,index):self._element._dom_element.remove(index)\nclass ContainerElement(Element):\n\tdef __init__(self,*args,children=_A,dom_element=_A,style=_A,classes=_A,**kwargs):\n\t\tsuper().__init__(dom_element=dom_element,style=style,classes=classes,**kwargs)\n\t\tfor child in list(args)+(children or[]):\n\t\t\tif isinstance(child,(Element,ElementCollection)):self.append(child)\n\t\t\telse:self._dom_element.insertAdjacentHTML('beforeend',child)\n\tdef __iter__(self):yield from self.children\nclass ElementCollection:\n\t@classmethod\n\tdef wrap_dom_elements(cls,dom_elements):return cls([Element.wrap_dom_element(dom_element)for dom_element in dom_elements])\n\tdef __init__(self,elements):self._elements=elements\n\tdef __eq__(self,obj):return isinstance(obj,ElementCollection)and obj._elements==self._elements\n\tdef __getitem__(self,key):\n\t\tif isinstance(key,int):return self._elements[key]\n\t\tif isinstance(key,slice):return ElementCollection(self._elements[key])\n\t\tif isinstance(key,str):\n\t\t\tfor element in self._elements:\n\t\t\t\tresult=_find_by_id(element._dom_element,key)\n\t\t\t\tif result:return result\n\t\t\treturn\n\t\traise TypeError(f\"Collection indices must be integers, slices, or strings, not {type(key).__name__}\")\n\tdef __iter__(self):yield from self._elements\n\tdef __len__(self):return len(self._elements)\n\tdef __repr__(self):return f\"{self.__class__.__name__} (length: {len(self._elements)}) {self._elements}\"\n\t@property\n\tdef elements(self):return self._elements\n\tdef find(self,selector):\n\t\telements=[]\n\t\tfor element in self._elements:elements.extend(_find_and_wrap(element._dom_element,selector))\n\t\treturn ElementCollection(elements)\n\tdef update_all(self,**kwargs):\n\t\tfor element in self._elements:\n\t\t\tfor(name,value)in kwargs.items():setattr(element,name,value)\nclass canvas(ContainerElement):\n\tdef download(self,filename='snapped.png'):download_link=a(download=filename,href=self._dom_element.toDataURL());self.append(download_link);download_link._dom_element.click()\n\tdef draw(self,what,width=_A,height=_A):\n\t\tif isinstance(what,Element):what=what._dom_element\n\t\tctx=self._dom_element.getContext('2d')\n\t\tif width or height:ctx.drawImage(what,0,0,width,height)\n\t\telse:ctx.drawImage(what,0,0)\nclass video(ContainerElement):\n\tdef snap(self,to=_A,width=_A,height=_A):\n\t\tB='CANVAS';A='Element to snap to must be a canvas.';width=width if width else self.videoWidth;height=height if height else self.videoHeight\n\t\tif is_none(to):to=canvas(width=width,height=height)\n\t\telif isinstance(to,Element):\n\t\t\tif to.tag!='canvas':raise TypeError(A)\n\t\telif getattr(to,_C,'')==B:to=canvas(dom_element=to)\n\t\telif isinstance(to,str):\n\t\t\tnodelist=document.querySelectorAll(to)\n\t\t\tif nodelist.length==0:raise TypeError(f\"No element with selector {to} to snap to.\")\n\t\t\tif nodelist[0].tagName!=B:raise TypeError(A)\n\t\t\tto=canvas(dom_element=nodelist[0])\n\t\tto.draw(self,width,height);return to\nclass datalist(ContainerElement,HasOptions):0\nclass optgroup(ContainerElement,HasOptions):0\nclass select(ContainerElement,HasOptions):0\nCONTAINER_TAGS=['a','abbr','address','article','aside','audio','b','blockquote','body','button','caption','cite','code','colgroup','data','dd','del','details','dialog','div','dl','dt','em','fieldset','figcaption','figure','footer','form','h1','h2','h3','h4','h5','h6','head','header','hgroup','html','i','iframe','ins','kbd','label','legend','li','main','map','mark','menu','meta','meter','nav',_D,'ol','option','output','p','param','picture','pre','progress','q','s','script','section','small','span','strong','style','sub','summary','sup','table','tbody','td','template','textarea','tfoot','th','thead','time','title','tr','u','ul','var','wbr']\nVOID_TAGS=['area','base','br','col','embed','hr','img','input','link','source','track']\ndef _create_element_classes():\n\tA='__doc__';classes=[canvas,video,datalist,optgroup,select]\n\tfor tag in CONTAINER_TAGS:class_name=f\"{tag}_\"if tag in('del','map',_D)else tag;doc=f\"HTML <{tag}> element. Ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/{tag}\";cls=type(class_name,(ContainerElement,),{A:doc});globals()[class_name]=cls;classes.append(cls)\n\tfor tag in VOID_TAGS:class_name=f\"{tag}_\"if tag=='input'else tag;doc=f\"HTML <{tag}> element. Ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/{tag}\";cls=type(class_name,(Element,),{A:doc});globals()[class_name]=cls;classes.append(cls)\n\tElement.register_element_classes(classes)\n_create_element_classes()\nclass Page:\n\tdef __init__(self):self.html=Element.wrap_dom_element(document.documentElement);self.body=Element.wrap_dom_element(document.body);self.head=Element.wrap_dom_element(document.head)\n\tdef __getitem__(self,key):return _find_by_id(document,key)\n\t@property\n\tdef title(self):return document.title\n\t@title.setter\n\tdef title(self,value):document.title=value\n\tdef append(self,*items):self.body.append(*items)\n\tdef find(self,selector):return _find_and_wrap(document,selector)\npage=Page()","websocket.py":"import js\nfrom pyscript.ffi import create_proxy\nfrom pyscript.util import as_bytearray,is_awaitable\ndef _attach_event_handler(websocket,handler_name,handler_function):\n\tA=handler_function\n\tif is_awaitable(A):\n\t\tasync def C(event):await A(WebSocketEvent(event))\n\t\tB=create_proxy(C)\n\telse:B=create_proxy(lambda event:A(WebSocketEvent(event)))\n\tsetattr(websocket,handler_name,B)\nclass WebSocketEvent:\n\tdef __init__(A,event):A._event=event\n\tdef __getattr__(B,attr):\n\t\tA=getattr(B._event,attr)\n\t\tif attr=='data'and not isinstance(A,str):\n\t\t\tif hasattr(A,'to_py'):return A.to_py()\n\t\t\telse:return memoryview(as_bytearray(A))\n\t\treturn A\nclass WebSocket:\n\tCONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3\n\tdef __init__(B,url,protocols=None,**D):\n\t\tC=protocols\n\t\tif C:A=js.WebSocket.new(url,C)\n\t\telse:A=js.WebSocket.new(url)\n\t\tA.binaryType='arraybuffer';object.__setattr__(B,'_js_websocket',A)\n\t\tfor(E,F)in D.items():setattr(B,E,F)\n\tdef __getattr__(A,attr):return getattr(A._js_websocket,attr)\n\tdef __setattr__(B,attr,value):\n\t\tC=value;A=attr\n\t\tif A in['onclose','onerror','onmessage','onopen']:_attach_event_handler(B._js_websocket,A,C)\n\t\telse:setattr(B._js_websocket,A,C)\n\tdef send(B,data):\n\t\tA=data\n\t\tif isinstance(A,str):B._js_websocket.send(A)\n\t\telse:\n\t\t\tC=js.Uint8Array.new(len(A))\n\t\t\tfor(D,E)in enumerate(A):C[D]=E\n\t\t\tB._js_websocket.send(C)\n\tdef close(B,code=None,reason=None):\n\t\tC=reason;A=code\n\t\tif A and C:B._js_websocket.close(A,C)\n\t\telif A:B._js_websocket.close(A)\n\t\telse:B._js_websocket.close()","workers.py":"import js,json\nfrom polyscript import workers as _polyscript_workers\nclass _ReadOnlyWorkersProxy:\n\tdef __getitem__(A,name):return js.Reflect.get(_polyscript_workers,name)\n\tdef __getattr__(A,name):return js.Reflect.get(_polyscript_workers,name)\nworkers=_ReadOnlyWorkersProxy()\nasync def create_named_worker(src,name,config=None,type='py'):\n\tB=config;A=js.document.createElement('script');A.type=type;A.src=src;A.setAttribute('worker','');A.setAttribute('name',name)\n\tif B:\n\t\tif isinstance(B,str):C=B\n\t\telse:C=json.dumps(B)\n\t\tA.setAttribute('config',C)\n\tjs.document.body.append(A);return await workers[name]"}}),So.push("import pyscript as _pyscript"),So.push(...["_Path","_path","_os","_pyscript"].map(e=>`del ${e}`)),So.push("\n");const $o=So.join("\n"),Do=Ro.join("\n"),To=e=>Wo.main[e],Po=e=>Wo.worker[e],Fo=(e,t,n,r)=>{e[n]=()=>{const e=r?[r]:[];return e.push(...t(n)),e.map(k).join("\n")}},Mo=(e,t)=>{const n="mpy"===t?$o.replace(Do,""):$o,r={};return Fo(r,e,"codeBeforeRun",n),Fo(r,e,"codeBeforeRunAsync",n),Fo(r,e,"codeAfterRun"),Fo(r,e,"codeAfterRunAsync"),r},Oo=(e,t)=>{const n=[...Po(t)];if(n.length){const r=Bo(e[`_${t}`]||(t.endsWith("Async")?async(e,t,...n)=>{for(const r of n)await r(e,t)}:(e,t,...n)=>{for(const r of n)r(e,t)})),s=n.map(Bo).join(", ");return Function(`return(w,x)=>(${r})(w,x,...[${s}])`)()}},Lo=jo({typeof:"function"}),No=jo({typeof:"string"}),Io='\n import builtins\n def input(prompt=""):\n raise Exception("\\n ".join([\n "input() doesn\'t work when PyScript runs in the main thread.",\n "Consider using the worker attribute: https://pyscript.github.io/docs/2023.11.2/user-guide/workers/"\n ]))\n\n builtins.input = input\n del builtins\n del input\n',Wo={main:{onWorker:new Lo,onReady:new Lo,onBeforeRun:new Lo,onBeforeRunAsync:new Lo,onAfterRun:new Lo,onAfterRunAsync:new Lo,codeBeforeRun:new No([Io]),codeBeforeRunAsync:new No,codeAfterRun:new No,codeAfterRunAsync:new No},worker:{onReady:new Lo,onBeforeRun:new Lo,onBeforeRunAsync:new Lo([({interpreter:e})=>{e.registerJsModule("_pyscript",{fs:{ERROR:"storage permissions not granted",NAMESPACE:"@pyscript.fs"},interpreter:e})}]),onAfterRun:new Lo,onAfterRunAsync:new Lo,codeBeforeRun:new No,codeBeforeRunAsync:new No,codeAfterRun:new No,codeAfterRunAsync:new No}};var Ho={get core(){return import("./codemirror-WbVPJuAs.js")},get state(){return import("./codemirror_state-DWQh5Ruf.js")},get python(){return import("./codemirror_lang-python-q-wuh0nL.js")},get language(){return import("./codemirror_language-DqPeLcFN.js").then(function(e){return e.x})},get view(){return import("./codemirror_view-CMXZSWgf.js").then(function(e){return e.t})},get commands(){return import("./codemirror_commands-BRu2f-2p.js")}},Uo=Object.freeze({__proto__:null,default:Ho});
2
- /*! (c) PyScript Development Team */
3
- const zo=e=>import("./donkey-B3F8VdSV.js").then(t=>t.default(e)),qo=({tagName:e})=>"SCRIPT"===e,[Jo,Go]=[...Vs.entries()].map(([e,t])=>async function(n,r){await co.get(e).plugins;const s=Gs.call(new Js(null,ta.get(e)),n,{...r,type:t});return B(s.sync,ho),s.ready}),[{PyWorker:Ko,MPWorker:Vo,hooks:Xo,config:Yo,whenDefined:Zo},Qo]=e("@pyscript/core",{PyWorker:Jo,MPWorker:Go,hooks:Wo,config:{},whenDefined:zs}),ea=e=>e?.interpreter&&io(e.interpreter),ta=new Map;for(const[e,n]of Vs){if(Qo)break;const r=(t,n,r)=>{n?r.then(()=>O(t,e,"done")):O(t,e,"done")};let{config:s,configURL:o,plugins:a,error:i}=co.get(e),l=0;const c=(t=e)=>`${t}-${l++}`,p=async(t,n,r)=>{if(t.hasAttribute("src"))try{return await no(t.getAttribute("src")).then(to)}catch(e){n.stderr(e)}if(r)return k(t.textContent);const s=k(E(t.innerHTML));return console.warn(`Deprecated: use <script type="${e}"> for an always safe content parsing:\n`,s),s};let u,d=!1;const f=({XWorker:e,interpreter:t,io:n})=>{d||(d=!0,t.registerJsModule("_pyscript",{PyWorker:function(...t){const r=e(...t);return r.onerror=({error:e})=>n.stderr(e),r},fs:yo,interpreter:t,js_import:(...e)=>Promise.all(e.map(e=>import(e))),get target(){return qo(u)?u.target.id:u.id}}))};i||a().then(()=>{const a=new Map,i={main:{...Mo(To,e),async onReady(t,n){f(t);for(const e of To("onReady"))await e(t,n);if(a.has(n)){let{message:e}=a.get(n);a.delete(n);const r=e===ws;return e=`(${Zs.CONFLICTING_CODE}) ${e} for `,e+=n.cloneNode(r).outerHTML,void t.io.stderr(e)}if(qo(n)){const s=!X(n),o=n.getAttribute("target"),a=o?bs(n,o):document.createElement("script-py");if(!o){const{head:e,body:t}=document;e.contains(n)?t.append(a):n.after(a)}a.id||(a.id=c()),R(n,"target",{value:a}),O(n,e,"ready"),r(n,s,t["run"+(s?"Async":"")](await p(n,t.io,!0)))}else n._wrap.resolve(t);console.debug("[pyscript/main] PyScript Ready")},onWorker(e,t){B(t.sync,ho);for(const n of To("onWorker"))n(e,t)},onBeforeRun(e,t){u=t,Ao(To,e,t,"onBeforeRun")},onBeforeRunAsync:(e,t)=>(u=t,Ao(To,e,t,"onBeforeRunAsync")),onAfterRun(e,t){Ao(To,e,t,"onAfterRun")},onAfterRunAsync:(e,t)=>Ao(To,e,t,"onAfterRunAsync")},worker:{...Mo(Po,e),get onReady(){return Oo(this,"onReady")},get onBeforeRun(){return Oo(this,"onBeforeRun")},get onBeforeRunAsync(){return Oo(this,"onBeforeRunAsync")},get onAfterRun(){return Oo(this,"onAfterRun")},get onAfterRunAsync(){return Oo(this,"onAfterRunAsync")}}};ta.set(e,i);let l=ea(s);if(!l){const e="script[type='module'][offline]",t=document.querySelector(e)?.src;t&&import.meta.url.startsWith(t.replace(/\.js$/,""))&&(l=`./pyscript/${n}/${n}.mjs`,l=ea({interpreter:l}))}Us(e,{config:s,configURL:o,interpreter:n,hooks:i,version:l,env:`${e}-script`,onerror(e,t){a.set(t,e)}}),customElements.define(`${e}-script`,class extends HTMLElement{constructor(){B(super(),{_wrap:t(),srcCode:"",executed:!1})}get id(){return super.id||(super.id=c())}set id(e){super.id=e}async connectedCallback(){if(!this.executed){this.executed=!0;const t=!X(this),{io:n,run:s,runAsync:o}=await this._wrap.promise;this.srcCode=await p(this,n,!this.childElementCount),this.replaceChildren(),this.style.display="block",O(this,e,"ready"),r(this,t,(t?o:s)(this.srcCode))}}})}),Yo[e]=structuredClone(s)}export{Js as H,Vs as T,Gs as X,k as a,Hs as b,Ho as c,S as d,Xo as e,o as f,B as g,jn as h,Io as i,Us as j,oo as k,Ct as l,to as m,ce as n,ea as o,Do as p,zo as q,io as r,$o as s,Ko as t,Vo as u,Yo as v,t as w,Zo as x};
4
- //# sourceMappingURL=core-DmpFMpAn.js.map