@pyscript/core 0.7.24 → 0.7.26

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.
@@ -0,0 +1,4 @@
1
+ try{crypto.randomUUID()}catch(e){location.href.startsWith("http://0.0.0.0")&&(location.href=location.href.replace("0.0.0.0","localhost"))}var e=Promise.withResolvers.bind(Promise);const t=new WeakMap,n=e=>{const n=e||console,r={buffered:s,stderr:(n.stderr||console.error).bind(n),stdout:(n.stdout||console.log).bind(n)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const n=await e;return t.set(n,r),n}}},r=new TextDecoder,s=(e,t=10)=>{const n=[];return s=>{if(s instanceof Uint8Array)for(const o of s)o===t?e(r.decode(new Uint8Array(n.splice(0)))):n.push(o);else e(s)}},o=Object.getOwnPropertyDescriptors(Response.prototype),a=e=>"function"==typeof e,i={get:(e,t)=>o.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!a(r)?e.then(e=>e[t]):(...n)=>e.then(e=>e[t](...n)))(e,t,o[t]):((e,t)=>a(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}`))),i);const{assign:l}=Object,p="entries",f="readonly",u="readwrite",d={durability:"default",prefix:"IDBMap"},m=({target:{result:e}})=>e;let _=class extends EventTarget{#e;#t;#n;async#r(e,t){const n=(await this.#e).transaction(p,t,this.#t);return new Promise((t,r)=>l(e(n.objectStore(p)),{onsuccess:t,onerror:r}))}constructor(e,{durability:t=d.durability,prefix:n=d.prefix}=d){super(),this.#n=n,this.#t={durability:t},this.#e=new Promise((t,n)=>{l(indexedDB.open(`${this.#n}/${e}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(p),n.oncomplete=()=>t(e)},onsuccess(e){t(m(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?l(new Event(t),{message:n}):e)}async close(){(await this.#e).close()}get size(){return this.#r(e=>e.count(),f).then(m)}async clear(){await this.#r(e=>e.clear(),u)}async delete(e){await this.#r(t=>t.delete(e),u)}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),f).then(m)}async has(e){return void 0!==await this.#r(t=>t.getKey(e),f).then(m)}async keys(){return await this.#r(e=>e.getAllKeys(),f).then(m)}async set(e,t){return await this.#r(n=>n.put(t,e),u),this}async values(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e)))}get[Symbol.toStringTag](){return this.#n}};class y extends Map{#s;#o;constructor(...e){super(),this.#s=new _(...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 h={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:g}="",w=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g,A={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"'},b=e=>A[e],v=(e,...t)=>h[typeof e](e,...t),E=e=>g.call(e,w,b),{isArray:k}=Array,{assign:B,create:j,defineProperties:S,defineProperty:x,entries:R}=Object,{all:C,resolve:$}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),D=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function P(e){return e.startsWith(".")?D(e,this):e}let T=0;const O=(e,t)=>({id:e.id||(e.id=`${t}-w${T++}`),tag:e.tagName}),M=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},F=(e,n,r,s)=>({type:n,config:r,interpreter:s,io:t.get(s),run:(t,...n)=>e.run(s,t,...n),runAsync:(t,...n)=>e.runAsync(s,t,...n),runEvent:(...t)=>e.runEvent(s,...t)}),L=e=>e.replace(/^(?:\n|\r\n)/,""),N=(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,L(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,L(t),...o);return r&&await s(e,r,...o),a}},I=Symbol.for("polyscript.js_modules"),W=new Map;x(globalThis,I,{value:W});const H=new Proxy(W,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]}),U=(e,t)=>!t.startsWith("_"),q=(e,t)=>new Proxy(e,{has:U,get:(e,n)=>e[t][n]}),z=(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)},J=(e,t)=>import(e).then(e=>{W.set(t,{...e})}),G=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}))}),K=e=>/\.css$/i.test(new URL(e).pathname),V=e=>/^(?:false|0|no)$/i.test(e.getAttribute("async")),X=!globalThis.window,Y=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):Q(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Q=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},Z=e=>{const t=e.map(e=>e.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(e=>""!==e&&"."!==e).join("/");return e[0].startsWith("/")?`/${t}`:t},ee=(e,t)=>c(D(e,t)).arrayBuffer(),te=(e,t,n,r)=>C((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(k(r))return r.map(n=>({url:Z([e,n]),path:Z([t,n])}));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Z([t,s])}]})})(n).map(({url:n,path:s})=>ee(n,r).then(n=>e.writeFile(t,s,n)))),ne=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,re=(e,t)=>e.replace(/\{.+?\}/g,e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)}),se=(e,t,n,r)=>C((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of R(e))if(/^\{.+\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,re(o,t))}else{const e=re(s,t),a=ne(e,re(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})=>ee(n,r).then(r=>e.writeFile(t,s,r,n)))),oe=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))};let ae=0;const ie=ae++,ce=ae++,le=ae++,pe=ae++,fe=ae++,ue=ae++,de=ae++,me=ae++,_e=ae++,ye=ae++,he=ae++,ge=ae++,we=ae++,Ae=ae++,be=ae++,ve=ae++,Ee=ae++,ke=ae++,Be=ae++,je=ae++,Se=ae++,xe=ae++,Re=ae++,Ce=ae++,$e=ae++,De=ae++,Pe=ae++,Te=ae++;const Oe=globalThis.ImageData||class{},Me=new TextDecoder,Fe=new TextEncoder,Le=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),Ne=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()}},Ie=e=>Le.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),We=Object.defineProperty,He=Object.assign,Ue=Array.from,qe=Array.isArray,ze=ArrayBuffer.isView,Je=(e,t)=>[e,t],Ge=e=>e,Ke={},Ve=e=>(t,n=new Map)=>{for(let r=0,s=t.length;r<s;r++)t[r]=e(t[r],n);return t},Xe=([e,t])=>0===e?t:Ne(t),Ye=e=>"string"==typeof e?Je(0,e):Je(16,Ie(e)),Qe=(e,t)=>{for(let n=e.push,r=0,s=t.length;r<s;r+=32767)n.apply(e,t.subarray(r,r+32767))},Ze=new ArrayBuffer(8),et=new DataView(Ze),tt=new Uint8Array(Ze),nt=(e,t,n)=>(e.set(t,n),n),rt=e=>{tt[0]=e[at++],tt[1]=e[at++],tt[2]=e[at++],tt[3]=e[at++],tt[4]=e[at++],tt[5]=e[at++],tt[6]=e[at++],tt[7]=e[at++]},st=e=>(tt[0]=e[at++],tt[1]=e[at++],tt[2]=e[at++],tt[3]=e[at++],et.getUint32(0,!0)),ot=(e,t)=>{switch(e[at++]){case fe:return rt(e),et.getFloat64(0,!0);case ue:return e[at++];case Se:{const n=nt(t,at-1,{});for(let r=0,s=st(e);r<s;r++)n[ot(e,t)]=ot(e,t);return n}case ve:{const n=nt(t,at-1,[]);for(let r=0,s=st(e);r<s;r++)n.push(ot(e,t));return n}case Ce:{const n=at-1,r=ot(e,t);return nt(t,n,new globalThis[r](ot(e,t)))}case Ee:{const n=at-1,r=st(e);return nt(t,n,e.slice(at,at+=r).buffer)}case Ae:{const n=at-1,r=st(e);return nt(t,n,Me.decode(e.slice(at,at+=r)))}case ke:return nt(t,at-1,new Date(ot(e,t)));case je:{const n=nt(t,at-1,new Map);for(let r=0,s=st(e);r<s;r++)n.set(ot(e,t),ot(e,t));return n}case Re:{const n=nt(t,at-1,new Set);for(let r=0,s=st(e);r<s;r++)n.add(ot(e,t));return n}case Be:{const n=at-1,r=ot(e,t),s=ot(e,t),o=ot(e,t),a=new(globalThis[r]||Error)(s);return nt(t,n,We(a,"stack",{value:o}))}case $e:{const n=at-1,r=ot(e,t),s=ot(e,t),o=ot(e,t),a=ot(e,t),i=ot(e,t);return nt(t,n,new Oe(r,s,o,{colorSpace:a,pixelFormat:i}))}case xe:{const n=at-1,r=ot(e,t),s=ot(e,t);return nt(t,n,new RegExp(r,s))}case ie:return!1;case ce:return!0;case de:return NaN;case me:return 1/0;case _e:return-1/0;case ye:return 0;case he:return-0;case pe:return null;case ge:return rt(e),et.getBigInt64(0,!0);case we:return rt(e),et.getBigUint64(0,!0);case be:return Ne(ot(e,t));case Te:return t.get(st(e));case De:{const n=at-1,r=ot(e,t),s=ot(e,t);return nt(t,n,new Blob([e.slice(at,at+=s)],{type:r}))}case Pe:{const n=at-1,r=ot(e,t),s=ot(e,t),o=ot(e,t);return nt(t,n,new File([o],r,{type:o.type,lastModified:s}))}default:return}};let at=0;class it{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:ct}=Object,{construct:lt}=Reflect,{toStringTag:pt}=Symbol,{toString:ft}=Ke,ut=(e,t=e[pt])=>t in globalThis?t:ut(lt(ct(e.constructor),[0])),{isNaN:dt,isFinite:mt,isInteger:_t}=Number,{ownKeys:yt}=Reflect,{is:ht}=Object,gt=(e,t,n)=>{const r=n.get(e),s=!r;return s?(et.setUint32(0,t.length,!0),n.set(e,[tt[0],tt[1],tt[2],tt[3]])):t.push(Te,r[0],r[1],r[2],r[3]),s},wt=(e,t,n)=>{et.setUint32(0,n,!0),e.push(t,tt[0],tt[1],tt[2],tt[3])},At=(e,t,n)=>{switch(typeof e){case"number":e&&mt(e)?_t(e)&&e<256&&-1<e?t.push(ue,e):(et.setFloat64(0,e,!0),t.push(fe,tt[0],tt[1],tt[2],tt[3],tt[4],tt[5],tt[6],tt[7])):dt(e)?t.push(de):e?t.push(e<0?_e:me):t.push(ht(e,0)?ye:he);break;case"object":switch(!0){case null===e:t.push(pe);break;case!gt(e,t,n):break;case qe(e):{const r=e.length;wt(t,ve,r);for(let s=0;s<r;s++)At(e[s],t,n);break}case ze(e):if(t.push(Ce),At(ut(e),t,n),e=e.buffer,!gt(e,t,n))break;case e instanceof ArrayBuffer:{const n=new Uint8Array(e);wt(t,Ee,n.length),vt(t,n);break}case e instanceof Date:t.push(ke),At(e.getTime(),t,n);break;case e instanceof Map:wt(t,je,e.size);for(const[r,s]of e)At(r,t,n),At(s,t,n);break;case e instanceof Set:wt(t,Re,e.size);for(const r of e)At(r,t,n);break;case e instanceof Error:t.push(Be),At(e.name,t,n),At(e.message,t,n),At(e.stack,t,n);break;case e instanceof Oe:t.push($e),At(e.data,t,n),At(e.width,t,n),At(e.height,t,n),At(e.colorSpace,t,n),At(e.pixelFormat,t,n);break;case e instanceof RegExp:t.push(xe),At(e.source,t,n),At(e.flags,t,n);break;case e instanceof File:t.push(Pe),At(e.name,t,n),At(e.lastModified,t,n);case e instanceof Blob:{const r=e.size;t.push(De),At(e.type,t,n),At(r,t,n);const s=t.length;vt(t,new Uint8Array(r)),bt.push(e.arrayBuffer().then(e=>[s,e]));break}default:if("toJSON"in e){const r=e.toJSON();At(r===e?null:r,t,n)}else{const r=yt(e),s=r.length;wt(t,Se,s);for(let o=0;o<s;o++){const s=r[o];At(s,t,n),At(e[s],t,n)}}}break;case"string":if(gt(e,t,n)){const n=Fe.encode(e);wt(t,Ae,n.length),vt(t,n)}break;case"boolean":t.push(e?ce:ie);break;case"symbol":t.push(be),At(Ie(e),t,n);break;case"bigint":{let n=ge;9223372036854775807n<e?(et.setBigUint64(0,e,!0),n=we):et.setBigInt64(0,e,!0),t.push(n,tt[0],tt[1],tt[2],tt[3],tt[4],tt[5],tt[6],tt[7]);break}default:t.push(le)}},bt=[];let vt=Qe;const Et=({byteOffset:e=0,Array:t=it}={})=>(n,r)=>{const s=new t(r,e);vt=t.push,At(n,s,new Map);const o=s.length;return s.sync(!0),bt.length?Promise.all(bt.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},kt={parse:e=>(at=0,ot(e,new Map)),stringify:e=>{const t=[];return vt=Qe,At(e,t,new Map),t}},Bt=new WeakMap,jt=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await se(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await te(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await(({main:e,worker:t},n)=>{const r=[];if(t&&X)for(let[e,s]of R(t))e=D(e,n),r.push(J(e,s));if(e&&!X)for(let[t,s]of R(e))t=D(t,n),K(t)?G(t):r.push(J(t,s));return C(r)})(r.js_modules,s),t("Loaded JS modules"))},St=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await Bt.get(e)(t),t.map(t=>e.pyimport(t))),n.storage=async e=>{const t=new y(e);return await t.sync(),t},n.JSON=kt),e.registerJsModule(t,n)},xt=(e,t)=>{if(e.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},Rt=(e,n,...r)=>{try{return e.runPython(v(n),...r)}catch(n){t.get(e).stderr(n)}},Ct=async(e,n,...r)=>{try{return await e.runPythonAsync(v(n),...r)}catch(n){t.get(e).stderr(n)}},$t=async(e,n,r)=>{const[s,...o]=n.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(n){t.get(e).stderr(n)}};var Dt=(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 Pt=async e=>(await import("./toml-V4Savzlc.js")).parse(e);async function Tt(e,t){return new Promise((n,r)=>{e.syncfs(t,e=>{e?r(e):n()})})}function Ot(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 Mt(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):Q(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 Tt(t,!0),{syncfs:async()=>await Tt(t,!1)}}}const Mt=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:Ft}=JSON,Lt=(e,t)=>new URL(e,t).href,Nt=(e,t,n)=>{if(t in e)throw new Error(`Duplicated path: ${t}`);e[t]=n},It=(e,t,n)=>{for(const r in t)Nt(e,Lt(r,n),t[r])},Wt=(e,t,n,r)=>{const s=t[n];s&&(e[n]??={},It(e[n],s,r))},Ht=async([e,t],n=e.packages,r=new Set)=>{const s=[];for(const o of n){if(r.has(o))continue;r.add(o);const n=o.endsWith(".toml");if(n||o.endsWith(".json")){const{href:a}=new URL(o,t),i=await c(a).text(),{name:l,files:p,js_modules:f,packages:u}=n?await Pt(i):Ft(i);if(r.has(l))throw new Error(`Unable to process ${l} @ ${o}`);r.add(l),u&&s.push(...await Ht([e,a],u,r)),f&&(e.js_modules??={},Wt(e.js_modules,f,"main",o),Wt(e.js_modules,f,"worker",o)),p&&(e.files??={},It(e.files,p,o))}else s.push(o)}return s},Ut=(e,t)=>{try{e.mkdir(t)}catch(e){}},qt=oe("mpy");var zt={type:"micropython",module:(e="1.28.0-6")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r,o){const{stderr:a,stdout:i,get:c}=n({stderr:s(console.error),stdout:s(console.log)}),l=[];t.debug&&l.push("settrace"),t.packages?.includes("ulab")&&(t.packages.splice(t.packages.indexOf("ulab"),1),l.push("ulab")),r=r.replace(/\.m?js$/,".wasm");for(const e of l)r=r.replace(/\.wasm$/,`-${e}.wasm`);qt("Loading MicroPython");const p=await c(e({linebuffer:!1,stderr:a,stdout:i,url:r}));globalThis[I].set("-T-",this.transform.bind(this,p));const f=Jt.bind(this,p,o);return Bt.set(p,f),t.packages&&(qt("Loading remote packages"),t.packages=await Ht([t,o]),qt("Loaded remote packages")),await jt(this,qt,p,t,o),this.writeFile(p,"./mip.py",Dt),t.packages&&(qt("Loading packages"),await f(t.packages.map(P,o)),qt("Loaded packages")),qt("Loaded MicroPython"),p.mountNativeFS||(p.mountNativeFS=Ot(p._module)),p},registerJSModule:St,run:Rt,runAsync:Ct,runEvent:$t,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=xt(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-CoY8ac0B.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)Ut(s,i);else{Ut(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 Y(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 Y(i,t,n)}};async function Jt(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=D(s,t),r=await c(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const Gt={dict_converter:Object.fromEntries},{stringify:Kt}=JSON,{apply:Vt}=Reflect,Xt=Function.prototype,Yt=e=>function(...t){return Vt(e,this,t)};let Qt,Zt;const en=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(Qt in r&&!r[Qt].shared?.gcRegistered){e=!1;let o=t.get(r)?.deref();if(!o){o=Zt(r);const e=new WeakRef(o);t.set(r,e),t.set(o,e)}n[s]=o,e=!0}}};Object.defineProperties(Xt,{apply:{value(t,r){return e&&n(r),Vt(this,t,r)}},call:{value(t,...r){return e&&n(r),Vt(this,t,r)}}})},tn=oe("py"),nn=new WeakMap;var rn={type:"pyodide",module:(e="0.29.3")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e,version:t},r,s,o){tn("Loading Pyodide");let{packages:a,index_urls:i}=r;if(a){if(a=a.map(P,o),!i){tn("Loading Packages Graph");const{default:e}=await import("./pyodide_graph-BvONa7d5.js");if(t in e){const n=e[t];for(const e of a){if(/^(?:\.|\/|https?:\/\/)/.test(e))continue;const r=e.split(/[>=<]=/)[0];r.toLowerCase()in n||console.warn(`Pyodide ${t} might not support ${e}. See: https://packages.pyscript.net/?q=${r}`)}}tn("Loaded Packages Graph")}tn("Loading remote packages"),r.packages=a=await Ht([r,o],a),tn("Loaded remote packages")}tn("Loading Storage");const c=s.slice(0,s.lastIndexOf("/")),l=new y(`${c}@${t}`),p={indexURL:c},f="never"!==r.packages_cache&&"0.28.0"!==t;if(await l.sync(),tn("Loaded Storage"),f||l.clear(),a&&f)if("passthrough"===r.packages_cache)p.packages=a,a=null,l.clear();else{a=a.sort();const e=Kt(a);if(l.has(e)){const n=l.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:u,stdout:d,get:m}=n();tn("Loading interpreter");const _=await m(e({stderr:u,stdout:d,...p}));tn("Loaded interpreter"),globalThis[I].set("-T-",this.transform.bind(this,_)),r.debug&&_.setDebug(!0);const h=on.bind(_);return i&&nn.set(_,i),Bt.set(_,h),await jt(this,tn,_,r,o),a&&await h(a,l,f),await l.close(),p.lockFileURL&&URL.revokeObjectURL(p.lockFileURL),tn("Loaded Pyodide"),"auto"===r.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({})}),Zt=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Qt]=Reflect.ownKeys(Zt).filter(e=>"symbol"==typeof e&&"Symbol(pyproxy.attrs)"===String(e)),en(!0)),_},registerJSModule:St,run:Yt(Rt),runAsync:Yt(Ct),runEvent:Yt($t),transform:(e,t)=>Vt(sn,e,[t]),writeFile:(e,t,n,r)=>{const s=xt(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 Y({FS:o,PATH:a,PATH_FS:i},t,n)}};function sn(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(Gt);if(e instanceof Map)return new Map([...e.entries()]);if(k(e))return e.map(sn,this)}return e}async function on(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,tn(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(nn.has(this)&&o.set_index_urls(nn.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof y){const n=o.freeze();t.set(Kt(e),n)}o.destroy()}const an=new Map,cn=new Map,ln=[],pn=[],fn=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=an.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=>(cn.set(t,e),s(r,e,n,o)))}}),un=e=>{for(const t of[].concat(e.type))an.set(t,e),ln.push(`script[type="${t}"]`),pn.push(`${t}-`)};for(const e of[zt,rn])un(e);const dn=(e,t=document)=>[...t.querySelectorAll(e)],mn=(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};var _n=(Promise.withResolvers||function(){var e,t,n=new this((n,r)=>{e=n,t=r});return{resolve:e,reject:t,promise:n}}).bind(Promise);const yn=new Proxy(new Map,{get:(e,t)=>(e.has(t)||e.set(t,_n()),e.get(t))}),hn=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),gn=new Proxy(Object.freeze({}),{get:(e,t)=>"string"!=typeof t||hn.has(t)?void 0:yn[t].promise.then(e=>e.sync)});let wn=0;const An=wn++,bn=wn++,vn=wn++,En=wn++,kn=wn++,Bn=wn++,jn=wn++,Sn=wn++,xn=wn++,Rn=wn++,Cn=wn++,$n=wn++,Dn=wn++,Pn=wn++,Tn=wn++;wn++;const On=wn++,Mn=wn++,Fn=(e,t)=>[t?e:Ue(new Uint8Array(e)),e.resizable?e.maxByteLength:0],Ln=/\[('|")?(.+?)\1\]/g,Nn=(e,t)=>e?.[t];var In=(e,t)=>t.replace(Ln,".$2").split(".").reduce(Nn,e),Wn=(e,...t)=>t.map(Hn,e);function Hn(e){return"string"==typeof e?In(this,e):this[e]}var Un=e=>{const t=new Int32Array(1);return e&&(t[0]=e),()=>t[0]++};const qn=globalThis.Node||class{},{apply:zn,construct:Jn,defineProperty:Gn,deleteProperty:Kn,get:Vn,getOwnPropertyDescriptor:Xn,getPrototypeOf:Yn,has:Qn,isExtensible:Zn,ownKeys:er,set:tr,setPrototypeOf:nr}=Reflect;var rr=({reflect:e=Ge,transform:t=Ge,remote:n=Ge,module:r=e=>import(e),buffer:s=!1,timeout:o=-1}=Ke)=>{const a=(t,r=new Map)=>{if(!qe(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),c(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(Bn,o,i(this),t).then(a)},t=new WeakRef(r),h.set(o,t),w.register(r,o,t)),r}case 16:return Ne(o);default:return 1&s?d(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 Oe?Je(0,n):ze(n)?Je(68,((e,t)=>{const{BYTES_PER_ELEMENT:n,byteOffset:r,buffer:s,length:o}=e;return[ut(e),Fn(s,t),r,o!==(s.byteLength-r)/n?o:0]})(n,s)):n instanceof ArrayBuffer?Je(64,Fn(n,s)):Je(qe(n)?5:3,u(n))}case"function":return Je(9,u(t(e)));case"symbol":return Je(16,Ie(e));case"bigint":return Je(32,e.toString())}return e},c=Ve(a),l=Ve(Xe),p=Ve(Ye),{clear:f,id:u,ref:d,unref:m}=((e=0,t=new Map,n=new Map)=>{const r=Un(e);return{clear:()=>{t.clear(),n.clear()},id:e=>{let s=n.get(e);if(void 0===s){for(;t.has(s=r()););t.set(s,e),n.set(e,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=Je(2,null),w=new FinalizationRegistry(t=>{h.delete(t),e(An,t)});let A,b=!1;return{assign:He,gather:Wn,query:In,direct:e=>(b||(b=!0,A=new WeakSet),A.add(e),e),evaluate:(e,...t)=>zn(e,null,t),reflect(e,t,...n){const s=null===t,o=s?globalThis:d(t);switch(e){case Rn:{const e=Xe(n[0]),t=s&&"import"===e,a=t?r:Vn(o,e),c=i(a);if(!y)return c;let l,p=t,f=o;if(!t&&!(f instanceof qn||qe(f)&&"string"==typeof e&&_.test(e)))if(e in o){for(;!(l=Xn(f,e))&&(f=Yn(f),f););p=!!l&&"value"in l}else p=!0;return[p,c]}case Bn:{const e=new Map;return i(zn(o,a(n[0],e),c(n[1],e)))}case On:return tr(o,Xe(n[0]),a(n[1]));case Dn:return Qn(o,Xe(n[0]));case Tn:return p(er(o),h);case jn:return i(Jn(o,c(n[0])));case Cn:{const e=Xn(o,Xe(n[0]));if(e)for(const t in e)e[t]=i(e[t]);return e}case Sn:return Gn(o,Xe(n[0]),a(n[1]));case xn:return Kn(o,Xe(n[0]));case $n:return i(Yn(o));case Mn:return nr(o,a(n[0]));case bn:return void He(o,a(n[0]));case vn:{const e=a(n[0]),t=Function(`return(${e}).apply(null,arguments)`);return i(zn(t,null,c(n[1])))}case En:for(let e,t=0,r=(n=l(n[0],h)).length;t<r;t++)e=n[t],n[t]=i("string"==typeof e?In(o,e):o[e]);return n;case kn:return i(In(o,n[0]));case An:return m(t);case Pn:return Zn(o)}},terminate(){for(const e of h.values())w.unregister(e);h.clear(),f()}}};const{addEventListener:sr}=EventTarget.prototype,or=new WeakMap;Reflect.defineProperty(EventTarget.prototype,"addEventListener",{value(e,t,n){const r=n?.invoke;if(r){let t=or.get(this);t||or.set(this,t=new Map),t.set(e,[].concat(r)),delete n.invoke}return sr.apply(this,arguments)}});const ar="59317780",ir="="+ar,cr="-"+ar,lr=Promise.withResolvers||function(){var e,t,n=new this((n,r)=>{e=n,t=r});return{resolve:e,reject:t,promise:n}};var pr=lr.bind(Promise),fr=(e=e=>e)=>{const t=new Map,n=Un();return[()=>{let r;do{r=e(n())}while(t.has(r));const s=pr();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 ur=[],dr=new WeakSet,mr=(...e)=>(dr.add(e),e);let{SharedArrayBuffer:_r}=globalThis,yr=!0;try{new _r(4,{maxByteLength:8})}catch(e){yr=!1,_r=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const hr=Promise.withResolvers||function(){var e,t,n=new this((n,r)=>{e=n,t=r});return{resolve:e,reject:t,promise:n}};var gr=hr.bind(Promise);const{assign:wr,create:Ar}=Object,br=`coincident-${yr?crypto.randomUUID():Math.random().toString(36).substring(2)}`,vr={byteOffset:2*Int32Array.BYTES_PER_ELEMENT},Er=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},kr=e=>{e.stopImmediatePropagation(),e.preventDefault()},Br=(e,t=-1)=>e?.reflected_ffi_timeout??t,{defineProperty:jr}=Object,[Sr,xr]=fr();let[Rr,Cr]=Sr(),$r=()=>Cr,{Atomics:Dr,MessageChannel:Pr,Worker:Tr}=globalThis;if(yr)xr(Rr);else{const e=new Map,t=(e,...t)=>{e.addEventListener(...t)};if("importScripts"in globalThis){t(globalThis,"message",e=>{kr(e),xr(Rr,e.data)},{once:!0});const{wait:n}=Dr,{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;Dr={wait:(t,...r)=>e.has(t)?o(t,s(t)):n(t,...r)},Cr=Cr.then(e=>{[a,i]=e})}else{const n=[br,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 s=t=>{const[n,r,s]=t.data;e.set(r,[n,gr()]),jr(t,"data",{value:s})};Pr=class extends Pr{constructor(){super(),t(this.port1,"message",s)}},Tr=class extends Tr{constructor(e,t){super(e,t),super.postMessage([n,a])}};const{notify:o}=Dr;Dr={notify(t,...n){const r=e.get(t);return r?(r[1].resolve(),0):o(t,...n)}};let a="",i=null;const c=(e,n)=>{let r,s=!0;e.getRegistration(a).then(t=>t??e.register(a,n)).then(function n(o){const{controller:i}=e;if(s=s&&!!i,r=o.installing||o.waiting||o.active,"activated"===r.state){if(s){if(i.scriptURL===a)return xr(Rr);o.unregister()}location.reload()}else t(r,"statechange",()=>n(o),{once:!0})})};$r=(e,t)=>{if(!i){const n=new URL(e,location.href);a=`${n.protocol}//${n.host}${n.pathname}`,c(navigator.serviceWorker,t),i=Cr}return i}}}const Or="InstallTrigger"in globalThis?br:"",Mr=e=>e,Fr=e=>e===ir?"main":e===cr?"worker":e;class Lr extends Event{#a;constructor(e){super("message"),this.#a=e}get data(){return this.#a}}var Nr=e=>{const t=e?.transform,n=Br(e),r=(e?.encoder||Et)(vr),s=!1!==e?.transfer;return{Worker:class extends Tr{constructor(e,o){const a=yr?"":o?.serviceWorker||"",{notify:i}=a?Dr:Atomics,{port1:c,port2:l}=new(a?Pr:MessageChannel),[p,f]=fr(Mr),u=new Map,d=Ar(null);a&&$r(a);let m="";super(e,wr({type:"module"},o)),this.proxy=new Proxy(d,{get:(e,n)=>{if("then"===n)return;let r=u.get(n);return r||u.set(n,r=(...e)=>{const r=((e,t)=>{let n=ur;return e&&qe(t.at(-1))&&dr.has(t.at(-1))&&(n=t.pop(),dr.delete(n)),n})(s,e),[o,a]=p();return c.postMessage([o,n,t?e.map(t):e],r),((e,t)=>{if(m){const n=setTimeout(console.warn,3e3,`💀🔒 - is proxy.${Fr(m)}() awaiting proxy.${Fr(t)}() ?`);e=e.then(e=>(clearTimeout(n),e),e=>(clearTimeout(n),Promise.reject(e)))}return e})(a,n)}),r},set:Er}),Or&&(yr||a)&&super.addEventListener("message",e=>{const{data:t}=e;t?.ID===Or&&(kr(e),c.dispatchEvent(new Lr(t.data)))}),super.postMessage([Or,a,Br(o,n)],[l]),c.addEventListener("message",async({data:e})=>{const n=e[0],s=typeof n;if("number"===s)f.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,d,t),m="","string"===s)c.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)}}),c.start()}},native:yr,transfer:mr}};const{url:Ir}=import.meta,Wr=/import\((['"])([^)]+?\.js)\1\)/g,Hr=(e,t,n)=>`import(${t}${new URL(n,Ir).href}${t})`,Ur=Symbol.for("polyscript.js_modules");let qr;const{Worker:zr}=(e=>{const t=e?.import,n=Br(e),r=Nr({...e,encoder:e?.encoder||Et});class s extends r.Worker{#i;constructor(e,r){const{proxy:s}=super(e,r),o=rr({...r,buffer:!0,reflect:s[cr],timeout:Br(r,n),remote(e){e instanceof Event&&(e=>{const{currentTarget:t,target:n,type:r}=e,s=or.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[ir]=o.reflect}terminate(){this.#i(),super.terminate()}}return{...r,Worker:s}})({transfer:!1,transform:e=>(qr||(qr=globalThis[Ur]?.get("-T-")))?.(e)??e});const{parse:Jr}=JSON,Gr=(e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[D(e),n]},Kr=(e,t,n={})=>{const[r,s]=Gr(e,t);if("json"===s)n=c(r).json();else if("toml"===s){const{parser:e}=n;n=c(r).text().then(async t=>{const n=e?await import(e):{parse:Pt};return(n.parse||n.default)(t)})}else"string"===s?n=Vr(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=Vr(n));return[n,e=r]},Vr=e=>{try{return Jr(e)}catch(t){return Pt(e)}},Xr=(e,t,n,r={})=>(t&&([r,t]=Kr(t,n,r)),$(r).then(n=>fn[e](n,t))),Yr=(e,t="")=>`${e}@${t}`.replace(/@$/,"");function Qr(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}const Zr="BeforeRun",es="AfterRun",ts=[`code${Zr}`,`code${Zr}Async`,`code${es}`,`code${es}Async`],ns=["onWorker","onReady",`on${Zr}`,`on${Zr}Async`,`on${es}`,`on${es}Async`];function rs(e,t){const{run:n,runAsync:r}=an.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const ss=(e,t,n,r,s,o)=>{if(s||o){const a=rs.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 os=class{constructor(e,t={}){const{main:n,worker:r}=t;this.interpreter=e,this.onWorker=n?.onWorker;for(const e of ns.slice(1))this[e]=r?.[e];for(const e of ts)this[e]=r?.[e]}toJSON(){const e={};for(const t of ns.slice(1))this[t]&&(e[t]=Qr(this[t]));for(const t of ts)this[t]&&(e[t]=v(this[t]()));return e}};var as=(...e)=>function(t,n){if(e.length){const[t,r]=e;(n=B({},n||{type:t,version:r})).type||(n.type=t)}const[r]=Gr(n.config,n.configURL),s=((...e)=>new zr(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,u="-"+c;let p=0;const f=p++,d=p++,h=p++,y=p++,m=p++,g=p++,w=p++,_=p++,b=p++,A=p++,k=p++,E=p++,v=p++,S=p++,x=p++,$=p++,B=p++,j=p++,P=p++,M=p++,D=p++,F=p++,R=p++,T=p++,L=p++,O=p++,C=p++,I=p++;const U=globalThis.ImageData||class{},H=new TextDecoder,W=new TextEncoder,N=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()}},z=e=>N.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,z(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[fe++],ie[1]=e[fe++],ie[2]=e[fe++],ie[3]=e[fe++],ie[4]=e[fe++],ie[5]=e[fe++],ie[6]=e[fe++],ie[7]=e[fe++]},ue=e=>(ie[0]=e[fe++],ie[1]=e[fe++],ie[2]=e[fe++],ie[3]=e[fe++],ae.getUint32(0,!0)),pe=(e,t)=>{switch(e[fe++]){case m:return le(e),ae.getFloat64(0,!0);case g:return e[fe++];case D:{const n=ce(t,fe-1,{});for(let r=0,s=ue(e);r<s;r++)n[pe(e,t)]=pe(e,t);return n}case $:{const n=ce(t,fe-1,[]);for(let r=0,s=ue(e);r<s;r++)n.push(pe(e,t));return n}case T:{const n=fe-1,r=pe(e,t);return ce(t,n,new globalThis[r](pe(e,t)))}case B:{const n=fe-1,r=ue(e);return ce(t,n,e.slice(fe,fe+=r).buffer)}case S:{const n=fe-1,r=ue(e);return ce(t,n,H.decode(e.slice(fe,fe+=r)))}case j:return ce(t,fe-1,new Date(pe(e,t)));case M:{const n=ce(t,fe-1,new Map);for(let r=0,s=ue(e);r<s;r++)n.set(pe(e,t),pe(e,t));return n}case R:{const n=ce(t,fe-1,new Set);for(let r=0,s=ue(e);r<s;r++)n.add(pe(e,t));return n}case P:{const n=fe-1,r=pe(e,t),s=pe(e,t),o=pe(e,t),a=new(globalThis[r]||Error)(s);return ce(t,n,J(a,"stack",{value:o}))}case L:{const n=fe-1,r=pe(e,t),s=pe(e,t),o=pe(e,t),a=pe(e,t),i=pe(e,t);return ce(t,n,new U(r,s,o,{colorSpace:a,pixelFormat:i}))}case F:{const n=fe-1,r=pe(e,t),s=pe(e,t);return ce(t,n,new RegExp(r,s))}case f:return!1;case d:return!0;case w:return NaN;case _:return 1/0;case b:return-1/0;case A:return 0;case k:return-0;case y:return null;case E:return le(e),ae.getBigInt64(0,!0);case v:return le(e),ae.getBigUint64(0,!0);case x:return q(pe(e,t));case I:return t.get(ue(e));case O:{const n=fe-1,r=pe(e,t),s=pe(e,t);return ce(t,n,new Blob([e.slice(fe,fe+=s)],{type:r}))}case C:{const n=fe-1,r=pe(e,t),s=pe(e,t),o=pe(e,t);return ce(t,n,new File([o],r,{type:o.type,lastModified:s}))}default:return}};let fe=0;const de=e=>(fe=0,pe(e,new Map)),he=({byteOffset:e=0}={})=>(t,n)=>de(new Uint8Array(n,e,t));let ye=0;const me=ye++,ge=ye++,we=ye++,_e=ye++,be=ye++,Ae=ye++,ke=ye++,Ee=ye++,ve=ye++,Se=ye++,xe=ye++,$e=ye++,Be=ye++,je=ye++,Pe=ye++;ye++;const Me=ye++,De=ye++,{getPrototypeOf:Fe}=Object,{construct:Re}=Reflect,{toStringTag:Te}=Symbol,{toString:Le}=Q,Oe=(e,t=Le.call(e).slice(8,-1))=>t in globalThis?t:Oe(Fe(e)||Q),Ce=(e,t=e[Te])=>t in globalThis?t:Ce(Re(Fe(e.constructor),[0])),Ie=(e,t)=>new ArrayBuffer(e,{maxByteLength:t}),Ue=([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 He=/\\[(\'|")?(.+?)\\1\\]/g,We=(e,t)=>e?.[t];var Ne=e=>{const t=new Int32Array(1);return e&&(t[0]=e),()=>t[0]++},qe=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}}},ze=({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 u(t,n);switch(t){case 2:return x;case 0:return n;case 16:return q(n);case 32:return BigInt(n);case 68:return(([e,t,n,r],s)=>{const o=Ue(t,s),a=globalThis[e];return r?new a(o,n,r):new a(o,n)})(n,r);case 64:return Ue(n,r)}},c=(e,n=new Map)=>{switch(typeof e){case"object":{if(null===e)break;if(e===globalThis)return S;if(v 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(v in e)return g;let r=n.get(e);if(!r){const s=t(e);r=X(8,b(s)),n.set(e,r)}return r}case"symbol":return X(16,z(e))}return e},l=te(c),u=(e,t)=>{let n=E.get(t),r=n?.deref();return r||(n&&$.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),E.set(t,n),$.register(r,t,n)),r},p=e=>{switch(typeof e){case"object":if(null===e)break;case"function":return v in e}return!1},f=-1<s,d=f?qe(s):Map;class h{constructor(e,t){this.t=e,this.v=t,f&&(this.$=new d)}get(t,n){if(f&&this.$.has(n))return this.$.get(n);const r=e(Se,this.v,re(n));return f?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 f?this.$.drop(n,s):s}has(t,n){return n===v?(g=[this.t,this.v],!0):e(Be,this.v,re(n))}_oK(){return o(e(Pe,this.v),E)}ownKeys(e){return f?this.$.has(d.keys)?this.$.get(d.keys):this.$.set(d.keys,this._oK()):this._oK()}getOwnPropertyDescriptor(t,n){const r=i(e(xe,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(Ee,this.v,re(n),c(r));return f?this.$.drop(n,s):s}deleteProperty(t,n){const r=e(ve,this.v,re(n));return f?this.$.drop(n,r):r}_gPO(){return i(e($e,this.v))}getPrototypeOf(e){return f?this.$.has(d.proto)?this.$.get(d.proto):this.$.set(d.proto,this._gPO()):this._gPO()}setPrototypeOf(t,n){const r=e(De,this.v,c(n));return f?this.$.drop(d.proto,r):r}isExtensible(t){return e(je,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:_}=Reflect,{id:b,ref:A,unref:k}=((e=0,t=new Map,n=new Map)=>{const r=Ne(e);return{clear:()=>{t.clear(),n.clear()},id:e=>{let s=n.get(e);if(void 0===s){for(;t.has(s=r()););t.set(s,e),n.set(e,s)}return s},ref:e=>t.get(e),unref:e=>(n.delete(t.get(e)),t.delete(e))}})(),E=new Map,v=Symbol("reflected-ffi"),S=X(2,null),x=new Proxy(Q,new h(2,null)),$=new FinalizationRegistry(t=>{E.delete(t),e(me,t)});return{global:x,isProxy:p,assign(t,...n){const r=p(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=p(t),s=r?i:e=>t[e];r&&(n=e(_e,g[1],a(n,E)));for(let e=0;e<n.length;e++)n[e]=s(n[e]);return n},query:(t,n)=>p(t)?i(e(be,g[1],n)):((e,t)=>t.replace(He,".$2").split(".").reduce(We,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 _(A(t),i(e),n))}case me:return n(A(t)),k(t)}}}};const Je=Promise.withResolvers||function(){var e,t,n=new this((n,r)=>{e=n,t=r});return{resolve:e,reject:t,promise:n}};var Ke=Je.bind(Promise);const Ge=Promise.withResolvers||function(){var e,t,n=new this((n,r)=>{e=n,t=r});return{resolve:e,reject:t,promise:n}};var Ve=Ge.bind(Promise),Xe=(e=e=>e)=>{const t=new Map,n=Ne();return[()=>{let r;do{r=e(n())}while(t.has(r));const s=Ve();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 Ye=[],Ze=new WeakSet,Qe=(...e)=>(Ze.add(e),e);let{SharedArrayBuffer:et}=globalThis,tt=!0;try{new et(4,{maxByteLength:8})}catch(e){tt=!1,et=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const{create:nt}=Object,rt=`coincident-${tt?crypto.randomUUID():Math.random().toString(36).substring(2)}`,st=2*Int32Array.BYTES_PER_ELEMENT,ot={byteOffset:st},at=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},it=e=>{e.stopImmediatePropagation(),e.preventDefault()},[ct,lt]=Xe();let[ut,pt]=ct(),ft=()=>pt,dt=()=>{},{Atomics:ht,MessagePort:yt,SharedArrayBuffer:mt,postMessage:gt}=globalThis;if(tt)lt(ut);else{mt=et;const e=new Map,t=(e,...t)=>{e.addEventListener(...t)};if("importScripts"in globalThis){dt=t=>{e.set(t,null)};const n=t=>{const n=t[0],r=p++;return e.set(n,r),[r,n,t]},r=gt;gt=function(e,t){if(u){const s={ID:e.ID,data:n(e.data)};r(s,t)}else pt.then(()=>this.postMessage(e,t))},yt=class extends yt{postMessage(e,t){u?super.postMessage(n(e),t):pt.then(()=>this.postMessage(e,t))}},t(globalThis,"message",e=>{it(e),lt(ut,e.data)},{once:!0});const{wait:s}=ht,{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");ht={wait:(t,...n)=>e.has(t)?i(t,a(t)):s(t,...n)};let c,l,u=!1,p=Math.random();pt=pt.then(e=>{[c,l]=e,u=!0})}else{const n=[rt,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}=ht;ht={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 lt(ut);a.unregister()}location.reload()}else t(r,"statechange",()=>n(a),{once:!0})})};ft=(e,t)=>{if(!a){const n=new URL(e,location.href);o=`${n.protocol}//${n.host}${n.pathname}`,i(navigator.serviceWorker,t),a=pt}return a}}}const{setPrototypeOf:wt}=Reflect;let{postMessage:_t}=globalThis;const bt=Ke(),At=yt.prototype;addEventListener("message",e=>{it(e);const[t,n,r]=e.data,[s]=e.ports;n&&(wt(s,At),t&&(_t=gt)),bt.resolve([t,n,r,s])},{once:!0});var kt=async e=>{const[t,n,r,s]=await ft().then(()=>bt.promise),o=!!t,a=tt||!!n,i=e?.transform,c=(e?.decoder||he)(ot),l=!1!==e?.transfer;let u,p,f,d;if(a){const t=new(n?mt:SharedArrayBuffer)(e?.minByteLength||32767,{maxByteLength:e?.maxByteLength||16777216});u=new Int32Array(t),n?(({wait:d}=ht),dt(u)):(({load:p,pause:f,wait:d}=Atomics),f&&(d=(e,t)=>{do{f()}while(p(e,t)<1)}))}const[h,y]=Xe(String),m=new Map,g=nt(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=Ye;return e&&G(t.at(-1))&&Ze.has(t.at(-1))&&(n=t.pop(),Ze.delete(n)),n})(l,e),p=[u,n,i?e.map(i):e];if(a){o?_t({ID:t,data:p},r):s.postMessage(p,r),d(u,0),u[0]=0;const e=u[1]?c(u[1],u.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=h();return p[0]=e,s.postMessage(p,r),t}}),r},set:at});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:tt,proxy:w,ffi_timeout:r,sync:a,transfer:Qe}};const Et={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}},vt=new WeakMap,St=e=>{const t=e||console,n={buffered:$t,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 vt.set(t,n),t}}},xt=new TextDecoder,$t=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(xt.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},Bt=(e,...t)=>Et[typeof e](e,...t),{isArray:jt}=Array,{assign:Pt,create:Mt,defineProperty:Dt,entries:Ft}=Object,{all:Rt,resolve:Tt}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),Lt=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function Ot(e){return e.startsWith(".")?Lt(e,this):e}const Ct=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},It=e=>Function(`\'use strict\';return (${e})`)(),Ut=e=>e.replace(/^(?:\\n|\\r\\n)/,""),Ht=Symbol.for("polyscript.js_modules"),Wt=new Map;Dt(globalThis,Ht,{value:Wt}),new Proxy(Wt,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]});const Nt=(e,t)=>!t.startsWith("_"),qt=(e,t)=>new Proxy(e,{has:Nt,get:(e,n)=>e[t][n]}),zt=(e,t)=>import(e).then(e=>{Wt.set(t,{...e})}),Jt=e=>new Promise((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(Pt(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))}),Kt=e=>/\\.css$/i.test(new URL(e).pathname),Gt=(e,t)=>e.has(t),Vt=e=>[...e.keys()];var Xt=(e,t,n,r)=>{const s=globalThis[Ht];if(n)for(let[e,t]of Ft(n)){let n=s.get(t);n&&!jt(n)||(s.set(t,n||(n=[])),n.push(e))}return((e,t,n,r)=>new Proxy(e,{has:Gt,ownKeys:Vt,get:(e,s)=>{let o=e.get(s);if(jt(o)){let a=o;o=null;for(let e of a)e=Lt(e,r),Kt(e)?n.importCSS(e):(n.importJS(e,s),o=t[Ht].get(s));e.set(s,o)}return o}}))(s,e,t,r)};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):rn(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},rn=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},sn=e=>{const t=e.map(e=>e.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(e=>""!==e&&"."!==e).join("/");return e[0].startsWith("/")?`/${t}`:t},on=(e,t)=>en(Lt(e,t)).arrayBuffer(),an=(e,t,n,r)=>Rt((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(jt(r))return r.map(n=>({url:sn([e,n]),path:sn([t,n])}));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:sn([t,s])}]})})(n).map(({url:n,path:s})=>on(n,r).then(n=>e.writeFile(t,s,n)))),cn=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,ln=(e,t)=>e.replace(/\\{.+?\\}/g,e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)}),un=(e,t,n,r)=>Rt((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of Ft(e))if(/^\\{.+\\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,ln(o,t))}else{const e=ln(s,t),a=cn(e,ln(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})=>on(n,r).then(r=>e.writeFile(t,s,r,n)))),pn=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))},{isNaN:fn,isFinite:dn,isInteger:hn}=Number,{ownKeys:yn}=Reflect,{is:mn}=Object,gn=(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},wn=(e,t,n)=>{ae.setUint32(0,n,!0),e.push(t,ie[0],ie[1],ie[2],ie[3])},_n=(e,t,n)=>{switch(typeof e){case"number":e&&dn(e)?hn(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])):fn(e)?t.push(w):e?t.push(e<0?b:_):t.push(mn(e,0)?A:k);break;case"object":switch(!0){case null===e:t.push(y);break;case!gn(e,t,n):break;case G(e):{const r=e.length;wn(t,$,r);for(let s=0;s<r;s++)_n(e[s],t,n);break}case V(e):if(t.push(T),_n(Ce(e),t,n),e=e.buffer,!gn(e,t,n))break;case e instanceof ArrayBuffer:{const n=new Uint8Array(e);wn(t,B,n.length),An(t,n);break}case e instanceof Date:t.push(j),_n(e.getTime(),t,n);break;case e instanceof Map:wn(t,M,e.size);for(const[r,s]of e)_n(r,t,n),_n(s,t,n);break;case e instanceof Set:wn(t,R,e.size);for(const r of e)_n(r,t,n);break;case e instanceof Error:t.push(P),_n(e.name,t,n),_n(e.message,t,n),_n(e.stack,t,n);break;case e instanceof U:t.push(L),_n(e.data,t,n),_n(e.width,t,n),_n(e.height,t,n),_n(e.colorSpace,t,n),_n(e.pixelFormat,t,n);break;case e instanceof RegExp:t.push(F),_n(e.source,t,n),_n(e.flags,t,n);break;case e instanceof File:t.push(C),_n(e.name,t,n),_n(e.lastModified,t,n);case e instanceof Blob:{const r=e.size;t.push(O),_n(e.type,t,n),_n(r,t,n);const s=t.length;An(t,new Uint8Array(r)),bn.push(e.arrayBuffer().then(e=>[s,e]));break}default:if("toJSON"in e){const r=e.toJSON();_n(r===e?null:r,t,n)}else{const r=yn(e),s=r.length;wn(t,D,s);for(let o=0;o<s;o++){const s=r[o];_n(s,t,n),_n(e[s],t,n)}}}break;case"string":if(gn(e,t,n)){const n=W.encode(e);wn(t,S,n.length),An(t,n)}break;case"boolean":t.push(e?d:f);break;case"symbol":t.push(x),_n(z(e),t,n);break;case"bigint":{let n=E;9223372036854775807n<e?(ae.setBigUint64(0,e,!0),n=v):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)}},bn=[];let An=se;const kn={parse:de,stringify:e=>{const t=[];return An=se,_n(e,t,new Map),t}},En=new WeakMap,vn=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await un(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await an(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await(({main:e,worker:t},n)=>{const r=[];if(t&&tn)for(let[e,s]of Ft(t))e=Lt(e,n),r.push(zt(e,s));if(e&&!tn)for(let[t,s]of Ft(e))t=Lt(t,n),Kt(t)?Jt(t):r.push(zt(t,s));return Rt(r)})(r.js_modules,s),t("Loaded JS modules"))},Sn=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await En.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=kn),e.registerJsModule(t,n)},xn=(e,t)=>{if(e.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},$n=(e,t,...n)=>{try{return e.runPython(Bt(t),...n)}catch(t){vt.get(e).stderr(t)}},Bn=async(e,t,...n)=>{try{return await e.runPythonAsync(Bt(t),...n)}catch(t){vt.get(e).stderr(t)}},jn=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){vt.get(e).stderr(t)}};var Pn=(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 Mn=async e=>(await import("./toml-V4Savzlc.js")).parse(e);async function Dn(e,t){return new Promise((n,r)=>{e.syncfs(t,e=>{e?r(e):n()})})}function Fn(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 Rn(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):rn(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 Rn=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:Tn}=JSON,Ln=(e,t)=>new URL(e,t).href,On=(e,t,n)=>{if(t in e)throw new Error(`Duplicated path: ${t}`);e[t]=n},Cn=(e,t,n)=>{for(const r in t)On(e,Ln(r,n),t[r])},In=(e,t,n,r)=>{const s=t[n];s&&(e[n]??={},Cn(e[n],s,r))},Un=async([e,t],n=e.packages,r=new Set)=>{const s=[];for(const o of n){if(r.has(o))continue;r.add(o);const n=o.endsWith(".toml");if(n||o.endsWith(".json")){const{href:a}=new URL(o,t),i=await en(a).text(),{name:c,files:l,js_modules:u,packages:p}=n?await Mn(i):Tn(i);if(r.has(c))throw new Error(`Unable to process ${c} @ ${o}`);r.add(c),p&&s.push(...await Un([e,a],p,r)),u&&(e.js_modules??={},In(e.js_modules,u,"main",o),In(e.js_modules,u,"worker",o)),l&&(e.files??={},Cn(e.files,l,o))}else s.push(o)}return s},Hn=(e,t)=>{try{e.mkdir(t)}catch(e){}},Wn=pn("mpy");var Nn={type:"micropython",module:(e="1.28.0-6")=>`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}=St({stderr:$t(console.error),stdout:$t(console.log)}),i=[];t.debug&&i.push("settrace"),t.packages?.includes("ulab")&&(t.packages.splice(t.packages.indexOf("ulab"),1),i.push("ulab")),n=n.replace(/\\.m?js$/,".wasm");for(const e of i)n=n.replace(/\\.wasm$/,`-${e}.wasm`);Wn("Loading MicroPython");const c=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n}));globalThis[Ht].set("-T-",this.transform.bind(this,c));const l=qn.bind(this,c,r);return En.set(c,l),t.packages&&(Wn("Loading remote packages"),t.packages=await Un([t,r]),Wn("Loaded remote packages")),await vn(this,Wn,c,t,r),this.writeFile(c,"./mip.py",Pn),t.packages&&(Wn("Loading packages"),await l(t.packages.map(Ot,r)),Wn("Loaded packages")),Wn("Loaded MicroPython"),c.mountNativeFS||(c.mountNativeFS=Fn(c._module)),c},registerJSModule:Sn,run:$n,runAsync:Bn,runEvent:jn,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=xn(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-CoY8ac0B.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)Hn(s,i);else{Hn(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 qn(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=Lt(s,t),r=await en(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const zn={dict_converter:Object.fromEntries},{stringify:Jn}=JSON,{apply:Kn}=Reflect,Gn=Function.prototype,Vn=e=>function(...t){return Kn(e,this,t)};let Xn,Yn;const Zn=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(Xn in r&&!r[Xn].shared?.gcRegistered){e=!1;let o=t.get(r)?.deref();if(!o){o=Yn(r);const e=new WeakRef(o);t.set(r,e),t.set(o,e)}n[s]=o,e=!0}}};Object.defineProperties(Gn,{apply:{value(t,r){return e&&n(r),Kn(this,t,r)}},call:{value(t,...r){return e&&n(r),Kn(this,t,r)}}})},Qn=pn("py"),er=new WeakMap;var tr={type:"pyodide",module:(e="0.29.4")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e,version:t},n,r,s){Qn("Loading Pyodide");let{packages:o,index_urls:a}=n;if(o){if(o=o.map(Ot,s),!a){Qn("Loading Packages Graph");const{default:e}=await import("./pyodide_graph-BvONa7d5.js");if(t in e){const n=e[t];for(const e of o){if(/^(?:\\.|\\/|https?:\\/\\/)/.test(e))continue;const r=e.split(/[>=<]=/)[0];r.toLowerCase()in n||console.warn(`Pyodide ${t} might not support ${e}. See: https://packages.pyscript.net/?q=${r}`)}}Qn("Loaded Packages Graph")}Qn("Loading remote packages"),n.packages=o=await Un([n,s],o),Qn("Loaded remote packages")}Qn("Loading Storage");const c=r.slice(0,r.lastIndexOf("/")),l=new i(`${c}@${t}`),u={indexURL:c},p="never"!==n.packages_cache&&"0.28.0"!==t;if(await l.sync(),Qn("Loaded Storage"),p||l.clear(),o&&p)if("passthrough"===n.packages_cache)u.packages=o,o=null,l.clear();else{o=o.sort();const e=Jn(o);if(l.has(e)){const n=l.get(e);if(u.packages=o.map(e=>e.split(/[>=<]=/)[0]),t.startsWith("0.27")){const e=new Blob([n],{type:"application/json"});u.lockFileURL=URL.createObjectURL(e)}else u.lockFileContents=n;o=null}}const{stderr:f,stdout:d,get:h}=St();Qn("Loading interpreter");const y=await h(e({stderr:f,stdout:d,...u}));Qn("Loaded interpreter"),globalThis[Ht].set("-T-",this.transform.bind(this,y)),n.debug&&y.setDebug(!0);const m=rr.bind(y);return a&&er.set(y,a),En.set(y,m),await vn(this,Qn,y,n,s),o&&await m(o,l,p),await l.close(),u.lockFileURL&&URL.revokeObjectURL(u.lockFileURL),Qn("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({})}),Yn=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Xn]=Reflect.ownKeys(Yn).filter(e=>"symbol"==typeof e&&"Symbol(pyproxy.attrs)"===String(e)),Zn(!0)),y},registerJSModule:Sn,run:Vn($n),runAsync:Vn(Bn),runEvent:Vn(jn),transform:(e,t)=>Kn(nr,e,[t]),writeFile:(e,t,n,r)=>{const s=xn(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 nr(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(zn);if(e instanceof Map)return new Map([...e.entries()]);if(jt(e))return e.map(nr,this)}return e}async function rr(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,Qn(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(er.has(this)&&o.set_index_urls(er.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof i){const n=o.freeze();t.set(Jn(e),n)}o.destroy()}const sr=new Map,or=new Map,ar=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=sr.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=>(or.set(t,e),s(r,e,n,o)))}}),ir=e=>{for(const t of[].concat(e.type))sr.set(t,e)};for(const e of[Nn,tr])ir(e);const{parse:cr}=JSON,lr=(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,[Lt(e),n]})(e,t);if("json"===s)n=en(r).json();else if("toml"===s){const{parser:e}=n;n=en(r).text().then(async t=>{const n=e?await import(e):{parse:Mn};return(n.parse||n.default)(t)})}else"string"===s?n=ur(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=ur(n));return[n,e=r]},ur=e=>{try{return cr(e)}catch(t){return Mn(e)}},pr="BeforeRun",fr="AfterRun",dr=[`code${pr}`,`code${pr}Async`,`code${fr}`,`code${fr}Async`],hr=["onWorker","onReady",`on${pr}`,`on${pr}Async`,`on${fr}`,`on${fr}Async`];function yr(e,t){const{run:n,runAsync:r}=sr.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const mr=(e,t,n,r,s,o)=>{if(s||o){const a=yr.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 gr,wr,_r;const br=(e,t)=>{addEventListener(e,t||(async t=>{try{await gr,wr(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{proxy:Ar,sync:kr,native:Er,window:vr,isWindowProxy:Sr,ffi:xr}=await(async e=>{const t=await kt({...e,decoder:e?.decoder||he}),n=ze({...e,buffer:!0,reflect:t.proxy[l],timeout:t.ffi_timeout});return t.proxy[u]=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=>_r?_r(e):e}),$r={polyfill:kr,sync:Ar,window:Er||kr?vr:null,isWindowProxy:Sr,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};br("message",({data:{options:e,config:t,configURL:n,code:r,hooks:s}})=>{gr=(async()=>{try{const{id:o,tag:c,type:l,custom:u,version:p,config:f,async:d}=e,h=((e,t="")=>`${e}@${t}`.replace(/@$/,""))(l,p),y=await((e,t,n,r={})=>(t&&([r,t]=lr(t,n,r)),Tt(r).then(n=>ar[e](n,t))))(h,t,n,f),{js_modules:m}=or.get(h),g=m?.main,w=Mt(sr.get(l)),_=((e,t,n,r)=>({type:t,config:n,interpreter:r,io:vt.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,u||l,f||{},y);let b="run";if(d&&(b+="Async"),s){let e,t,n="",r="";for(const e of dr){const t=s[e];if(t){const s=e.endsWith("Async");(s&&d||!s&&!d)&&(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,Ut(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Ut(t),...o);return r&&await s(e,r,...o),a}})(w,b,n,r);for(const n of hr.slice(2)){const r=s[n];if(r){const s=n.endsWith("Async");if(s&&d||!s&&!d){const s=It(r);n.startsWith("onBefore")?e=s:t=s}}}mr(w,_,$r,d,e,t)}let A,k,E,v=null,S="";(Er||kr)&&(({CustomEvent:A,document:k}=vr),v=o&&k.getElementById(o)||null,E=e=>Ct(v,u||l,e,!0,A));const x=Xt(vr,Ar,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}`,qt(r,e));t.registerJSModule(n,s,r)})(l,w,y,x),w.registerJSModule(y,"polyscript",{IDBMap:a,IDBMapSync:i,xworker:$r,currentScript:v,config:_.config,js_modules:x,ffi:xr,get target(){return!S&&v&&("SCRIPT"===c?v.after(Pt(vr.document.createElement(`script-${u||l}`),{id:S=`${o}-target`})):(S=o,v.replaceChildren(),v.style.display="block")),S}}),wr=w.runEvent.bind(w,y),_r=w.transform.bind(w,y),v&&E("ready"),s?.onReady&&It(s?.onReady).call(w,yr.call(w,_,y),$r),await w[b](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 v&&E("done"),postMessage("polyscript:done"),y}catch(e){postMessage(e)}})(),br("error"),br("message"),br("messageerror"),(Er||kr)&&addEventListener("py:progress",({type:e,detail:t})=>{vr.dispatchEvent(new vr.CustomEvent(e,{detail:t}))})});\n'.replace(Wr,Hr)],{type:"text/javascript"})),...e))({serviceWorker:n?.serviceWorker||n?.service_worker,reflected_ffi_timeout:globalThis.reflected_ffi_timeout??-1}),{postMessage:o}=s,a=this instanceof os;let i=!1;const l=B(s.proxy,{importJS:J,importCSS:G,isStuck:()=>i,notStuck(){i=!1}}),p=_n();let f=c(t).text().then(e=>{const t=a?this.toJSON():void 0;o.call(s,{options:n,config:r,code:e,hooks:t})}).then(()=>{f={then:e=>e()}});return S(s,{unstuck:{value(){i=!0}},sync:{value:l},ready:{value:p.promise},postMessage:{value:(e,...t)=>f.then(()=>o.call(s,e,...t))},onerror:{writable:!0,configurable:!0,value:console.error}}),s.addEventListener("message",e=>{const{data:t}=e,n=t instanceof Error;(n||"polyscript:done"===t)&&(e.stopImmediatePropagation(),n?(p.reject(t),s.onerror(j(e,{type:{value:"error"},error:{value:t}}))):p.resolve(s))}),a&&this.onWorker?.(this.interpreter,s),s};const is="Invalid content";var cs=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([v(r)],{type:"text/plain"}))}return r}if(t&&e.textContent.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*(?:\/\/|#).*/gm,"").trim())throw new SyntaxError(is)};const ls=(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)},ps=new WeakMap,fs={get(){let e=ps.get(this);return e||(e=document.createElement(`${this.type}-script`),ps.set(this,e),ys(this)),e},set(e){"string"==typeof e?ps.set(this,ls(this,e)):(ps.set(this,e),ys(this))}},us=new WeakMap,ds=new Map,ms=(e,t)=>{const n=e?.value;return n?t+n:""},_s=(e,t,n,r,s,o,a=e)=>{if(!ds.has(t)){const i={interpreter:Xr(n,s,o),queue:$(),XWorker:as(e,r)};ds.set(t,i),ds.has(e)||ds.set(e,i),ds.has(a)||ds.set(a,i)}return ds.get(t)},ys=async e=>{if(us.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=!V(e),f=o?.value,u=Yr(l,f);let d=ms(t,"|");const m=ms(n,"")||`${u}${d}`;d=d.slice(1);const h=cs(e);if(h){const t=new(as(l,f))(h,{...O(e,l),version:f,async:p,config:d,serviceWorker:a?.value});us.set(x(e,"xworker",{value:t}),{xworker:t});const n=r?.value;return void(n&&yn[n].resolve(t.ready))}const g=ms(s,""),w=_s(l,m,u,f,d);us.set(x(e,"target",fs),w),g&&ps.set(e,ls(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=an.get(s);o.experimental&&console.warn(`The ${s} interpreter is experimental`);const[a,i]=await C([us.get(e).interpreter,t]);try{z(s,o,a,H),o.registerJSModule(a,"polyscript",{IDBMap:_,IDBMapSync:y,XWorker:n,currentScript:e,js_modules:H,workers:gn}),M(e,s,"ready"),x(document,"currentScript",{configurable:!0,get:()=>e});const t=M.bind(null,e,s,"done");let c=o[r?"runAsync":"run"](a,i);return r&&(c=await c),t(),c}finally{delete document.currentScript}})(e,A,w.XWorker,p))}},hs=new Proxy(j(null),{get:(e,t)=>new Promise(queueMicrotask).then(()=>gs(t))}),gs=async e=>{if(ds.has(e)){const{interpreter:t,queue:n}=ds.get(e);return(await C([t,n]))[0]}const t=ds.size?`Available interpreters are: ${[...ds.keys()].map(e=>`"${e}"`).join(", ")}.`:"There are no interpreters in this page.";throw new Error(`The interpreter "${e}" was not found. ${t}`)},ws=async e=>{const{type:t,currentTarget:n}=e;if(pn.length)for(let{name:r,value:s,ownerElement:o}of mn(`./@*[${pn.map(e=>`name()="${e}${t}"`).join(" or ")}]`,n)){r=r.slice(0,-(t.length+1));const n=await gs(o.getAttribute(`${r}-env`)||r);an.get(r).runEvent(n,s,e)}},As=e=>{if(pn.length)for(let{name:t,ownerElement:n}of mn(`.//@*[${pn.map(e=>`starts-with(name(),"${e}")`).join(" or ")}]`,e)){const e=t.lastIndexOf("-"),r=t.slice(e+1);"env"!==r&&(n.addEventListener(r,ws),"disabled"in n&&!n.disabled&&(n.disabled=!0,hs[t.slice(0,e)].then(()=>{n.disabled=!1})))}},bs=as(),vs=[],Es=new Map,ks=new Map,Bs=new Map,js=async e=>{for(const t of vs)if(e.matches(t)){const n=ks.get(t),r=Ss.get(n),{resolve:s}=Bs.get(n),{options:o,known:a}=r;if(a.has(e))return;a.add(e);for(const[t,n]of Es)e.matches(t)&&await n(e);const{interpreter:i,configURL:c,config:l,version:p,env:f,onerror:u,hooks:d,parser:m}=o;let h;try{const t=cs(e);if(t){let r=p,o=c,a=e.getAttribute("config")||l||{};if(!r||!a){const[e,t]=Kr(a,c,{parser:m});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 f=bs.call(new os(null,d),t,{...O(e,n),parser:m,configURL:o,version:r,type:i,custom:n,config:a,async:!V(e),serviceWorker:e.getAttribute("service-worker")});x(e,"xworker",{value:f}),s({type:n,xworker:f});const u=e.getAttribute("name");return void(u&&yn[u].resolve(f.ready))}}catch(e){h=e}const g=Yr(i,p),w=f||`${g}${l?`|${l}`:""}`,{interpreter:A,XWorker:b}=_s(n,w,g,p,l,c,i),E=await A,k=j(an.get(i)),B=new os(E,d),S=function(...e){return b.apply(B,e)},R={...F(k,n,structuredClone(cn.get(g)),E),XWorker:S};z(i,k,E,H),k.registerJSModule(E,"polyscript",{IDBMap:_,IDBMapSync:y,XWorker:S,config:R.config,currentScript:n.startsWith("_")?null:e,js_modules:H,workers:gn});for(const t of["Run","RunAsync"]){let n,r,s="",o="";for(const e of ts){const n=d?.main?.[e];n&&e.endsWith(t)&&(e.startsWith("codeBefore")?s=v(n()):o=v(n()))}(s||o)&&N(k,`r${t.slice(1)}`,s,o);for(let e=2;e<ns.length;e++){const s=ns[e],o=d?.main?.[s];o&&s.endsWith(t)&&(s.startsWith("onBefore")?n=o:r=o)}ss(k,R,e,t.endsWith("Async"),n,r)}r.queue=r.queue.then(()=>(s(R),h&&u?.(h,e),d?.main?.onReady?.(R,e)))}},Ss=new Map;let xs=0;const Rs=e=>(Bs.has(e)||Bs.set(e,_n()),Bs.get(e).promise),[{customObserver:Cs,define:$s,whenDefined:Ds,env:Ps,Hook:Ts,XWorker:Os},Ms]=((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]})("polyscript",{customObserver:Es,define:(e,t)=>{let n=null==e;if(n)e="_ps"+xs++;else if(an.has(e)||Ss.has(e))throw new Error(`<script type="${e}"> already registered`);if(!an.has(t?.interpreter))throw new Error("Unspecified interpreter");an.set(e,an.get(t.interpreter));const r=[`script[type="${e}"]`];if(Rs(e),n){const{hooks:n}=t,r=n?.main?.onReady;t={...t,hooks:{...n,main:{...n?.main,onReady(t,n){vs.splice(vs.indexOf(e),1),an.delete(e),Ss.delete(e),Bs.delete(e),n.remove(),r?.(t)}}}},document.head.append(B(document.createElement("script"),{type:e}))}else r.push(`${e}-script`),pn.push(`${e}-`);for(const t of r)ks.set(t,e);vs.push(...r),Ss.set(e,{options:B({env:e},t),known:new WeakSet,queue:Promise.resolve()}),n||As(document),dn(r.join(",")).forEach(js)},whenDefined:Rs,env:hs,Hook:os,XWorker:bs});if(!Ms){const e=new MutationObserver(e=>{const n=ln.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 pn)if(t===n){const t=o.slice(e);if("env"!==t){const e=s.hasAttribute(o)?"add":"remove";s[`${e}EventListener`](t,ws)}break}}continue}for(const e of a)1===e.nodeType&&(As(e),n&&e.matches(n)?ys(e):t(n,e,!0))}}),t=(e,t,n)=>{e&&dn(e,t).forEach(ys),(e=vs.join(","))&&(n&&js(t),dn(e,t).forEach(js))},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(()=>{As(n(document)),t(ln.join(","),document,!1)})}var Fs=new Map([["py","pyodide"],["mpy","micropython"]]);const Ls=[];for(const[t]of Fs){const n=[`script[type="${t}"]`,`${t}-script`];for(const r of document.querySelectorAll(n.join(","))){const{promise:n,resolve:s}=e();Ls.push(n),r.addEventListener(`${t}:done`,s,{once:!0})}}Promise.all(Ls).then(()=>{dispatchEvent(new Event("py:all-done"))});const Ns=(e,t=document)=>[...t.querySelectorAll(e)];var Is={codemirror:()=>Promise.resolve().then(function(){return Io}),"deprecations-manager":()=>import("./deprecations-manager-BWA24KIW.js"),donkey:()=>import("./donkey-CO7t2Z4u.js"),error:()=>import("./error-C-EDWVqG.js"),"py-editor":()=>import("./py-editor-QV6vNT6B.js"),"py-game":()=>import("./py-game-Bw4ByfDi.js"),"py-terminal":()=>import("./py-terminal-Bmqp7Vua.js")};const Ws={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 Hs extends Error{constructor(e,t="",n="text"){super(`(${e}): ${t}`),this.errorCode=e,this.messageType=n,this.name="UserError"}}class Us extends Hs{constructor(e,t){super(e,t),this.name="FetchError"}}const qs=e=>e.text();async function zs(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 Us(Ws.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 Us(Ws.FETCH_NOT_FOUND_ERROR,t);case 401:throw new Us(Ws.FETCH_UNAUTHORIZED_ERROR,t);case 403:throw new Us(Ws.FETCH_FORBIDDEN_ERROR,t);case 500:throw new Us(Ws.FETCH_SERVER_ERROR,t);case 503:throw new Us(Ws.FETCH_UNAVAILABLE_ERROR,t);default:throw new Us(Ws.FETCH_ERROR,t)}}return n}const{BAD_CONFIG:Js,CONFLICTING_CODE:Gs}=Ws,Ks=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=`(${Js}): Invalid URL: ${e}`;throw t&&(n+=`\nexpected ${t} content`),new Error(n)})(n,t),r=n,n=(await zs(r).then(qs)).trim()}return{json:o,toml:s||!o&&!!n,text:n,url:r}},Vs=e=>{const t=e.getAttribute("config-parser");return t?new URL(t,location.href).href:void 0},Xs=e=>new Error(`(${Gs}): ${e}`),Ys=(e,t=location.href)=>new URL(e,t).href,Qs=(e,t,{message:n})=>{let r=`(${Js}): Invalid ${e}`;return t&&(r+=` @ ${t}`),new SyntaxError(`${r}\n${n}`)},Zs=new Map;for(const[e]of Fs){let t,n,r,s,o,a,i,c,l=Ns(`${e}-config`),p=Ns([`script[type="${e}"][config]:not([worker])`,`${e}-script[config]:not([worker])`].join(","));if(l.length>1?r=Xs(`Too many ${e}-config`):l.length&&p.length?r=Xs(`Ambiguous ${e}-config VS config attribute`):l.length?([c]=l,o=c.getAttribute("src")||c.textContent,a=c.getAttribute("type"),i=Vs(c)):p.length&&([c,...p]=p,o=c.getAttribute("config"),i=Vs(c),p.some(e=>e.getAttribute("config")!==o)&&(r=Xs("Unable to use different configs on main"))),!r&&o)try{const{json:e,toml:t,text:c,url:l}=await Ks(o,a);if(l&&(s=Ys(l)),o=c,e||"json"===a)try{n=JSON.parse(c)}catch(e){r=Qs("JSON",l,e)}else if(t||"toml"===a)try{const e=i?await import(i):await Pt(c).then(e=>({parse:()=>e}));n=(e.parse||e.default)(c)}catch(e){r=Qs("TOML",l,e)}}catch(e){r=e}t=async()=>{const e=[];for(const[t,s]of Object.entries(Is))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),Zs.set(e,{config:n,configURL:s,parser:i,plugins:t,error:r})}const{assign:eo}=Object,to="entries",no="readonly",ro="readwrite",so={durability:"default",prefix:"IDBMap"},oo=({target:{result:e}})=>e;class ao extends EventTarget{#e;#t;#n;async#r(e,t){const n=(await this.#e).transaction(to,t,this.#t);return new Promise((t,r)=>eo(e(n.objectStore(to)),{onsuccess:t,onerror:r}))}constructor(e,{durability:t=so.durability,prefix:n=so.prefix}=so){super(),this.#n=n,this.#t={durability:t},this.#e=new Promise((t,n)=>{eo(indexedDB.open(`${this.#n}/${e}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(to),n.oncomplete=()=>t(e)},onsuccess(e){t(oo(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?eo(new Event(t),{message:n}):e)}async close(){(await this.#e).close()}get size(){return this.#r(e=>e.count(),no).then(oo)}async clear(){await this.#r(e=>e.clear(),ro)}async delete(e){await this.#r(t=>t.delete(e),ro)}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),no).then(oo)}async has(e){return void 0!==await this.#r(t=>t.getKey(e),no).then(oo)}async keys(){return await this.#r(e=>e.getAllKeys(),no).then(oo)}async set(e,t){return await this.#r(n=>n.put(t,e),ro),this}async values(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e)))}get[Symbol.toStringTag](){return this.#n}}const io=e=>{e.preventDefault(),e.stopImmediatePropagation()},co="@pyscript.fs",lo="storage permissions not granted",po=new ao(co),fo=async t=>{if(!("showDirectoryPicker"in globalThis))return Promise.reject(new Error("showDirectoryPicker is not supported"));const{promise:n,resolve:r,reject:s}=e(),o={id:"pyscript",mode:"readwrite",...t};t.hint&&(o.startIn=t.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(lo));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]=Ns("button",e);t.addEventListener("click",async t=>{io(t),await a()&&e.close()}),n.addEventListener("click",async t=>{io(t),s(new Error(lo)),e.close()}),document.body.appendChild(e).showModal()}return n};var uo=Object.freeze({__proto__:null,ERROR:lo,NAMESPACE:co,getFileSystemDirectoryHandle:fo,idb:po}),mo={is_pyterminal:()=>!1,sleep:e=>new Promise(t=>setTimeout(t,1e3*e)),getFSHandler:e=>fo(e),storeFSHandler:async(e,t={})=>!!await po.has(e)||fo(t).then(async n=>(await po.set(e,{handler:n,options:t}),!0),()=>!1),async deleteFSHandler(e){const t=await po.has(e);return t&&await po.delete(e),t}};const _o=e=>{x(document,"currentScript",{configurable:!0,get:()=>e})},yo=()=>{delete document.currentScript};var ho=async(e,t,n,r)=>{const s=r.endsWith("Async");(r.startsWith("onBefore")?_o:yo)(n);for(const o of e(r))s?await o(t,n):o(t,n)};const go=()=>!0,wo=e=>{throw new TypeError(e)},Ao=(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 go;case 1:return n[0];default:return e=>n.some(t=>t(e))}},bo=(e,t,n,r=wo)=>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)},vo=(e=>t=>{const[n,r]=((e,t="value")=>{const n=e?.typeof,r=e?.instanceof;return[Ao(n,r),bo(n,r,t,e?.onerror)]})(t);return class extends e{add(e){return n(e)?super.add(e):r(e)}}})(Set);function Eo(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}const{entries:ko}=Object,Bo=["import os as _os","from pathlib import Path as _Path","_path = None"],jo=new class extends Array{#c=!1;#l;#p;constructor(e,...t){super(),this.#p=e,this.#l=t}push(...e){return this.#c&&super.push(...e),this.#p.push(...e)}path(e){for(const t of this.#l)if(this.#c=e.startsWith(t))break}}(Bo,"-"),So=(e,t)=>{for(const[n,r]of ko(t))if(jo.path(`${e}/${n}`),jo.push(`_path = _Path("${e}/${n}")`),"string"==typeof r){const e=JSON.stringify(r);jo.push(`_path.write_text(${e},encoding="utf-8")`)}else jo.push(`if not _os.path.exists("${e}/${n}"):`),jo.push(" _path.mkdir(parents=True, exist_ok=True)"),So(`${e}/${n}`,r)};So(".",{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:\n\t\tsab_error_message='Unable to use `window` or `document` in worker. This requires SharedArrayBuffer support. See: https://docs.pyscript.net/latest/faq/#sharedarraybuffer'\n\t\tif not config.get('sync_main_only',False):js.console.warn(sab_error_message)\n\t\twindow=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 js import console\nfrom pyscript import document,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\telif isinstance(item,(str,int,float,bool)):self._dom_element.append(item)\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):\n\t\t\tif name in self:super().remove(name);self._class_list.remove(name)\n\t\t\telse:console.warn(f\"Class '{name}' not found in element classes.\")\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\telement_id=key[1:]if key.startswith('#')else key\n\t\t\t\tif element.id==element_id:return element\n\t\t\t\tresult=_find_by_id(element._dom_element,element_id)\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,classes=_A,style=_A,**kwargs):\n\t\tfor element in self._elements:element.update(classes=classes,style=style,**kwargs)\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]"}}),Bo.push("import pyscript as _pyscript"),Bo.push(...["_Path","_path","_os","_pyscript"].map(e=>`del ${e}`)),Bo.push("\n");const xo=Bo.join("\n"),Ro=jo.join("\n"),Co=e=>Lo.main[e],$o=e=>Lo.worker[e],Do=(e,t,n,r)=>{e[n]=()=>{const e=r?[r]:[];return e.push(...t(n)),e.map(v).join("\n")}},Po=(e,t)=>{const n="mpy"===t?xo.replace(Ro,""):xo,r={};return Do(r,e,"codeBeforeRun",n),Do(r,e,"codeBeforeRunAsync",n),Do(r,e,"codeAfterRun"),Do(r,e,"codeAfterRunAsync"),r},To=(e,t)=>{const n=[...$o(t)];if(n.length){const r=Eo(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(Eo).join(", ");return Function(`return(w,x)=>(${r})(w,x,...[${s}])`)()}},Oo=vo({typeof:"function"}),Mo=vo({typeof:"string"}),Fo='\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',Lo={main:{onWorker:new Oo,onReady:new Oo,onBeforeRun:new Oo,onBeforeRunAsync:new Oo,onAfterRun:new Oo,onAfterRunAsync:new Oo,codeBeforeRun:new Mo([Fo]),codeBeforeRunAsync:new Mo,codeAfterRun:new Mo,codeAfterRunAsync:new Mo},worker:{onReady:new Oo,onBeforeRun:new Oo,onBeforeRunAsync:new Oo([({interpreter:e})=>{e.registerJsModule("_pyscript",{fs:{ERROR:"storage permissions not granted",NAMESPACE:"@pyscript.fs"},interpreter:e})}]),onAfterRun:new Oo,onAfterRunAsync:new Oo,codeBeforeRun:new Mo,codeBeforeRunAsync:new Mo,codeAfterRun:new Mo,codeAfterRunAsync:new Mo}};var No={get core(){return import("./codemirror-lAW8P_b2.js")},get state(){return import("./codemirror_state-BNbbkoNK.js")},get python(){return import("./codemirror_lang-python-C__shTTP.js")},get language(){return import("./codemirror_language-BRdaMe3x.js").then(function(e){return e.x})},get view(){return import("./codemirror_view-WuoIJFLW.js").then(function(e){return e.t})},get commands(){return import("./codemirror_commands-Og5MXTi1.js")}},Io=Object.freeze({__proto__:null,default:No});
2
+ /*! (c) PyScript Development Team */
3
+ const Wo=e=>import("./donkey-CO7t2Z4u.js").then(t=>t.default(e)),Ho=({tagName:e})=>"SCRIPT"===e,[Uo,qo]=[...Fs.entries()].map(([e,t])=>async function(n,r){await Zs.get(e).plugins;const s=Os.call(new Ts(null,Qo.get(e)),n,{...r,type:t});return B(s.sync,mo),s.ready}),[{PyWorker:zo,MPWorker:Jo,hooks:Go,config:Ko,whenDefined:Vo},Xo]=((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]})("@pyscript/core",{PyWorker:Uo,MPWorker:qo,hooks:Lo,config:{},whenDefined:Ds}),Yo=e=>e?.interpreter&&Ys(e.interpreter),Qo=new Map;for(const[t,n]of Fs){if(Xo)break;const r=(e,n,r)=>{n?r.then(()=>M(e,t,"done")):M(e,t,"done")};let{config:s,configURL:o,parser:a,plugins:i,error:c}=Zs.get(t),l=0;const p=(e=t)=>`${e}-${l++}`,f=async(e,n,r)=>{if(e.hasAttribute("src"))try{return await zs(e.getAttribute("src")).then(qs)}catch(e){n.stderr(e)}if(r)return v(e.textContent);const s=v(E(e.innerHTML));return console.warn(`Deprecated: use <script type="${t}"> for an always safe content parsing:\n`,s),s};let u,d=!1;const m=({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:uo,interpreter:t,js_import:(...e)=>Promise.all(e.map(e=>import(e))),get target(){return Ho(u)?u.target.id:u.id}}))};i().then(()=>{if(c)return;const i=new Map,l={main:{...Po(Co,t),async onReady(e,n){m(e);for(const t of Co("onReady"))await t(e,n);if(i.has(n)){let{message:t}=i.get(n);i.delete(n);const r=t===is;return t=`(${Ws.CONFLICTING_CODE}) ${t} for `,t+=n.cloneNode(r).outerHTML,void e.io.stderr(t)}if(Ho(n)){const s=!V(n),o=n.getAttribute("target"),a=o?ls(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=p()),x(n,"target",{value:a}),M(n,t,"ready"),r(n,s,e["run"+(s?"Async":"")](await f(n,e.io,!0)))}else n._wrap.resolve(e);console.debug("[pyscript/main] PyScript Ready")},onWorker(e,t){B(t.sync,mo);for(const n of Co("onWorker"))n(e,t)},onBeforeRun(e,t){u=t,ho(Co,e,t,"onBeforeRun")},onBeforeRunAsync:(e,t)=>(u=t,ho(Co,e,t,"onBeforeRunAsync")),onAfterRun(e,t){ho(Co,e,t,"onAfterRun")},onAfterRunAsync:(e,t)=>ho(Co,e,t,"onAfterRunAsync")},worker:{...Po($o,t),get onReady(){return To(this,"onReady")},get onBeforeRun(){return To(this,"onBeforeRun")},get onBeforeRunAsync(){return To(this,"onBeforeRunAsync")},get onAfterRun(){return To(this,"onAfterRun")},get onAfterRunAsync(){return To(this,"onAfterRunAsync")}}};Qo.set(t,l);let d=Yo(s);if(!d){const e="script[type='module'][offline]",t=document.querySelector(e)?.src;t&&import.meta.url.startsWith(t.replace(/\.js$/,""))&&(d=`./pyscript/${n}/${n}.mjs`,d=Yo({interpreter:d}))}$s(t,{config:s,configURL:o,interpreter:n,hooks:l,version:d,env:`${t}-script`,parser:a&&new URL(a,location.href).href,onerror(e,t){i.set(t,e)}}),customElements.define(`${t}-script`,class extends HTMLElement{constructor(){B(super(),{_wrap:e(),srcCode:"",executed:!1})}get id(){return super.id||(super.id=p())}set id(e){super.id=e}async connectedCallback(){if(!this.executed){this.executed=!0;const e=!V(this),{io:n,run:s,runAsync:o}=await this._wrap.promise;this.srcCode=await f(this,n,!this.childElementCount),this.replaceChildren(),this.style.display="block",M(this,t,"ready"),r(this,e,(e?o:s)(this.srcCode))}}})}),Ko[t]=structuredClone(s)}export{Ts as H,Fs as T,Os as X,v as a,Cs as b,No as c,S as d,Go as e,s as f,B as g,an as h,Fo as i,$s as j,Ks as k,jt as l,qs as m,oe as n,Yo as o,Jo as p,zo as q,Ys as r,xo as s,Ko as t,Wo as u,Ro as v,e as w,Vo as x};
4
+ //# sourceMappingURL=core-BnOlAruz.js.map