@microtronics/studio-cli 1.3.0-alpha.3 → 1.3.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var $c=Object.create;var En=Object.defineProperty;var Nc=Object.getOwnPropertyDescriptor;var Ic=Object.getOwnPropertyNames;var Mc=Object.getPrototypeOf,Rc=Object.prototype.hasOwnProperty;var Co=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),Lc=(x,A)=>{for(var e in A)En(x,e,{get:A[e],enumerable:!0})},uo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Ic(A))!Rc.call(x,t)&&t!==e&&En(x,t,{get:()=>A[t],enumerable:!(r=Nc(A,t))||r.enumerable});return x};var Y0=(x,A,e)=>(e=x!=null?$c(Mc(x)):{},uo(A||!x||!x.__esModule?En(e,"default",{value:x,enumerable:!0}):e,x)),Oc=x=>uo(En({},"__esModule",{value:!0}),x);var uF=Co((Xm,dF)=>{"use strict";var sB=Object.create,It=Object.defineProperty,aB=Object.getOwnPropertyDescriptor,EF=Object.getOwnPropertyNames,oB=Object.getPrototypeOf,FB=Object.prototype.hasOwnProperty,vB=(x,A,e)=>A in x?It(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,es=(x,A)=>function(){return A||(0,x[EF(x)[0]])((A={exports:{}}).exports,A),A.exports},fB=(x,A)=>{for(var e in A)It(x,e,{get:A[e],enumerable:!0})},BF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of EF(A))!FB.call(x,t)&&t!==e&&It(x,t,{get:()=>A[t],enumerable:!(r=aB(A,t))||r.enumerable});return x},rs=(x,A,e)=>(e=x!=null?sB(oB(x)):{},BF(A||!x||!x.__esModule?It(e,"default",{value:x,enumerable:!0}):e,x)),lB=x=>BF(It({},"__esModule",{value:!0}),x),ex=(x,A,e)=>vB(x,typeof A!="symbol"?A+"":A,e),cB=es({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var a,i=t,l=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],m="./this.program",g=(n,o)=>{throw o};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var q="",_,$;if(u){var T=require("fs");q=__dirname+"/",$=n=>{n=k(n)?new URL(n):n;var o=T.readFileSync(n);return o},_=async(n,o=!0)=>{n=k(n)?new URL(n):n;var v=T.readFileSync(n,o?void 0:"utf8");return v},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(n,o)=>{throw process.exitCode=n,o}}else if(l||c){try{q=new URL(".",r).href}catch{}c&&($=n=>{var o=new XMLHttpRequest;return o.open("GET",n,!1),o.responseType="arraybuffer",o.send(null),new Uint8Array(o.response)}),_=async n=>{if(k(n))return new Promise((v,E)=>{var d=new XMLHttpRequest;d.open("GET",n,!0),d.responseType="arraybuffer",d.onload=()=>{if(d.status==200||d.status==0&&d.response){v(d.response);return}E(d.status)},d.onerror=E,d.send(null)});var o=await fetch(n,{credentials:"same-origin"});if(o.ok)return o.arrayBuffer();throw new Error(o.status+" : "+o.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,F0=!1,R,k=n=>n.startsWith("file://");class O{}class W extends O{}function Y(n){for(var o=0,v=n.length,E=new Uint8Array(v),d;o<v;++o)d=n.charCodeAt(o),E[o]=~d>>8&d;return E}var H,V,n0=!1,r0=!1;function x0(){var n=J0.buffer;$0=new Int8Array(n),W0=new Int16Array(n),sA=new Uint8Array(n),We=new Uint16Array(n),K0=new Int32Array(n),C0=new Uint32Array(n),br=new Float32Array(n),OA=new Float64Array(n),Q0=new BigInt64Array(n),mr=new BigUint64Array(n)}function f0(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Ye(i.preRun.shift());hA(aA)}function U(){n0=!0,!i.noFSInit&&!s.initialized&&s.init(),V0.init(),F.__wasm_call_ctors(),s.ignorePermissions=!1}function v0(){}function c0(){w(),s.quit(),V0.shutdown(),r0=!0}function p0(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)Xe(i.postRun.shift());hA(gA)}function b0(n){i.onAbort?.(n),n=`Aborted(${n})`,N(n),F0=!0,n+=". Build with -sASSERTIONS for more info.";var o=new WebAssembly.RuntimeError(n);throw V?.(o),o}var I0;function L0(){return Y(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
1
+ "use strict";var Hc=Object.create;var Cn=Object.defineProperty;var Jc=Object.getOwnPropertyDescriptor;var Kc=Object.getOwnPropertyNames;var zc=Object.getPrototypeOf,Vc=Object.prototype.hasOwnProperty;var Do=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),Wc=(x,A)=>{for(var e in A)Cn(x,e,{get:A[e],enumerable:!0})},po=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Kc(A))!Vc.call(x,t)&&t!==e&&Cn(x,t,{get:()=>A[t],enumerable:!(r=Jc(A,t))||r.enumerable});return x};var Y0=(x,A,e)=>(e=x!=null?Hc(zc(x)):{},po(A||!x||!x.__esModule?Cn(e,"default",{value:x,enumerable:!0}):e,x)),Xc=x=>po(Cn({},"__esModule",{value:!0}),x);var yF=Do((jj,kF)=>{"use strict";var wB=Object.create,Rt=Object.defineProperty,SB=Object.getOwnPropertyDescriptor,jF=Object.getOwnPropertyNames,qB=Object.getPrototypeOf,TB=Object.prototype.hasOwnProperty,PB=(x,A,e)=>A in x?Rt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,ts=(x,A)=>function(){return A||(0,x[jF(x)[0]])((A={exports:{}}).exports,A),A.exports},$B=(x,A)=>{for(var e in A)Rt(x,e,{get:A[e],enumerable:!0})},hF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of jF(A))!TB.call(x,t)&&t!==e&&Rt(x,t,{get:()=>A[t],enumerable:!(r=SB(A,t))||r.enumerable});return x},ns=(x,A,e)=>(e=x!=null?wB(qB(x)):{},hF(A||!x||!x.__esModule?Rt(e,"default",{value:x,enumerable:!0}):e,x)),NB=x=>hF(Rt({},"__esModule",{value:!0}),x),ex=(x,A,e)=>PB(x,typeof A!="symbol"?A+"":A,e),IB=ts({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,i=t,v=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],m="./this.program",g=(n,o)=>{throw o};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var q="",_,$;if(u){var T=require("fs");q=__dirname+"/",$=n=>{n=k(n)?new URL(n):n;var o=T.readFileSync(n);return o},_=async(n,o=!0)=>{n=k(n)?new URL(n):n;var f=T.readFileSync(n,o?void 0:"utf8");return f},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(n,o)=>{throw process.exitCode=n,o}}else if(v||c){try{q=new URL(".",r).href}catch{}c&&($=n=>{var o=new XMLHttpRequest;return o.open("GET",n,!1),o.responseType="arraybuffer",o.send(null),new Uint8Array(o.response)}),_=async n=>{if(k(n))return new Promise((f,E)=>{var d=new XMLHttpRequest;d.open("GET",n,!0),d.responseType="arraybuffer",d.onload=()=>{if(d.status==200||d.status==0&&d.response){f(d.response);return}E(d.status)},d.onerror=E,d.send(null)});var o=await fetch(n,{credentials:"same-origin"});if(o.ok)return o.arrayBuffer();throw new Error(o.status+" : "+o.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,F0=!1,L,k=n=>n.startsWith("file://");class O{}class V extends O{}function Y(n){for(var o=0,f=n.length,E=new Uint8Array(f),d;o<f;++o)d=n.charCodeAt(o),E[o]=~d>>8&d;return E}var H,W,n0=!1,r0=!1;function x0(){var n=J0.buffer;N0=new Int8Array(n),W0=new Int16Array(n),sA=new Uint8Array(n),We=new Uint16Array(n),K0=new Int32Array(n),C0=new Uint32Array(n),br=new Float32Array(n),OA=new Float64Array(n),Q0=new BigInt64Array(n),mr=new BigUint64Array(n)}function f0(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Ye(i.preRun.shift());gA(aA)}function U(){n0=!0,!i.noFSInit&&!a.initialized&&a.init(),V0.init(),F.__wasm_call_ctors(),a.ignorePermissions=!1}function v0(){}function c0(){w(),a.quit(),V0.shutdown(),r0=!0}function p0(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)Xe(i.postRun.shift());gA(kA)}function b0(n){i.onAbort?.(n),n=`Aborted(${n})`,N(n),F0=!0,n+=". Build with -sASSERTIONS for more info.";var o=new WebAssembly.RuntimeError(n);throw W?.(o),o}var I0;function L0(){return Y(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
2
2
  invoke_vii\0\x07env invoke_ii\0env
3
3
  invoke_iii\0env\binvoke_i\0\0env\vinvoke_iiii\0\benv\r__assert_fail\0 env\finvoke_viiii\0env\finvoke_iiiii\0\renv\rinvoke_viiiii\0env\finvoke_iijii\0env invoke_vi\0env\vinvoke_viii\0 env\vinvoke_iiid\0 env\rinvoke_iiiiii\0env__syscall_faccessat\0\benv__syscall_openat\0\benv__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0\bwasi_snapshot_preview1\x07fd_read\0\bwasi_snapshot_preview1\bfd_close\0\0env__syscall_getcwd\0wasi_snapshot_preview1\x07fd_seek\0env__syscall_unlinkat\0env__syscall_rmdir\0\0env__syscall_renameat\0\bwasi_snapshot_preview1clock_time_get\0env__syscall_readlinkat\0\benvemscripten_resize_heap\0\0env_emscripten_throw_longjmp\0\xAA\xA8\x07!
4
4
 
@@ -1158,8 +1158,8 @@ S\0\0\xCD\0\0Q\0\0\xCD*\0\0\x97*\0\0>S\0\0A!\0\0\f\0\0\x90\0\0\xC6\0\0l\0\
1158
1158
  \0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3
1159
1159
  \0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0A\xC0\xF9\v\xE1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0D\0\0\xFAC\0\0 D\0\0\0D\0\0\xFDC\0\0\xF6C\0\0\xEEC\0\0\xEFC\0\0D\0\0\xEBC\0\0\xE8C\0\0z\0\0\x87Y\0\0\xF3C\0\0\fD\0\0\xF7C\0\0\xF0C\0\0D\0\0\xBCC\0\0\xBDC\0\0MO\0\0\xFDN\0\0\xBCN\0\0\xBDN\0\0,D\0\0\xE3\0\0h&\0\0d-\0\0)\0\0\xA2,\0\0d\0\01\0\0>!\0\0G-\0\0_\0\0y\0\0K0\0\0\v!\0\0*\0\0\x84,\0\0\x81\0\0+\0\02\0\0g!\0\0\xF7)\0\0; \0\0-\0\0\xF01\0\0&\0\0\xAD(\0\0\xF1)\0\0\x97.\0\0\xE2\0\0\xB9-\0\0F-\0\0*\0\0
1160
1160
  *\0\0\xDC\0\x004\0\0\xE7.\0\0*\0\x006*\0\0.*\0\0\x9D/\0\0\xB3-\0\0\x8A3\0\0\x87/\0\0'*\0\x009)\0\0!D\0\0\0O\0\0!D\0\0\xB63\0\0\xC63\0\0\x983\0\0\xA53\0\0\xD73\0\0\xAD3\0\0\xAD3\0\0\0\0\0\0/\0A\xA0\xFE\vy\0\0\0\\\\\0\0\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\xA0\x97\0\0\xA0\x9C\0\0\0\0\0\0\0\0\0 \x9C\0\0 \x9D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xA0\x9D\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\xA4\xFF\v\x9F\0A\xBC\xFF\v\v\x9D\0\0\0\x9C\0\0\0("\0A\xD4\xFF\v\0A\xE4\xFF\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA8\x80\v \x98\xBF\0\0\0\0\0\0\0A\xBC\x80\v\xA0\0A\xD4\x80\v\x9D\0\0\0\xA1\0\0\x008"\0\0\0A\xEC\x80\v\0A\xFC\x80\v\xFF\xFF\xFF\xFF
1161
- \0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function dx(n){return n}async function iA(n){return n}async function LA(n,o){try{var v=await iA(n),E=await WebAssembly.instantiate(v,o);return E}catch(d){N(`failed to asynchronously prepare wasm: ${d}`),b0(d)}}async function Kx(n,o,v){return LA(o,v)}function H0(){var n={env:cx,wasi_snapshot_preview1:cx};return n}async function G0(){function n(j,S){return F=j.exports,q0(F),x0(),F}function o(j){return n(j.instance)}var v=H0();if(i.instantiateWasm)return new Promise((j,S)=>{i.instantiateWasm(v,(I,Z)=>{j(n(I,Z))})});I0??(I0=L0());var E=await Kx(z,I0,v),d=o(E);return d}class ox{constructor(o){ex(this,"name","ExitStatus"),this.message=`Program terminated with exit(${o})`,this.status=o}}var W0,K0,Q0,$0,br,OA,We,C0,mr,sA,hA=n=>{for(;n.length>0;)n.shift()(i)},gA=[],Xe=n=>gA.push(n),aA=[],Ye=n=>aA.push(n),ne=!1,fx=n=>J(n),P0=()=>l0(),Px=globalThis.TextDecoder&&new TextDecoder,lx=(n,o,v,E)=>{var d=o+v;if(E)return d;for(;n[o]&&!(o>=d);)++o;return o},BA=(n,o=0,v,E)=>{var d=lx(n,o,v,E);if(d-o>16&&n.buffer&&Px)return Px.decode(n.subarray(o,d));for(var j="";o<d;){var S=n[o++];if(!(S&128)){j+=String.fromCharCode(S);continue}var I=n[o++]&63;if((S&224)==192){j+=String.fromCharCode((S&31)<<6|I);continue}var Z=n[o++]&63;if((S&240)==224?S=(S&15)<<12|I<<6|Z:S=(S&7)<<18|I<<12|Z<<6|n[o++]&63,S<65536)j+=String.fromCharCode(S);else{var d0=S-65536;j+=String.fromCharCode(55296|d0>>10,56320|d0&1023)}}return j},zx=(n,o,v)=>n?BA(sA,n,o,v):"",Vx=(n,o,v,E)=>b0(`Assertion failed: ${zx(n)}, at: `+[o?zx(o):"unknown filename",v,E?zx(E):"unknown function"]),o0={isAbs:n=>n.charAt(0)==="/",splitPath:n=>{var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return o.exec(n).slice(1)},normalizeArray:(n,o)=>{for(var v=0,E=n.length-1;E>=0;E--){var d=n[E];d==="."?n.splice(E,1):d===".."?(n.splice(E,1),v++):v&&(n.splice(E,1),v--)}if(o)for(;v;v--)n.unshift("..");return n},normalize:n=>{var o=o0.isAbs(n),v=n.slice(-1)==="/";return n=o0.normalizeArray(n.split("/").filter(E=>!!E),!o).join("/"),!n&&!o&&(n="."),n&&v&&(n+="/"),(o?"/":"")+n},dirname:n=>{var o=o0.splitPath(n),v=o[0],E=o[1];return!v&&!E?".":(E&&(E=E.slice(0,-1)),v+E)},basename:n=>n&&n.match(/([^\/]+|\/)\/*$/)[1],join:(...n)=>o0.normalize(n.join("/")),join2:(n,o)=>o0.normalize(n+"/"+o)},jr=()=>{if(u){var n=require("crypto");return o=>n.randomFillSync(o)}return o=>(crypto.getRandomValues(o),0)},ie=n=>(ie=jr())(n),Fx={resolve:(...n)=>{for(var o="",v=!1,E=n.length-1;E>=-1&&!v;E--){var d=E>=0?n[E]:s.cwd();if(typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)return"";o=d+"/"+o,v=o0.isAbs(d)}return o=o0.normalizeArray(o.split("/").filter(j=>!!j),!v).join("/"),(v?"/":"")+o||"."},relative:(n,o)=>{n=Fx.resolve(n).slice(1),o=Fx.resolve(o).slice(1);function v(d0){for(var g0=0;g0<d0.length&&d0[g0]==="";g0++);for(var u0=d0.length-1;u0>=0&&d0[u0]==="";u0--);return g0>u0?[]:d0.slice(g0,u0-g0+1)}for(var E=v(n.split("/")),d=v(o.split("/")),j=Math.min(E.length,d.length),S=j,I=0;I<j;I++)if(E[I]!==d[I]){S=I;break}for(var Z=[],I=S;I<E.length;I++)Z.push("..");return Z=Z.concat(d.slice(S)),Z.join("/")}},Lx=[],CA=n=>{for(var o=0,v=0;v<n.length;++v){var E=n.charCodeAt(v);E<=127?o++:E<=2047?o+=2:E>=55296&&E<=57343?(o+=4,++v):o+=3}return o},se=(n,o,v,E)=>{if(!(E>0))return 0;for(var d=v,j=v+E-1,S=0;S<n.length;++S){var I=n.codePointAt(S);if(I<=127){if(v>=j)break;o[v++]=I}else if(I<=2047){if(v+1>=j)break;o[v++]=192|I>>6,o[v++]=128|I&63}else if(I<=65535){if(v+2>=j)break;o[v++]=224|I>>12,o[v++]=128|I>>6&63,o[v++]=128|I&63}else{if(v+3>=j)break;o[v++]=240|I>>18,o[v++]=128|I>>12&63,o[v++]=128|I>>6&63,o[v++]=128|I&63,S++}}return o[v]=0,v-d},dA=(n,o,v)=>{var E=v>0?v:CA(n)+1,d=new Array(E),j=se(n,d,0,d.length);return o&&(d.length=j),d},hr=()=>{if(!Lx.length){var n=null;if(u){var o=256,v=Buffer.alloc(o),E=0,d=process.stdin.fd;try{E=T.readSync(d,v,0,o)}catch(j){if(j.toString().includes("EOF"))E=0;else throw j}E>0&&(n=v.slice(0,E).toString("utf-8"))}else globalThis.window?.prompt&&(n=window.prompt("Input: "),n!==null&&(n+=`
1162
- `));if(!n)return null;Lx=dA(n,!0)}return Lx.shift()},V0={ttys:[],init(){},shutdown(){},register(n,o){V0.ttys[n]={input:[],output:[],ops:o},s.registerDevice(n,V0.stream_ops)},stream_ops:{open(n){var o=V0.ttys[n.node.rdev];if(!o)throw new s.ErrnoError(43);n.tty=o,n.seekable=!1},close(n){n.tty.ops.fsync(n.tty)},fsync(n){n.tty.ops.fsync(n.tty)},read(n,o,v,E,d){if(!n.tty||!n.tty.ops.get_char)throw new s.ErrnoError(60);for(var j=0,S=0;S<E;S++){var I;try{I=n.tty.ops.get_char(n.tty)}catch{throw new s.ErrnoError(29)}if(I===void 0&&j===0)throw new s.ErrnoError(6);if(I==null)break;j++,o[v+S]=I}return j&&(n.node.atime=Date.now()),j},write(n,o,v,E,d){if(!n.tty||!n.tty.ops.put_char)throw new s.ErrnoError(60);try{for(var j=0;j<E;j++)n.tty.ops.put_char(n.tty,o[v+j])}catch{throw new s.ErrnoError(29)}return E&&(n.node.mtime=n.node.ctime=Date.now()),j}},default_tty_ops:{get_char(n){return hr()},put_char(n,o){o===null||o===10?(M(BA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(M(BA(n.output)),n.output=[])},ioctl_tcgets(n){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(n,o,v){return 0},ioctl_tiocgwinsz(n){return[24,80]}},default_tty1_ops:{put_char(n,o){o===null||o===10?(N(BA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(N(BA(n.output)),n.output=[])}}},uA=n=>{b0()},K={ops_table:null,mount(n){return K.createNode(null,"/",16895,0)},createNode(n,o,v,E){if(s.isBlkdev(v)||s.isFIFO(v))throw new s.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:s.chrdev_stream_ops}});var d=s.createNode(n,o,v,E);return s.isDir(d.mode)?(d.node_ops=K.ops_table.dir.node,d.stream_ops=K.ops_table.dir.stream,d.contents={}):s.isFile(d.mode)?(d.node_ops=K.ops_table.file.node,d.stream_ops=K.ops_table.file.stream,d.usedBytes=0,d.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):s.isLink(d.mode)?(d.node_ops=K.ops_table.link.node,d.stream_ops=K.ops_table.link.stream):s.isChrdev(d.mode)&&(d.node_ops=K.ops_table.chrdev.node,d.stream_ops=K.ops_table.chrdev.stream),d.atime=d.mtime=d.ctime=Date.now(),n&&(n.contents[o]=d,n.atime=n.mtime=n.ctime=d.atime),d},getFileDataAsTypedArray(n){return n.contents.subarray(0,n.usedBytes)},expandFileStorage(n,o){var v=n.contents.length;if(!(v>=o)){var E=1024*1024;o=Math.max(o,v*(v<E?2:1.125)>>>0),v&&(o=Math.max(o,256));var d=K.getFileDataAsTypedArray(n);n.contents=new Uint8Array(o),n.contents.set(d)}},resizeFileStorage(n,o){if(n.usedBytes!=o){var v=n.contents;n.contents=new Uint8Array(o),n.contents.set(v.subarray(0,Math.min(o,n.usedBytes))),n.usedBytes=o}},node_ops:{getattr(n){var o={};return o.dev=s.isChrdev(n.mode)?n.id:1,o.ino=n.id,o.mode=n.mode,o.nlink=1,o.uid=0,o.gid=0,o.rdev=n.rdev,s.isDir(n.mode)?o.size=4096:s.isFile(n.mode)?o.size=n.usedBytes:s.isLink(n.mode)?o.size=n.link.length:o.size=0,o.atime=new Date(n.atime),o.mtime=new Date(n.mtime),o.ctime=new Date(n.ctime),o.blksize=4096,o.blocks=Math.ceil(o.size/o.blksize),o},setattr(n,o){for(let v of["mode","atime","mtime","ctime"])o[v]!=null&&(n[v]=o[v]);o.size!==void 0&&K.resizeFileStorage(n,o.size)},lookup(n,o){throw K.doesNotExistError||(K.doesNotExistError=new s.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(n,o,v,E){return K.createNode(n,o,v,E)},rename(n,o,v){var E;try{E=s.lookupNode(o,v)}catch{}if(E){if(s.isDir(n.mode))for(var d in E.contents)throw new s.ErrnoError(55);s.hashRemoveNode(E)}delete n.parent.contents[n.name],o.contents[v]=n,n.name=v,o.ctime=o.mtime=n.parent.ctime=n.parent.mtime=Date.now()},unlink(n,o){delete n.contents[o],n.ctime=n.mtime=Date.now()},rmdir(n,o){var v=s.lookupNode(n,o);for(var E in v.contents)throw new s.ErrnoError(55);delete n.contents[o],n.ctime=n.mtime=Date.now()},readdir(n){return[".","..",...Object.keys(n.contents)]},symlink(n,o,v){var E=K.createNode(n,o,41471,0);return E.link=v,E},readlink(n){if(!s.isLink(n.mode))throw new s.ErrnoError(28);return n.link}},stream_ops:{read(n,o,v,E,d){var j=n.node.contents;if(d>=n.node.usedBytes)return 0;var S=Math.min(n.node.usedBytes-d,E);return o.set(j.subarray(d,d+S),v),S},write(n,o,v,E,d,j){if(o.buffer===$0.buffer&&(j=!1),!E)return 0;var S=n.node;return S.mtime=S.ctime=Date.now(),j?(S.contents=o.subarray(v,v+E),S.usedBytes=E):S.usedBytes===0&&d===0?(S.contents=o.slice(v,v+E),S.usedBytes=E):(K.expandFileStorage(S,d+E),S.contents.set(o.subarray(v,v+E),d),S.usedBytes=Math.max(S.usedBytes,d+E)),E},llseek(n,o,v){var E=o;if(v===1?E+=n.position:v===2&&s.isFile(n.node.mode)&&(E+=n.node.usedBytes),E<0)throw new s.ErrnoError(28);return E},mmap(n,o,v,E,d){if(!s.isFile(n.node.mode))throw new s.ErrnoError(43);var j,S,I=n.node.contents;if(!(d&2)&&I.buffer===$0.buffer)S=!1,j=I.byteOffset;else{if(S=!0,j=uA(o),!j)throw new s.ErrnoError(48);I&&((v>0||v+o<I.length)&&(I.subarray?I=I.subarray(v,v+o):I=Array.prototype.slice.call(I,v,v+o)),$0.set(I,j))}return{ptr:j,allocated:S}},msync(n,o,v,E,d){return K.stream_ops.write(n,o,0,E,v,!1),0}}},kA=n=>{if(typeof n!="string")return n;var o={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},v=o[n];if(typeof v>"u")throw new Error(`Unknown file open mode: ${n}`);return v},xA=n=>(typeof n=="string"&&(n=dA(n,!0)),n.subarray||(n=new Uint8Array(n)),n),AA=(n,o)=>{var v=0;return n&&(v|=365),o&&(v|=146),v},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},m0={mount(n){return m0.createNode(null,"/",n.opts.fs.lstat(n.opts.root).mode,0)},createNode(n,o,v,E){if(!s.isDir(v)&&!s.isFile(v)&&!s.isLink(v))throw new s.ErrnoError(y0.EINVAL);var d=s.createNode(n,o,v);return d.node_ops=m0.node_ops,d.stream_ops=m0.stream_ops,d},realPath(n){for(var o=[];n.parent!==n;)o.push(n.name),n=n.parent;return o.push(n.mount.opts.root),o.reverse(),o0.join(...o)},node_ops:{getattr(n){var o=m0.realPath(n),v;try{v=n.mount.opts.fs.lstat(o)}catch(E){throw E.code?new s.ErrnoError(y0[E.code]):E}return{dev:v.dev,ino:v.ino,mode:v.mode,nlink:v.nlink,uid:v.uid,gid:v.gid,rdev:v.rdev,size:v.size,atime:v.atime,mtime:v.mtime,ctime:v.ctime,blksize:v.blksize,blocks:v.blocks}},setattr(n,o){var v=m0.realPath(n);try{if(o.mode!==void 0&&(n.mount.opts.fs.chmod(v,o.mode),n.mode=o.mode),o.atime||o.mtime){var E=new Date(o.atime||o.mtime),d=new Date(o.mtime||o.atime);n.mount.opts.fs.utime(v,E,d)}o.size!==void 0&&n.mount.opts.fs.truncate(v,o.size)}catch(j){throw j.code?new s.ErrnoError(y0[j.code]):j}},lookup(n,o){try{var v=o0.join2(m0.realPath(n),o),E=n.mount.opts.fs.lstat(v).mode,d=m0.createNode(n,o,E);return d}catch(j){throw j.code?new s.ErrnoError(y0[j.code]):j}},mknod(n,o,v,E){var d=m0.createNode(n,o,v,E),j=m0.realPath(d);try{s.isDir(d.mode)?d.mount.opts.fs.mkdir(j,d.mode):d.mount.opts.fs.writeFile(j,"",{mode:d.mode})}catch(S){throw S.code?new s.ErrnoError(y0[S.code]):S}return d},rename(n,o,v){var E=m0.realPath(n),d=o0.join2(m0.realPath(o),v);try{n.mount.opts.fs.rename(E,d),n.name=v}catch(j){throw j.code?new s.ErrnoError(y0[j.code]):j}},unlink(n,o){var v=o0.join2(m0.realPath(n),o);try{n.mount.opts.fs.unlink(v)}catch(E){throw E.code?new s.ErrnoError(y0[E.code]):E}},rmdir(n,o){var v=o0.join2(m0.realPath(n),o);try{n.mount.opts.fs.rmdir(v)}catch(E){throw E.code?new s.ErrnoError(y0[E.code]):E}},readdir(n){var o=m0.realPath(n);try{return n.mount.opts.fs.readdir(o)}catch(v){throw v.code?new s.ErrnoError(y0[v.code]):v}},symlink(n,o,v){var E=o0.join2(m0.realPath(n),o);try{n.mount.opts.fs.symlink(v,E)}catch(d){throw d.code?new s.ErrnoError(y0[d.code]):d}},readlink(n){var o=m0.realPath(n);try{return n.mount.opts.fs.readlink(o)}catch(v){throw v.code?new s.ErrnoError(y0[v.code]):v}}},stream_ops:{open(n){var o=m0.realPath(n.node);try{n.nfd=n.node.mount.opts.fs.open(o,n.flags)}catch(v){throw v.code?new s.ErrnoError(y0[v.code]):v}},close(n){try{n.node.mount.opts.fs.close(n.nfd)}catch(o){throw o.code?new s.ErrnoError(y0[o.code]):o}},read(n,o,v,E,d){try{return n.node.mount.opts.fs.read(n.nfd,o,v,E,d)}catch(j){throw j.code?new s.ErrnoError(y0[j.code]):j}},write(n,o,v,E,d){try{return n.node.mount.opts.fs.write(n.nfd,o,v,E,d)}catch(j){throw j.code?new s.ErrnoError(y0[j.code]):j}},llseek(n,o,v){var E=o;if(v===1)E+=n.position;else if(v===2&&s.isFile(n.node.mode))try{var d=n.node.node_ops.getattr(n.node);E+=d.size}catch(j){throw new s.ErrnoError(y0[j.code])}if(E<0)throw new s.ErrnoError(y0.EINVAL);return E}}},DA=async n=>{var o=await _(n);return new Uint8Array(o)},ae=(...n)=>s.createDataFile(...n),kx=n=>n,tx=0,w0=null,oe=n=>{if(tx--,i.monitorRunDependencies?.(tx),tx==0&&w0){var o=w0;w0=null,o()}},$x=n=>{tx++,i.monitorRunDependencies?.(tx)},GA=[],pA=async(n,o)=>{typeof Browser<"u"&&Browser.init();for(var v of GA)if(v.canHandle(o))return v.handle(n,o);return n},FA=async(n,o,v,E,d,j,S,I)=>{var Z=o?Fx.resolve(o0.join2(n,o)):n,d0=kx(`cp ${Z}`);$x(d0);try{var g0=v;typeof v=="string"&&(g0=await DA(v)),g0=await pA(g0,Z),I?.(),j||ae(n,o,g0,E,d,S)}finally{oe(d0)}},gr=(n,o,v,E,d,j,S,I,Z,d0)=>{FA(n,o,v,E,d,I,Z,d0).then(j).catch(S)},s={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(n){ex(this,"name","ErrnoError"),this.errno=n}},FSStream:class{constructor(){ex(this,"shared",{})}get object(){return this.node}set object(n){this.node=n}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(n){this.shared.flags=n}get position(){return this.shared.position}set position(n){this.shared.position=n}},FSNode:class{constructor(n,o,v,E){ex(this,"node_ops",{}),ex(this,"stream_ops",{}),ex(this,"readMode",365),ex(this,"writeMode",146),ex(this,"mounted",null),n||(n=this),this.parent=n,this.mount=n.mount,this.id=s.nextInode++,this.name=o,this.mode=v,this.rdev=E,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(n){n?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(n){n?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return s.isDir(this.mode)}get isDevice(){return s.isChrdev(this.mode)}},lookupPath(n,o={}){if(!n)throw new s.ErrnoError(44);o.follow_mount??(o.follow_mount=!0),o0.isAbs(n)||(n=s.cwd()+"/"+n);x:for(var v=0;v<40;v++){for(var E=n.split("/").filter(d0=>!!d0),d=s.root,j="/",S=0;S<E.length;S++){var I=S===E.length-1;if(I&&o.parent)break;if(E[S]!=="."){if(E[S]===".."){if(j=o0.dirname(j),s.isRoot(d)){n=j+"/"+E.slice(S+1).join("/"),v--;continue x}else d=d.parent;continue}j=o0.join2(j,E[S]);try{d=s.lookupNode(d,E[S])}catch(d0){if(d0?.errno===44&&I&&o.noent_okay)return{path:j};throw d0}if(s.isMountpoint(d)&&(!I||o.follow_mount)&&(d=d.mounted.root),s.isLink(d.mode)&&(!I||o.follow)){if(!d.node_ops.readlink)throw new s.ErrnoError(52);var Z=d.node_ops.readlink(d);o0.isAbs(Z)||(Z=o0.dirname(j)+"/"+Z),n=Z+"/"+E.slice(S+1).join("/");continue x}}}return{path:j,node:d}}throw new s.ErrnoError(32)},getPath(n){for(var o;;){if(s.isRoot(n)){var v=n.mount.mountpoint;return o?v[v.length-1]!=="/"?`${v}/${o}`:v+o:v}o=o?`${n.name}/${o}`:n.name,n=n.parent}},hashName(n,o){for(var v=0,E=0;E<o.length;E++)v=(v<<5)-v+o.charCodeAt(E)|0;return(n+v>>>0)%s.nameTable.length},hashAddNode(n){var o=s.hashName(n.parent.id,n.name);n.name_next=s.nameTable[o],s.nameTable[o]=n},hashRemoveNode(n){var o=s.hashName(n.parent.id,n.name);if(s.nameTable[o]===n)s.nameTable[o]=n.name_next;else for(var v=s.nameTable[o];v;){if(v.name_next===n){v.name_next=n.name_next;break}v=v.name_next}},lookupNode(n,o){var v=s.mayLookup(n);if(v)throw new s.ErrnoError(v);for(var E=s.hashName(n.id,o),d=s.nameTable[E];d;d=d.name_next){var j=d.name;if(d.parent.id===n.id&&j===o)return d}return s.lookup(n,o)},createNode(n,o,v,E){var d=new s.FSNode(n,o,v,E);return s.hashAddNode(d),d},destroyNode(n){s.hashRemoveNode(n)},isRoot(n){return n===n.parent},isMountpoint(n){return!!n.mounted},isFile(n){return(n&61440)===32768},isDir(n){return(n&61440)===16384},isLink(n){return(n&61440)===40960},isChrdev(n){return(n&61440)===8192},isBlkdev(n){return(n&61440)===24576},isFIFO(n){return(n&61440)===4096},isSocket(n){return(n&49152)===49152},flagsToPermissionString(n){var o=["r","w","rw"][n&3];return n&512&&(o+="w"),o},nodePermissions(n,o){return s.ignorePermissions?0:o.includes("r")&&!(n.mode&292)||o.includes("w")&&!(n.mode&146)||o.includes("x")&&!(n.mode&73)?2:0},mayLookup(n){if(!s.isDir(n.mode))return 54;var o=s.nodePermissions(n,"x");return o||(n.node_ops.lookup?0:2)},mayCreate(n,o){if(!s.isDir(n.mode))return 54;try{var v=s.lookupNode(n,o);return 20}catch{}return s.nodePermissions(n,"wx")},mayDelete(n,o,v){var E;try{E=s.lookupNode(n,o)}catch(j){return j.errno}var d=s.nodePermissions(n,"wx");if(d)return d;if(v){if(!s.isDir(E.mode))return 54;if(s.isRoot(E)||s.getPath(E)===s.cwd())return 10}else if(s.isDir(E.mode))return 31;return 0},mayOpen(n,o){if(!n)return 44;if(s.isLink(n.mode))return 32;var v=s.flagsToPermissionString(o);return s.isDir(n.mode)&&(v!=="r"||o&576)?31:s.nodePermissions(n,v)},checkOpExists(n,o){if(!n)throw new s.ErrnoError(o);return n},MAX_OPEN_FDS:4096,nextfd(){for(var n=0;n<=s.MAX_OPEN_FDS;n++)if(!s.streams[n])return n;throw new s.ErrnoError(33)},getStreamChecked(n){var o=s.getStream(n);if(!o)throw new s.ErrnoError(8);return o},getStream:n=>s.streams[n],createStream(n,o=-1){return n=Object.assign(new s.FSStream,n),o==-1&&(o=s.nextfd()),n.fd=o,s.streams[o]=n,n},closeStream(n){s.streams[n]=null},dupStream(n,o=-1){var v=s.createStream(n,o);return v.stream_ops?.dup?.(v),v},doSetAttr(n,o,v){var E=n?.stream_ops.setattr,d=E?n:o;E??(E=o.node_ops.setattr),s.checkOpExists(E,63);try{E(d,v)}catch(j){throw j instanceof RangeError?new s.ErrnoError(22):j}},chrdev_stream_ops:{open(n){var o=s.getDevice(n.node.rdev);n.stream_ops=o.stream_ops,n.stream_ops.open?.(n)},llseek(){throw new s.ErrnoError(70)}},major:n=>n>>8,minor:n=>n&255,makedev:(n,o)=>n<<8|o,registerDevice(n,o){s.devices[n]={stream_ops:o}},getDevice:n=>s.devices[n],getMounts(n){for(var o=[],v=[n];v.length;){var E=v.pop();o.push(E),v.push(...E.mounts)}return o},syncfs(n,o){typeof n=="function"&&(o=n,n=!1),s.syncFSRequests++,s.syncFSRequests>1&&N(`warning: ${s.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var v=s.getMounts(s.root.mount),E=0;function d(I){return s.syncFSRequests--,o(I)}function j(I){if(I)return j.errored?void 0:(j.errored=!0,d(I));++E>=v.length&&d(null)}for(var S of v)S.type.syncfs?S.type.syncfs(S,n,j):j(null)},mount(n,o,v){var E=v==="/",d=!v,j;if(E&&s.root)throw new s.ErrnoError(10);if(!E&&!d){var S=s.lookupPath(v,{follow_mount:!1});if(v=S.path,j=S.node,s.isMountpoint(j))throw new s.ErrnoError(10);if(!s.isDir(j.mode))throw new s.ErrnoError(54)}var I={type:n,opts:o,mountpoint:v,mounts:[]},Z=n.mount(I);return Z.mount=I,I.root=Z,E?s.root=Z:j&&(j.mounted=I,j.mount&&j.mount.mounts.push(I)),Z},unmount(n){var o=s.lookupPath(n,{follow_mount:!1});if(!s.isMountpoint(o.node))throw new s.ErrnoError(28);var v=o.node,E=v.mounted,d=s.getMounts(E);for(var[j,S]of Object.entries(s.nameTable))for(;S;){var I=S.name_next;d.includes(S.mount)&&s.destroyNode(S),S=I}v.mounted=null;var Z=v.mount.mounts.indexOf(E);v.mount.mounts.splice(Z,1)},lookup(n,o){return n.node_ops.lookup(n,o)},mknod(n,o,v){var E=s.lookupPath(n,{parent:!0}),d=E.node,j=o0.basename(n);if(!j)throw new s.ErrnoError(28);if(j==="."||j==="..")throw new s.ErrnoError(20);var S=s.mayCreate(d,j);if(S)throw new s.ErrnoError(S);if(!d.node_ops.mknod)throw new s.ErrnoError(63);return d.node_ops.mknod(d,j,o,v)},statfs(n){return s.statfsNode(s.lookupPath(n,{follow:!0}).node)},statfsStream(n){return s.statfsNode(n.node)},statfsNode(n){var o={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:s.nextInode,ffree:s.nextInode-1,fsid:42,flags:2,namelen:255};return n.node_ops.statfs&&Object.assign(o,n.node_ops.statfs(n.mount.opts.root)),o},create(n,o=438){return o&=4095,o|=32768,s.mknod(n,o,0)},mkdir(n,o=511){return o&=1023,o|=16384,s.mknod(n,o,0)},mkdirTree(n,o){var v=n.split("/"),E="";for(var d of v)if(d){(E||o0.isAbs(n))&&(E+="/"),E+=d;try{s.mkdir(E,o)}catch(j){if(j.errno!=20)throw j}}},mkdev(n,o,v){return typeof v>"u"&&(v=o,o=438),o|=8192,s.mknod(n,o,v)},symlink(n,o){if(!Fx.resolve(n))throw new s.ErrnoError(44);var v=s.lookupPath(o,{parent:!0}),E=v.node;if(!E)throw new s.ErrnoError(44);var d=o0.basename(o),j=s.mayCreate(E,d);if(j)throw new s.ErrnoError(j);if(!E.node_ops.symlink)throw new s.ErrnoError(63);return E.node_ops.symlink(E,d,n)},rename(n,o){var v=o0.dirname(n),E=o0.dirname(o),d=o0.basename(n),j=o0.basename(o),S,I,Z;if(S=s.lookupPath(n,{parent:!0}),I=S.node,S=s.lookupPath(o,{parent:!0}),Z=S.node,!I||!Z)throw new s.ErrnoError(44);if(I.mount!==Z.mount)throw new s.ErrnoError(75);var d0=s.lookupNode(I,d),g0=Fx.relative(n,E);if(g0.charAt(0)!==".")throw new s.ErrnoError(28);if(g0=Fx.relative(o,v),g0.charAt(0)!==".")throw new s.ErrnoError(55);var u0;try{u0=s.lookupNode(Z,j)}catch{}if(d0!==u0){var E0=s.isDir(d0.mode),B0=s.mayDelete(I,d,E0);if(B0)throw new s.ErrnoError(B0);if(B0=u0?s.mayDelete(Z,j,E0):s.mayCreate(Z,j),B0)throw new s.ErrnoError(B0);if(!I.node_ops.rename)throw new s.ErrnoError(63);if(s.isMountpoint(d0)||u0&&s.isMountpoint(u0))throw new s.ErrnoError(10);if(Z!==I&&(B0=s.nodePermissions(I,"w"),B0))throw new s.ErrnoError(B0);s.hashRemoveNode(d0);try{I.node_ops.rename(d0,Z,j),d0.parent=Z}catch(M0){throw M0}finally{s.hashAddNode(d0)}}},rmdir(n){var o=s.lookupPath(n,{parent:!0}),v=o.node,E=o0.basename(n),d=s.lookupNode(v,E),j=s.mayDelete(v,E,!0);if(j)throw new s.ErrnoError(j);if(!v.node_ops.rmdir)throw new s.ErrnoError(63);if(s.isMountpoint(d))throw new s.ErrnoError(10);v.node_ops.rmdir(v,E),s.destroyNode(d)},readdir(n){var o=s.lookupPath(n,{follow:!0}),v=o.node,E=s.checkOpExists(v.node_ops.readdir,54);return E(v)},unlink(n){var o=s.lookupPath(n,{parent:!0}),v=o.node;if(!v)throw new s.ErrnoError(44);var E=o0.basename(n),d=s.lookupNode(v,E),j=s.mayDelete(v,E,!1);if(j)throw new s.ErrnoError(j);if(!v.node_ops.unlink)throw new s.ErrnoError(63);if(s.isMountpoint(d))throw new s.ErrnoError(10);v.node_ops.unlink(v,E),s.destroyNode(d)},readlink(n){var o=s.lookupPath(n),v=o.node;if(!v)throw new s.ErrnoError(44);if(!v.node_ops.readlink)throw new s.ErrnoError(28);return v.node_ops.readlink(v)},stat(n,o){var v=s.lookupPath(n,{follow:!o}),E=v.node,d=s.checkOpExists(E.node_ops.getattr,63);return d(E)},fstat(n){var o=s.getStreamChecked(n),v=o.node,E=o.stream_ops.getattr,d=E?o:v;return E??(E=v.node_ops.getattr),s.checkOpExists(E,63),E(d)},lstat(n){return s.stat(n,!0)},doChmod(n,o,v,E){s.doSetAttr(n,o,{mode:v&4095|o.mode&-4096,ctime:Date.now(),dontFollow:E})},chmod(n,o,v){var E;if(typeof n=="string"){var d=s.lookupPath(n,{follow:!v});E=d.node}else E=n;s.doChmod(null,E,o,v)},lchmod(n,o){s.chmod(n,o,!0)},fchmod(n,o){var v=s.getStreamChecked(n);s.doChmod(v,v.node,o,!1)},doChown(n,o,v){s.doSetAttr(n,o,{timestamp:Date.now(),dontFollow:v})},chown(n,o,v,E){var d;if(typeof n=="string"){var j=s.lookupPath(n,{follow:!E});d=j.node}else d=n;s.doChown(null,d,E)},lchown(n,o,v){s.chown(n,o,v,!0)},fchown(n,o,v){var E=s.getStreamChecked(n);s.doChown(E,E.node,!1)},doTruncate(n,o,v){if(s.isDir(o.mode))throw new s.ErrnoError(31);if(!s.isFile(o.mode))throw new s.ErrnoError(28);var E=s.nodePermissions(o,"w");if(E)throw new s.ErrnoError(E);s.doSetAttr(n,o,{size:v,timestamp:Date.now()})},truncate(n,o){if(o<0)throw new s.ErrnoError(28);var v;if(typeof n=="string"){var E=s.lookupPath(n,{follow:!0});v=E.node}else v=n;s.doTruncate(null,v,o)},ftruncate(n,o){var v=s.getStreamChecked(n);if(o<0||(v.flags&2097155)===0)throw new s.ErrnoError(28);s.doTruncate(v,v.node,o)},utime(n,o,v){var E=s.lookupPath(n,{follow:!0}),d=E.node,j=s.checkOpExists(d.node_ops.setattr,63);j(d,{atime:o,mtime:v})},open(n,o,v=438){if(n==="")throw new s.ErrnoError(44);o=kA(o),o&64?v=v&4095|32768:v=0;var E,d;if(typeof n=="object")E=n;else{d=n.endsWith("/");var j=s.lookupPath(n,{follow:!(o&131072),noent_okay:!0});E=j.node,n=j.path}var S=!1;if(o&64)if(E){if(o&128)throw new s.ErrnoError(20)}else{if(d)throw new s.ErrnoError(31);E=s.mknod(n,v|511,0),S=!0}if(!E)throw new s.ErrnoError(44);if(s.isChrdev(E.mode)&&(o&=-513),o&65536&&!s.isDir(E.mode))throw new s.ErrnoError(54);if(!S){var I=s.mayOpen(E,o);if(I)throw new s.ErrnoError(I)}o&512&&!S&&s.truncate(E,0),o&=-131713;var Z=s.createStream({node:E,path:s.getPath(E),flags:o,seekable:!0,position:0,stream_ops:E.stream_ops,ungotten:[],error:!1});return Z.stream_ops.open&&Z.stream_ops.open(Z),S&&s.chmod(E,v&511),Z},close(n){if(s.isClosed(n))throw new s.ErrnoError(8);n.getdents&&(n.getdents=null);try{n.stream_ops.close&&n.stream_ops.close(n)}catch(o){throw o}finally{s.closeStream(n.fd)}n.fd=null},isClosed(n){return n.fd===null},llseek(n,o,v){if(s.isClosed(n))throw new s.ErrnoError(8);if(!n.seekable||!n.stream_ops.llseek)throw new s.ErrnoError(70);if(v!=0&&v!=1&&v!=2)throw new s.ErrnoError(28);return n.position=n.stream_ops.llseek(n,o,v),n.ungotten=[],n.position},read(n,o,v,E,d){if(E<0||d<0)throw new s.ErrnoError(28);if(s.isClosed(n))throw new s.ErrnoError(8);if((n.flags&2097155)===1)throw new s.ErrnoError(8);if(s.isDir(n.node.mode))throw new s.ErrnoError(31);if(!n.stream_ops.read)throw new s.ErrnoError(28);var j=typeof d<"u";if(!j)d=n.position;else if(!n.seekable)throw new s.ErrnoError(70);var S=n.stream_ops.read(n,o,v,E,d);return j||(n.position+=S),S},write(n,o,v,E,d,j){if(E<0||d<0)throw new s.ErrnoError(28);if(s.isClosed(n))throw new s.ErrnoError(8);if((n.flags&2097155)===0)throw new s.ErrnoError(8);if(s.isDir(n.node.mode))throw new s.ErrnoError(31);if(!n.stream_ops.write)throw new s.ErrnoError(28);n.seekable&&n.flags&1024&&s.llseek(n,0,2);var S=typeof d<"u";if(!S)d=n.position;else if(!n.seekable)throw new s.ErrnoError(70);var I=n.stream_ops.write(n,o,v,E,d,j);return S||(n.position+=I),I},mmap(n,o,v,E,d){if((E&2)!==0&&(d&2)===0&&(n.flags&2097155)!==2)throw new s.ErrnoError(2);if((n.flags&2097155)===1)throw new s.ErrnoError(2);if(!n.stream_ops.mmap)throw new s.ErrnoError(43);if(!o)throw new s.ErrnoError(28);return n.stream_ops.mmap(n,o,v,E,d)},msync(n,o,v,E,d){return n.stream_ops.msync?n.stream_ops.msync(n,o,v,E,d):0},ioctl(n,o,v){if(!n.stream_ops.ioctl)throw new s.ErrnoError(59);return n.stream_ops.ioctl(n,o,v)},readFile(n,o={}){o.flags=o.flags||0,o.encoding=o.encoding||"binary",o.encoding!=="utf8"&&o.encoding!=="binary"&&b0(`Invalid encoding type "${o.encoding}"`);var v=s.open(n,o.flags),E=s.stat(n),d=E.size,j=new Uint8Array(d);return s.read(v,j,0,d,0),o.encoding==="utf8"&&(j=BA(j)),s.close(v),j},writeFile(n,o,v={}){v.flags=v.flags||577;var E=s.open(n,v.flags,v.mode);o=xA(o),s.write(E,o,0,o.byteLength,void 0,v.canOwn),s.close(E)},cwd:()=>s.currentPath,chdir(n){var o=s.lookupPath(n,{follow:!0});if(o.node===null)throw new s.ErrnoError(44);if(!s.isDir(o.node.mode))throw new s.ErrnoError(54);var v=s.nodePermissions(o.node,"x");if(v)throw new s.ErrnoError(v);s.currentPath=o.path},createDefaultDirectories(){s.mkdir("/tmp"),s.mkdir("/home"),s.mkdir("/home/web_user")},createDefaultDevices(){s.mkdir("/dev"),s.registerDevice(s.makedev(1,3),{read:()=>0,write:(E,d,j,S,I)=>S,llseek:()=>0}),s.mkdev("/dev/null",s.makedev(1,3)),V0.register(s.makedev(5,0),V0.default_tty_ops),V0.register(s.makedev(6,0),V0.default_tty1_ops),s.mkdev("/dev/tty",s.makedev(5,0)),s.mkdev("/dev/tty1",s.makedev(6,0));var n=new Uint8Array(1024),o=0,v=()=>(o===0&&(ie(n),o=n.byteLength),n[--o]);s.createDevice("/dev","random",v),s.createDevice("/dev","urandom",v),s.mkdir("/dev/shm"),s.mkdir("/dev/shm/tmp")},createSpecialDirectories(){s.mkdir("/proc");var n=s.mkdir("/proc/self");s.mkdir("/proc/self/fd"),s.mount({mount(){var o=s.createNode(n,"fd",16895,73);return o.stream_ops={llseek:K.stream_ops.llseek},o.node_ops={lookup(v,E){var d=+E,j=s.getStreamChecked(d),S={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>j.path},id:d+1};return S.parent=S,S},readdir(){return Array.from(s.streams.entries()).filter(([v,E])=>E).map(([v,E])=>v.toString())}},o}},{},"/proc/self/fd")},createStandardStreams(n,o,v){n?s.createDevice("/dev","stdin",n):s.symlink("/dev/tty","/dev/stdin"),o?s.createDevice("/dev","stdout",null,o):s.symlink("/dev/tty","/dev/stdout"),v?s.createDevice("/dev","stderr",null,v):s.symlink("/dev/tty1","/dev/stderr");var E=s.open("/dev/stdin",0),d=s.open("/dev/stdout",1),j=s.open("/dev/stderr",1)},staticInit(){s.nameTable=new Array(4096),s.mount(K,{},"/"),s.createDefaultDirectories(),s.createDefaultDevices(),s.createSpecialDirectories(),s.filesystems={MEMFS:K,PROXYFS:m0}},init(n,o,v){s.initialized=!0,n??(n=i.stdin),o??(o=i.stdout),v??(v=i.stderr),s.createStandardStreams(n,o,v)},quit(){s.initialized=!1,h(0);for(var n of s.streams)n&&s.close(n)},findObject(n,o){var v=s.analyzePath(n,o);return v.exists?v.object:null},analyzePath(n,o){try{var v=s.lookupPath(n,{follow:!o});n=v.path}catch{}var E={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var v=s.lookupPath(n,{parent:!0});E.parentExists=!0,E.parentPath=v.path,E.parentObject=v.node,E.name=o0.basename(n),v=s.lookupPath(n,{follow:!o}),E.exists=!0,E.path=v.path,E.object=v.node,E.name=v.node.name,E.isRoot=v.path==="/"}catch(d){E.error=d.errno}return E},createPath(n,o,v,E){n=typeof n=="string"?n:s.getPath(n);for(var d=o.split("/").reverse();d.length;){var j=d.pop();if(j){var S=o0.join2(n,j);try{s.mkdir(S)}catch(I){if(I.errno!=20)throw I}n=S}}return S},createFile(n,o,v,E,d){var j=o0.join2(typeof n=="string"?n:s.getPath(n),o),S=AA(E,d);return s.create(j,S)},createDataFile(n,o,v,E,d,j){var S=o;n&&(n=typeof n=="string"?n:s.getPath(n),S=o?o0.join2(n,o):n);var I=AA(E,d),Z=s.create(S,I);if(v){v=xA(v),s.chmod(Z,I|146);var d0=s.open(Z,577);s.write(d0,v,0,v.length,0,j),s.close(d0),s.chmod(Z,I)}},createDevice(n,o,v,E){var d,j=o0.join2(typeof n=="string"?n:s.getPath(n),o),S=AA(!!v,!!E);(d=s.createDevice).major??(d.major=64);var I=s.makedev(s.createDevice.major++,0);return s.registerDevice(I,{open(Z){Z.seekable=!1},close(Z){E?.buffer?.length&&E(10)},read(Z,d0,g0,u0,E0){for(var B0=0,M0=0;M0<u0;M0++){var xx;try{xx=v()}catch{throw new s.ErrnoError(29)}if(xx===void 0&&B0===0)throw new s.ErrnoError(6);if(xx==null)break;B0++,d0[g0+M0]=xx}return B0&&(Z.node.atime=Date.now()),B0},write(Z,d0,g0,u0,E0){for(var B0=0;B0<u0;B0++)try{E(d0[g0+B0])}catch{throw new s.ErrnoError(29)}return u0&&(Z.node.mtime=Z.node.ctime=Date.now()),B0}}),s.mkdev(j,S,I)},forceLoadFile(n){if(n.isDevice||n.isFolder||n.link||n.contents)return!0;if(globalThis.XMLHttpRequest)b0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{n.contents=$(n.url)}catch{throw new s.ErrnoError(29)}},createLazyFile(n,o,v,E,d){class j{constructor(){ex(this,"lengthKnown",!1),ex(this,"chunks",[])}get(E0){if(!(E0>this.length-1||E0<0)){var B0=E0%this.chunkSize,M0=E0/this.chunkSize|0;return this.getter(M0)[B0]}}setDataGetter(E0){this.getter=E0}cacheLength(){var E0=new XMLHttpRequest;E0.open("HEAD",v,!1),E0.send(null),E0.status>=200&&E0.status<300||E0.status===304||b0("Couldn't load "+v+". Status: "+E0.status);var B0=Number(E0.getResponseHeader("Content-length")),M0,xx=(M0=E0.getResponseHeader("Accept-Ranges"))&&M0==="bytes",Ex=(M0=E0.getResponseHeader("Content-Encoding"))&&M0==="gzip",Dx=1024*1024;xx||(Dx=B0);var Nx=(Ix,Bx)=>{Ix>Bx&&b0("invalid range ("+Ix+", "+Bx+") or no bytes requested!"),Bx>B0-1&&b0("only "+B0+" bytes available! programmer error!");var Mx=new XMLHttpRequest;return Mx.open("GET",v,!1),B0!==Dx&&Mx.setRequestHeader("Range","bytes="+Ix+"-"+Bx),Mx.responseType="arraybuffer",Mx.overrideMimeType&&Mx.overrideMimeType("text/plain; charset=x-user-defined"),Mx.send(null),Mx.status>=200&&Mx.status<300||Mx.status===304||b0("Couldn't load "+v+". Status: "+Mx.status),Mx.response!==void 0?new Uint8Array(Mx.response||[]):dA(Mx.responseText||"",!0)},Ux=this;Ux.setDataGetter(Ix=>{var Bx=Ix*Dx,Mx=(Ix+1)*Dx-1;return Mx=Math.min(Mx,B0-1),typeof Ux.chunks[Ix]>"u"&&(Ux.chunks[Ix]=Nx(Bx,Mx)),typeof Ux.chunks[Ix]>"u"&&b0("doXHR failed!"),Ux.chunks[Ix]}),(Ex||!B0)&&(Dx=B0=1,B0=this.getter(0).length,Dx=B0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=B0,this._chunkSize=Dx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){c||b0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var S=new j,I={isDevice:!1,contents:S}}else var I={isDevice:!1,url:v};var Z=s.createFile(n,o,I,E,d);I.contents?Z.contents=I.contents:I.url&&(Z.contents=null,Z.url=I.url),Object.defineProperties(Z,{usedBytes:{get:function(){return this.contents.length}}});var d0={};for(let[u0,E0]of Object.entries(Z.stream_ops))d0[u0]=(...B0)=>(s.forceLoadFile(Z),E0(...B0));function g0(u0,E0,B0,M0,xx){var Ex=u0.node.contents;if(xx>=Ex.length)return 0;var Dx=Math.min(Ex.length-xx,M0);if(Ex.slice)for(var Nx=0;Nx<Dx;Nx++)E0[B0+Nx]=Ex[xx+Nx];else for(var Nx=0;Nx<Dx;Nx++)E0[B0+Nx]=Ex.get(xx+Nx);return Dx}return d0.read=(u0,E0,B0,M0,xx)=>(s.forceLoadFile(Z),g0(u0,E0,B0,M0,xx)),d0.mmap=(u0,E0,B0,M0,xx)=>{s.forceLoadFile(Z);var Ex=uA(E0);if(!Ex)throw new s.ErrnoError(48);return g0(u0,$0,Ex,E0,B0),{ptr:Ex,allocated:!0}},Z.stream_ops=d0,Z}},h0={currentUmask:18,calculateAt(n,o,v){if(o0.isAbs(o))return o;var E;if(n===-100)E=s.cwd();else{var d=h0.getStreamFromFD(n);E=d.path}if(o.length==0){if(!v)throw new s.ErrnoError(44);return E}return E+"/"+o},writeStat(n,o){C0[n>>2]=o.dev,C0[n+4>>2]=o.mode,C0[n+8>>2]=o.nlink,C0[n+12>>2]=o.uid,C0[n+16>>2]=o.gid,C0[n+20>>2]=o.rdev,Q0[n+24>>3]=BigInt(o.size),K0[n+32>>2]=4096,K0[n+36>>2]=o.blocks;var v=o.atime.getTime(),E=o.mtime.getTime(),d=o.ctime.getTime();return Q0[n+40>>3]=BigInt(Math.floor(v/1e3)),C0[n+48>>2]=v%1e3*1e3*1e3,Q0[n+56>>3]=BigInt(Math.floor(E/1e3)),C0[n+64>>2]=E%1e3*1e3*1e3,Q0[n+72>>3]=BigInt(Math.floor(d/1e3)),C0[n+80>>2]=d%1e3*1e3*1e3,Q0[n+88>>3]=BigInt(o.ino),0},writeStatFs(n,o){C0[n+4>>2]=o.bsize,C0[n+60>>2]=o.bsize,Q0[n+8>>3]=BigInt(o.blocks),Q0[n+16>>3]=BigInt(o.bfree),Q0[n+24>>3]=BigInt(o.bavail),Q0[n+32>>3]=BigInt(o.files),Q0[n+40>>3]=BigInt(o.ffree),C0[n+48>>2]=o.fsid,C0[n+64>>2]=o.flags,C0[n+56>>2]=o.namelen},doMsync(n,o,v,E,d){if(!s.isFile(o.node.mode))throw new s.ErrnoError(43);if(E&2)return 0;var j=sA.slice(n,n+v);s.msync(o,j,d,v,E)},getStreamFromFD(n){var o=s.getStreamChecked(n);return o},varargs:void 0,getStr(n){var o=zx(n);return o}};function ye(n,o,v,E){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),v&-8)return-28;var d=s.lookupPath(o,{follow:!0}),j=d.node;if(!j)return-44;var S="";return v&4&&(S+="r"),v&2&&(S+="w"),v&1&&(S+="x"),S&&s.nodePermissions(j,S)?-2:0}catch(I){if(typeof s>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}var yA=()=>{var n=K0[+h0.varargs>>2];return h0.varargs+=4,n},bA=yA;function kr(n,o,v){h0.varargs=v;try{var E=h0.getStreamFromFD(n);switch(o){case 0:{var d=yA();if(d<0)return-28;for(;s.streams[d];)d++;var j;return j=s.dupStream(E,d),j.fd}case 1:case 2:return 0;case 3:return E.flags;case 4:{var d=yA(),S=289792;return E.flags=E.flags&~S|d&S,0}case 12:{var d=bA(),I=0;return W0[d+I>>1]=2,0}case 13:case 14:return 0}return-28}catch(Z){if(typeof s>"u"||Z.name!=="ErrnoError")throw Z;return-Z.errno}}var Fe=(n,o,v)=>se(n,sA,o,v);function Qe(n,o){try{if(o===0)return-28;var v=s.cwd(),E=CA(v)+1;return o<E?-68:(Fe(v,n,o),E)}catch(d){if(typeof s>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function Ze(n,o,v){h0.varargs=v;try{var E=h0.getStreamFromFD(n);switch(o){case 21509:return E.tty?0:-59;case 21505:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var d=E.tty.ops.ioctl_tcgets(E),j=bA();K0[j>>2]=d.c_iflag||0,K0[j+4>>2]=d.c_oflag||0,K0[j+8>>2]=d.c_cflag||0,K0[j+12>>2]=d.c_lflag||0;for(var S=0;S<32;S++)$0[j+S+17]=d.c_cc[S]||0;return 0}return 0}case 21510:case 21511:case 21512:return E.tty?0:-59;case 21506:case 21507:case 21508:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){for(var j=bA(),I=K0[j>>2],Z=K0[j+4>>2],d0=K0[j+8>>2],g0=K0[j+12>>2],u0=[],S=0;S<32;S++)u0.push($0[j+S+17]);return E.tty.ops.ioctl_tcsets(E.tty,o,{c_iflag:I,c_oflag:Z,c_cflag:d0,c_lflag:g0,c_cc:u0})}return 0}case 21519:{if(!E.tty)return-59;var j=bA();return K0[j>>2]=0,0}case 21520:return E.tty?-28:-59;case 21537:case 21531:{var j=bA();return s.ioctl(E,o,j)}case 21523:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var E0=E.tty.ops.ioctl_tiocgwinsz(E.tty),j=bA();W0[j>>1]=E0[0],W0[j+2>>1]=E0[1]}return 0}case 21524:return E.tty?0:-59;case 21515:return E.tty?0:-59;default:return-28}}catch(B0){if(typeof s>"u"||B0.name!=="ErrnoError")throw B0;return-B0.errno}}function yr(n,o,v,E){h0.varargs=E;try{o=h0.getStr(o),o=h0.calculateAt(n,o);var d=E?yA():0;return v&64&&(d&=~h0.currentUmask),s.open(o,v,d).fd}catch(j){if(typeof s>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function _r(n,o,v,E){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),E<=0)return-28;var d=s.readlink(o),j=Math.min(E,CA(d)),S=$0[v+j];return Fe(d,v,E+1),$0[v+j]=S,j}catch(I){if(typeof s>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function wr(n,o,v,E){try{return o=h0.getStr(o),E=h0.getStr(E),o=h0.calculateAt(n,o),E=h0.calculateAt(v,E),s.rename(o,E),0}catch(d){if(typeof s>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function ve(n){try{return n=h0.getStr(n),s.rmdir(n),0}catch(o){if(typeof s>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function xr(n,o,v){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),!v)s.unlink(o);else if(v===512)s.rmdir(o);else return-28;return 0}catch(E){if(typeof s>"u"||E.name!=="ErrnoError")throw E;return-E.errno}}var UA=()=>{throw new W},fe=()=>performance.now(),Sr=()=>Date.now(),Ar=1,er=n=>n>=0&&n<=3,HA=9007199254740992,le=-9007199254740992,_e=n=>n<le||n>HA?NaN:Number(n);function rr(n,o,v){if(o=_e(o),!er(n))return 28;var E;if(n===0)E=Sr();else if(Ar)E=fe();else return 52;var d=Math.round(E*1e3*1e3);return Q0[v>>3]=BigInt(d),0}var tr=()=>2147483648,nr=(n,o)=>Math.ceil(n/o)*o,qr=n=>{var o=J0.buffer.byteLength,v=(n-o+65535)/65536|0;try{return J0.grow(v),x0(),1}catch{}},Tr=n=>{var o=sA.length;n>>>=0;var v=tr();if(n>v)return!1;for(var E=1;E<=4;E*=2){var d=o*(1+.2/E);d=Math.min(d,n+100663296);var j=Math.min(v,nr(Math.max(n,d),65536)),S=qr(j);if(S)return!0}return!1};function ce(n){try{var o=h0.getStreamFromFD(n);return s.close(o),0}catch(v){if(typeof s>"u"||v.name!=="ErrnoError")throw v;return v.errno}}var Pr=(n,o,v,E)=>{for(var d=0,j=0;j<v;j++){var S=C0[o>>2],I=C0[o+4>>2];o+=8;var Z=s.read(n,$0,S,I,E);if(Z<0)return-1;if(d+=Z,Z<I)break;typeof E<"u"&&(E+=Z)}return d};function $r(n,o,v,E){try{var d=h0.getStreamFromFD(n),j=Pr(d,o,v);return C0[E>>2]=j,0}catch(S){if(typeof s>"u"||S.name!=="ErrnoError")throw S;return S.errno}}function ir(n,o,v,E){o=_e(o);try{if(isNaN(o))return 22;var d=h0.getStreamFromFD(n);return s.llseek(d,o,v),Q0[E>>3]=BigInt(d.position),d.getdents&&o===0&&v===0&&(d.getdents=null),0}catch(j){if(typeof s>"u"||j.name!=="ErrnoError")throw j;return j.errno}}var sr=(n,o,v,E)=>{for(var d=0,j=0;j<v;j++){var S=C0[o>>2],I=C0[o+4>>2];o+=8;var Z=s.write(n,$0,S,I,E);if(Z<0)return-1;if(d+=Z,Z<I)break;typeof E<"u"&&(E+=Z)}return d};function JA(n,o,v,E){try{var d=h0.getStreamFromFD(n),j=sr(d,o,v);return C0[E>>2]=j,0}catch(S){if(typeof s>"u"||S.name!=="ErrnoError")throw S;return S.errno}}var ar=0,KA=()=>ne||ar>0,we=n=>{R=n,KA()||(i.onExit?.(n),F0=!0),g(n,new ox(n))},Ox=(n,o)=>{R=n,KA()||c0(),we(n)},Nr=n=>{if(n instanceof ox||n=="unwind")return R;g(1,n)},_A=n=>Q(n),zA=n=>{var o=CA(n)+1,v=_A(o);return Fe(n,v,o),v},Se=[],yx=n=>{var o=Se[n];return o||(Se[n]=o=O0.get(n)),o},Ee=(...n)=>s.createPath(...n),VA=(...n)=>s.unlink(...n),f=(...n)=>s.createLazyFile(...n),B=(...n)=>s.createDevice(...n);if(s.createPreloadedFile=gr,s.preloadFile=FA,s.staticInit(),i.noExitRuntime&&(ne=i.noExitRuntime),i.preloadPlugins&&(GA=i.preloadPlugins),i.print&&(M=i.print),i.printErr&&(N=i.printErr),i.wasmBinary&&(z=i.wasmBinary),i.arguments&&(b=i.arguments),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();i.callMain=or,i.addRunDependency=$x,i.removeRunDependency=oe,i.FS_preloadFile=FA,i.FS_unlink=VA,i.FS_createPath=Ee,i.FS_createDevice=B,i.FS=s,i.FS_createDataFile=ae,i.FS_createLazyFile=f,i.PROXYFS=m0;var p,h,w,P,J,Q,l0,k0,Z0,J0,O0;function q0(n){p=i._main=n.__main_argc_argv,h=n.fflush,w=n.__funcs_on_exit,P=n.setThrew,J=n._emscripten_stack_restore,Q=n._emscripten_stack_alloc,l0=n.emscripten_stack_get_current,k0=J0=n.memory,Z0=O0=n.__indirect_function_table}var cx={__assert_fail:Vx,__syscall_faccessat:ye,__syscall_fcntl64:kr,__syscall_getcwd:Qe,__syscall_ioctl:Ze,__syscall_openat:yr,__syscall_readlinkat:_r,__syscall_renameat:wr,__syscall_rmdir:ve,__syscall_unlinkat:xr,_emscripten_throw_longjmp:UA,clock_time_get:rr,emscripten_resize_heap:Tr,fd_close:ce,fd_read:$r,fd_seek:ir,fd_write:JA,invoke_i:WA,invoke_ii:Wx,invoke_iii:Xx,invoke_iiid:qt,invoke_iiii:eA,invoke_iiiii:ux,invoke_iiiiii:tt,invoke_iijii:wt,invoke_v:wx,invoke_vi:St,invoke_vii:Gx,invoke_viii:qe,invoke_viiii:vA,invoke_viiiii:Ir};function wx(n){var o=P0();try{yx(n)()}catch(v){if(fx(o),!(v instanceof O))throw v;P(1,0)}}function Gx(n,o,v){var E=P0();try{yx(n)(o,v)}catch(d){if(fx(E),!(d instanceof O))throw d;P(1,0)}}function Wx(n,o){var v=P0();try{return yx(n)(o)}catch(E){if(fx(v),!(E instanceof O))throw E;P(1,0)}}function Xx(n,o,v){var E=P0();try{return yx(n)(o,v)}catch(d){if(fx(E),!(d instanceof O))throw d;P(1,0)}}function WA(n){var o=P0();try{return yx(n)()}catch(v){if(fx(o),!(v instanceof O))throw v;P(1,0)}}function eA(n,o,v,E){var d=P0();try{return yx(n)(o,v,E)}catch(j){if(fx(d),!(j instanceof O))throw j;P(1,0)}}function vA(n,o,v,E,d){var j=P0();try{yx(n)(o,v,E,d)}catch(S){if(fx(j),!(S instanceof O))throw S;P(1,0)}}function ux(n,o,v,E,d){var j=P0();try{return yx(n)(o,v,E,d)}catch(S){if(fx(j),!(S instanceof O))throw S;P(1,0)}}function Ir(n,o,v,E,d,j){var S=P0();try{yx(n)(o,v,E,d,j)}catch(I){if(fx(S),!(I instanceof O))throw I;P(1,0)}}function wt(n,o,v,E,d){var j=P0();try{return yx(n)(o,v,E,d)}catch(S){if(fx(j),!(S instanceof O))throw S;P(1,0)}}function St(n,o){var v=P0();try{yx(n)(o)}catch(E){if(fx(v),!(E instanceof O))throw E;P(1,0)}}function qe(n,o,v,E){var d=P0();try{yx(n)(o,v,E)}catch(j){if(fx(d),!(j instanceof O))throw j;P(1,0)}}function qt(n,o,v,E){var d=P0();try{return yx(n)(o,v,E)}catch(j){if(fx(d),!(j instanceof O))throw j;P(1,0)}}function tt(n,o,v,E,d,j){var S=P0();try{return yx(n)(o,v,E,d,j)}catch(I){if(fx(S),!(I instanceof O))throw I;P(1,0)}}function or(n=[]){var o=p;n.unshift(m);var v=n.length,E=_A((v+1)*4),d=E;for(var j of n)C0[d>>2]=zA(j),d+=4;C0[d>>2]=0;try{var S=o(v,E);return Ox(S,!0),S}catch(I){return Nr(I)}}function XA(n=b){if(tx>0){w0=XA;return}if(f0(),tx>0){w0=XA;return}function o(){if(i.calledRun=!0,!F0){U(),H?.(i),i.onRuntimeInitialized?.();var v=i.noInitialRun||!0;v||or(n),p0()}}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),o()},1)):o()}var F;return F=await G0(),XA(),n0?a=i:a=new Promise((n,o)=>{H=n,V=o}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),EB=es({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var a,i=t,l=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],m="./this.program",g=(f,B)=>{throw B};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var q="",_,$;if(u){var T=require("fs");q=__dirname+"/",$=f=>{f=k(f)?new URL(f):f;var B=T.readFileSync(f);return B},_=async(f,B=!0)=>{f=k(f)?new URL(f):f;var p=T.readFileSync(f,B?void 0:"utf8");return p},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(f,B)=>{throw process.exitCode=f,B}}else if(l||c){try{q=new URL(".",r).href}catch{}c&&($=f=>{var B=new XMLHttpRequest;return B.open("GET",f,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),_=async f=>{if(k(f))return new Promise((p,h)=>{var w=new XMLHttpRequest;w.open("GET",f,!0),w.responseType="arraybuffer",w.onload=()=>{if(w.status==200||w.status==0&&w.response){p(w.response);return}h(w.status)},w.onerror=h,w.send(null)});var B=await fetch(f,{credentials:"same-origin"});if(B.ok)return B.arrayBuffer();throw new Error(B.status+" : "+B.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,F0=!1,R,k=f=>f.startsWith("file://");class O{}class W extends O{}function Y(f){for(var B=0,p=f.length,h=new Uint8Array(p),w;B<p;++B)w=f.charCodeAt(B),h[B]=~w>>8&w;return h}var H,V,n0=!1,r0=!1;function x0(){var f=_A.buffer;$0=new Int8Array(f),W0=new Int16Array(f),sA=new Uint8Array(f),We=new Uint16Array(f),K0=new Int32Array(f),C0=new Uint32Array(f),br=new Float32Array(f),OA=new Float64Array(f),Q0=new BigInt64Array(f),mr=new BigUint64Array(f)}function f0(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Ye(i.preRun.shift());hA(aA)}function U(){n0=!0,!i.noFSInit&&!s.initialized&&s.init(),V0.init(),VA.__wasm_call_ctors(),s.ignorePermissions=!1}function v0(){}function c0(){sr(),s.quit(),V0.shutdown(),r0=!0}function p0(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)Xe(i.postRun.shift());hA(gA)}function b0(f){i.onAbort?.(f),f=`Aborted(${f})`,N(f),F0=!0,f+=". Build with -sASSERTIONS for more info.";var B=new WebAssembly.RuntimeError(f);throw V?.(B),B}var I0;function L0(){return Y(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
1161
+ \0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function dx(n){return n}async function iA(n){return n}async function LA(n,o){try{var f=await iA(n),E=await WebAssembly.instantiate(f,o);return E}catch(d){N(`failed to asynchronously prepare wasm: ${d}`),b0(d)}}async function Kx(n,o,f){return LA(o,f)}function H0(){var n={env:cx,wasi_snapshot_preview1:cx};return n}async function G0(){function n(j,S){return F=j.exports,q0(F),x0(),F}function o(j){return n(j.instance)}var f=H0();if(i.instantiateWasm)return new Promise((j,S)=>{i.instantiateWasm(f,(I,Z)=>{j(n(I,Z))})});I0??(I0=L0());var E=await Kx(z,I0,f),d=o(E);return d}class ox{constructor(o){ex(this,"name","ExitStatus"),this.message=`Program terminated with exit(${o})`,this.status=o}}var W0,K0,Q0,N0,br,OA,We,C0,mr,sA,gA=n=>{for(;n.length>0;)n.shift()(i)},kA=[],Xe=n=>kA.push(n),aA=[],Ye=n=>aA.push(n),se=!1,fx=n=>J(n),P0=()=>l0(),Px=globalThis.TextDecoder&&new TextDecoder,lx=(n,o,f,E)=>{var d=o+f;if(E)return d;for(;n[o]&&!(o>=d);)++o;return o},BA=(n,o=0,f,E)=>{var d=lx(n,o,f,E);if(d-o>16&&n.buffer&&Px)return Px.decode(n.subarray(o,d));for(var j="";o<d;){var S=n[o++];if(!(S&128)){j+=String.fromCharCode(S);continue}var I=n[o++]&63;if((S&224)==192){j+=String.fromCharCode((S&31)<<6|I);continue}var Z=n[o++]&63;if((S&240)==224?S=(S&15)<<12|I<<6|Z:S=(S&7)<<18|I<<12|Z<<6|n[o++]&63,S<65536)j+=String.fromCharCode(S);else{var d0=S-65536;j+=String.fromCharCode(55296|d0>>10,56320|d0&1023)}}return j},zx=(n,o,f)=>n?BA(sA,n,o,f):"",Vx=(n,o,f,E)=>b0(`Assertion failed: ${zx(n)}, at: `+[o?zx(o):"unknown filename",f,E?zx(E):"unknown function"]),o0={isAbs:n=>n.charAt(0)==="/",splitPath:n=>{var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return o.exec(n).slice(1)},normalizeArray:(n,o)=>{for(var f=0,E=n.length-1;E>=0;E--){var d=n[E];d==="."?n.splice(E,1):d===".."?(n.splice(E,1),f++):f&&(n.splice(E,1),f--)}if(o)for(;f;f--)n.unshift("..");return n},normalize:n=>{var o=o0.isAbs(n),f=n.slice(-1)==="/";return n=o0.normalizeArray(n.split("/").filter(E=>!!E),!o).join("/"),!n&&!o&&(n="."),n&&f&&(n+="/"),(o?"/":"")+n},dirname:n=>{var o=o0.splitPath(n),f=o[0],E=o[1];return!f&&!E?".":(E&&(E=E.slice(0,-1)),f+E)},basename:n=>n&&n.match(/([^\/]+|\/)\/*$/)[1],join:(...n)=>o0.normalize(n.join("/")),join2:(n,o)=>o0.normalize(n+"/"+o)},jr=()=>{if(u){var n=require("crypto");return o=>n.randomFillSync(o)}return o=>(crypto.getRandomValues(o),0)},ae=n=>(ae=jr())(n),Fx={resolve:(...n)=>{for(var o="",f=!1,E=n.length-1;E>=-1&&!f;E--){var d=E>=0?n[E]:a.cwd();if(typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)return"";o=d+"/"+o,f=o0.isAbs(d)}return o=o0.normalizeArray(o.split("/").filter(j=>!!j),!f).join("/"),(f?"/":"")+o||"."},relative:(n,o)=>{n=Fx.resolve(n).slice(1),o=Fx.resolve(o).slice(1);function f(d0){for(var g0=0;g0<d0.length&&d0[g0]==="";g0++);for(var u0=d0.length-1;u0>=0&&d0[u0]==="";u0--);return g0>u0?[]:d0.slice(g0,u0-g0+1)}for(var E=f(n.split("/")),d=f(o.split("/")),j=Math.min(E.length,d.length),S=j,I=0;I<j;I++)if(E[I]!==d[I]){S=I;break}for(var Z=[],I=S;I<E.length;I++)Z.push("..");return Z=Z.concat(d.slice(S)),Z.join("/")}},Lx=[],CA=n=>{for(var o=0,f=0;f<n.length;++f){var E=n.charCodeAt(f);E<=127?o++:E<=2047?o+=2:E>=55296&&E<=57343?(o+=4,++f):o+=3}return o},oe=(n,o,f,E)=>{if(!(E>0))return 0;for(var d=f,j=f+E-1,S=0;S<n.length;++S){var I=n.codePointAt(S);if(I<=127){if(f>=j)break;o[f++]=I}else if(I<=2047){if(f+1>=j)break;o[f++]=192|I>>6,o[f++]=128|I&63}else if(I<=65535){if(f+2>=j)break;o[f++]=224|I>>12,o[f++]=128|I>>6&63,o[f++]=128|I&63}else{if(f+3>=j)break;o[f++]=240|I>>18,o[f++]=128|I>>12&63,o[f++]=128|I>>6&63,o[f++]=128|I&63,S++}}return o[f]=0,f-d},dA=(n,o,f)=>{var E=f>0?f:CA(n)+1,d=new Array(E),j=oe(n,d,0,d.length);return o&&(d.length=j),d},hr=()=>{if(!Lx.length){var n=null;if(u){var o=256,f=Buffer.alloc(o),E=0,d=process.stdin.fd;try{E=T.readSync(d,f,0,o)}catch(j){if(j.toString().includes("EOF"))E=0;else throw j}E>0&&(n=f.slice(0,E).toString("utf-8"))}else globalThis.window?.prompt&&(n=window.prompt("Input: "),n!==null&&(n+=`
1162
+ `));if(!n)return null;Lx=dA(n,!0)}return Lx.shift()},V0={ttys:[],init(){},shutdown(){},register(n,o){V0.ttys[n]={input:[],output:[],ops:o},a.registerDevice(n,V0.stream_ops)},stream_ops:{open(n){var o=V0.ttys[n.node.rdev];if(!o)throw new a.ErrnoError(43);n.tty=o,n.seekable=!1},close(n){n.tty.ops.fsync(n.tty)},fsync(n){n.tty.ops.fsync(n.tty)},read(n,o,f,E,d){if(!n.tty||!n.tty.ops.get_char)throw new a.ErrnoError(60);for(var j=0,S=0;S<E;S++){var I;try{I=n.tty.ops.get_char(n.tty)}catch{throw new a.ErrnoError(29)}if(I===void 0&&j===0)throw new a.ErrnoError(6);if(I==null)break;j++,o[f+S]=I}return j&&(n.node.atime=Date.now()),j},write(n,o,f,E,d){if(!n.tty||!n.tty.ops.put_char)throw new a.ErrnoError(60);try{for(var j=0;j<E;j++)n.tty.ops.put_char(n.tty,o[f+j])}catch{throw new a.ErrnoError(29)}return E&&(n.node.mtime=n.node.ctime=Date.now()),j}},default_tty_ops:{get_char(n){return hr()},put_char(n,o){o===null||o===10?(M(BA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(M(BA(n.output)),n.output=[])},ioctl_tcgets(n){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(n,o,f){return 0},ioctl_tiocgwinsz(n){return[24,80]}},default_tty1_ops:{put_char(n,o){o===null||o===10?(N(BA(n.output)),n.output=[]):o!=0&&n.output.push(o)},fsync(n){n.output?.length>0&&(N(BA(n.output)),n.output=[])}}},uA=n=>{b0()},K={ops_table:null,mount(n){return K.createNode(null,"/",16895,0)},createNode(n,o,f,E){if(a.isBlkdev(f)||a.isFIFO(f))throw new a.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:a.chrdev_stream_ops}});var d=a.createNode(n,o,f,E);return a.isDir(d.mode)?(d.node_ops=K.ops_table.dir.node,d.stream_ops=K.ops_table.dir.stream,d.contents={}):a.isFile(d.mode)?(d.node_ops=K.ops_table.file.node,d.stream_ops=K.ops_table.file.stream,d.usedBytes=0,d.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):a.isLink(d.mode)?(d.node_ops=K.ops_table.link.node,d.stream_ops=K.ops_table.link.stream):a.isChrdev(d.mode)&&(d.node_ops=K.ops_table.chrdev.node,d.stream_ops=K.ops_table.chrdev.stream),d.atime=d.mtime=d.ctime=Date.now(),n&&(n.contents[o]=d,n.atime=n.mtime=n.ctime=d.atime),d},getFileDataAsTypedArray(n){return n.contents.subarray(0,n.usedBytes)},expandFileStorage(n,o){var f=n.contents.length;if(!(f>=o)){var E=1024*1024;o=Math.max(o,f*(f<E?2:1.125)>>>0),f&&(o=Math.max(o,256));var d=K.getFileDataAsTypedArray(n);n.contents=new Uint8Array(o),n.contents.set(d)}},resizeFileStorage(n,o){if(n.usedBytes!=o){var f=n.contents;n.contents=new Uint8Array(o),n.contents.set(f.subarray(0,Math.min(o,n.usedBytes))),n.usedBytes=o}},node_ops:{getattr(n){var o={};return o.dev=a.isChrdev(n.mode)?n.id:1,o.ino=n.id,o.mode=n.mode,o.nlink=1,o.uid=0,o.gid=0,o.rdev=n.rdev,a.isDir(n.mode)?o.size=4096:a.isFile(n.mode)?o.size=n.usedBytes:a.isLink(n.mode)?o.size=n.link.length:o.size=0,o.atime=new Date(n.atime),o.mtime=new Date(n.mtime),o.ctime=new Date(n.ctime),o.blksize=4096,o.blocks=Math.ceil(o.size/o.blksize),o},setattr(n,o){for(let f of["mode","atime","mtime","ctime"])o[f]!=null&&(n[f]=o[f]);o.size!==void 0&&K.resizeFileStorage(n,o.size)},lookup(n,o){throw K.doesNotExistError||(K.doesNotExistError=new a.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(n,o,f,E){return K.createNode(n,o,f,E)},rename(n,o,f){var E;try{E=a.lookupNode(o,f)}catch{}if(E){if(a.isDir(n.mode))for(var d in E.contents)throw new a.ErrnoError(55);a.hashRemoveNode(E)}delete n.parent.contents[n.name],o.contents[f]=n,n.name=f,o.ctime=o.mtime=n.parent.ctime=n.parent.mtime=Date.now()},unlink(n,o){delete n.contents[o],n.ctime=n.mtime=Date.now()},rmdir(n,o){var f=a.lookupNode(n,o);for(var E in f.contents)throw new a.ErrnoError(55);delete n.contents[o],n.ctime=n.mtime=Date.now()},readdir(n){return[".","..",...Object.keys(n.contents)]},symlink(n,o,f){var E=K.createNode(n,o,41471,0);return E.link=f,E},readlink(n){if(!a.isLink(n.mode))throw new a.ErrnoError(28);return n.link}},stream_ops:{read(n,o,f,E,d){var j=n.node.contents;if(d>=n.node.usedBytes)return 0;var S=Math.min(n.node.usedBytes-d,E);return o.set(j.subarray(d,d+S),f),S},write(n,o,f,E,d,j){if(o.buffer===N0.buffer&&(j=!1),!E)return 0;var S=n.node;return S.mtime=S.ctime=Date.now(),j?(S.contents=o.subarray(f,f+E),S.usedBytes=E):S.usedBytes===0&&d===0?(S.contents=o.slice(f,f+E),S.usedBytes=E):(K.expandFileStorage(S,d+E),S.contents.set(o.subarray(f,f+E),d),S.usedBytes=Math.max(S.usedBytes,d+E)),E},llseek(n,o,f){var E=o;if(f===1?E+=n.position:f===2&&a.isFile(n.node.mode)&&(E+=n.node.usedBytes),E<0)throw new a.ErrnoError(28);return E},mmap(n,o,f,E,d){if(!a.isFile(n.node.mode))throw new a.ErrnoError(43);var j,S,I=n.node.contents;if(!(d&2)&&I.buffer===N0.buffer)S=!1,j=I.byteOffset;else{if(S=!0,j=uA(o),!j)throw new a.ErrnoError(48);I&&((f>0||f+o<I.length)&&(I.subarray?I=I.subarray(f,f+o):I=Array.prototype.slice.call(I,f,f+o)),N0.set(I,j))}return{ptr:j,allocated:S}},msync(n,o,f,E,d){return K.stream_ops.write(n,o,0,E,f,!1),0}}},yA=n=>{if(typeof n!="string")return n;var o={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},f=o[n];if(typeof f>"u")throw new Error(`Unknown file open mode: ${n}`);return f},xA=n=>(typeof n=="string"&&(n=dA(n,!0)),n.subarray||(n=new Uint8Array(n)),n),AA=(n,o)=>{var f=0;return n&&(f|=365),o&&(f|=146),f},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},m0={mount(n){return m0.createNode(null,"/",n.opts.fs.lstat(n.opts.root).mode,0)},createNode(n,o,f,E){if(!a.isDir(f)&&!a.isFile(f)&&!a.isLink(f))throw new a.ErrnoError(y0.EINVAL);var d=a.createNode(n,o,f);return d.node_ops=m0.node_ops,d.stream_ops=m0.stream_ops,d},realPath(n){for(var o=[];n.parent!==n;)o.push(n.name),n=n.parent;return o.push(n.mount.opts.root),o.reverse(),o0.join(...o)},node_ops:{getattr(n){var o=m0.realPath(n),f;try{f=n.mount.opts.fs.lstat(o)}catch(E){throw E.code?new a.ErrnoError(y0[E.code]):E}return{dev:f.dev,ino:f.ino,mode:f.mode,nlink:f.nlink,uid:f.uid,gid:f.gid,rdev:f.rdev,size:f.size,atime:f.atime,mtime:f.mtime,ctime:f.ctime,blksize:f.blksize,blocks:f.blocks}},setattr(n,o){var f=m0.realPath(n);try{if(o.mode!==void 0&&(n.mount.opts.fs.chmod(f,o.mode),n.mode=o.mode),o.atime||o.mtime){var E=new Date(o.atime||o.mtime),d=new Date(o.mtime||o.atime);n.mount.opts.fs.utime(f,E,d)}o.size!==void 0&&n.mount.opts.fs.truncate(f,o.size)}catch(j){throw j.code?new a.ErrnoError(y0[j.code]):j}},lookup(n,o){try{var f=o0.join2(m0.realPath(n),o),E=n.mount.opts.fs.lstat(f).mode,d=m0.createNode(n,o,E);return d}catch(j){throw j.code?new a.ErrnoError(y0[j.code]):j}},mknod(n,o,f,E){var d=m0.createNode(n,o,f,E),j=m0.realPath(d);try{a.isDir(d.mode)?d.mount.opts.fs.mkdir(j,d.mode):d.mount.opts.fs.writeFile(j,"",{mode:d.mode})}catch(S){throw S.code?new a.ErrnoError(y0[S.code]):S}return d},rename(n,o,f){var E=m0.realPath(n),d=o0.join2(m0.realPath(o),f);try{n.mount.opts.fs.rename(E,d),n.name=f}catch(j){throw j.code?new a.ErrnoError(y0[j.code]):j}},unlink(n,o){var f=o0.join2(m0.realPath(n),o);try{n.mount.opts.fs.unlink(f)}catch(E){throw E.code?new a.ErrnoError(y0[E.code]):E}},rmdir(n,o){var f=o0.join2(m0.realPath(n),o);try{n.mount.opts.fs.rmdir(f)}catch(E){throw E.code?new a.ErrnoError(y0[E.code]):E}},readdir(n){var o=m0.realPath(n);try{return n.mount.opts.fs.readdir(o)}catch(f){throw f.code?new a.ErrnoError(y0[f.code]):f}},symlink(n,o,f){var E=o0.join2(m0.realPath(n),o);try{n.mount.opts.fs.symlink(f,E)}catch(d){throw d.code?new a.ErrnoError(y0[d.code]):d}},readlink(n){var o=m0.realPath(n);try{return n.mount.opts.fs.readlink(o)}catch(f){throw f.code?new a.ErrnoError(y0[f.code]):f}}},stream_ops:{open(n){var o=m0.realPath(n.node);try{n.nfd=n.node.mount.opts.fs.open(o,n.flags)}catch(f){throw f.code?new a.ErrnoError(y0[f.code]):f}},close(n){try{n.node.mount.opts.fs.close(n.nfd)}catch(o){throw o.code?new a.ErrnoError(y0[o.code]):o}},read(n,o,f,E,d){try{return n.node.mount.opts.fs.read(n.nfd,o,f,E,d)}catch(j){throw j.code?new a.ErrnoError(y0[j.code]):j}},write(n,o,f,E,d){try{return n.node.mount.opts.fs.write(n.nfd,o,f,E,d)}catch(j){throw j.code?new a.ErrnoError(y0[j.code]):j}},llseek(n,o,f){var E=o;if(f===1)E+=n.position;else if(f===2&&a.isFile(n.node.mode))try{var d=n.node.node_ops.getattr(n.node);E+=d.size}catch(j){throw new a.ErrnoError(y0[j.code])}if(E<0)throw new a.ErrnoError(y0.EINVAL);return E}}},DA=async n=>{var o=await _(n);return new Uint8Array(o)},Fe=(...n)=>a.createDataFile(...n),kx=n=>n,tx=0,w0=null,ve=n=>{if(tx--,i.monitorRunDependencies?.(tx),tx==0&&w0){var o=w0;w0=null,o()}},$x=n=>{tx++,i.monitorRunDependencies?.(tx)},GA=[],pA=async(n,o)=>{typeof Browser<"u"&&Browser.init();for(var f of GA)if(f.canHandle(o))return f.handle(n,o);return n},FA=async(n,o,f,E,d,j,S,I)=>{var Z=o?Fx.resolve(o0.join2(n,o)):n,d0=kx(`cp ${Z}`);$x(d0);try{var g0=f;typeof f=="string"&&(g0=await DA(f)),g0=await pA(g0,Z),I?.(),j||Fe(n,o,g0,E,d,S)}finally{ve(d0)}},gr=(n,o,f,E,d,j,S,I,Z,d0)=>{FA(n,o,f,E,d,I,Z,d0).then(j).catch(S)},a={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(n){ex(this,"name","ErrnoError"),this.errno=n}},FSStream:class{constructor(){ex(this,"shared",{})}get object(){return this.node}set object(n){this.node=n}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(n){this.shared.flags=n}get position(){return this.shared.position}set position(n){this.shared.position=n}},FSNode:class{constructor(n,o,f,E){ex(this,"node_ops",{}),ex(this,"stream_ops",{}),ex(this,"readMode",365),ex(this,"writeMode",146),ex(this,"mounted",null),n||(n=this),this.parent=n,this.mount=n.mount,this.id=a.nextInode++,this.name=o,this.mode=f,this.rdev=E,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(n){n?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(n){n?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return a.isDir(this.mode)}get isDevice(){return a.isChrdev(this.mode)}},lookupPath(n,o={}){if(!n)throw new a.ErrnoError(44);o.follow_mount??(o.follow_mount=!0),o0.isAbs(n)||(n=a.cwd()+"/"+n);x:for(var f=0;f<40;f++){for(var E=n.split("/").filter(d0=>!!d0),d=a.root,j="/",S=0;S<E.length;S++){var I=S===E.length-1;if(I&&o.parent)break;if(E[S]!=="."){if(E[S]===".."){if(j=o0.dirname(j),a.isRoot(d)){n=j+"/"+E.slice(S+1).join("/"),f--;continue x}else d=d.parent;continue}j=o0.join2(j,E[S]);try{d=a.lookupNode(d,E[S])}catch(d0){if(d0?.errno===44&&I&&o.noent_okay)return{path:j};throw d0}if(a.isMountpoint(d)&&(!I||o.follow_mount)&&(d=d.mounted.root),a.isLink(d.mode)&&(!I||o.follow)){if(!d.node_ops.readlink)throw new a.ErrnoError(52);var Z=d.node_ops.readlink(d);o0.isAbs(Z)||(Z=o0.dirname(j)+"/"+Z),n=Z+"/"+E.slice(S+1).join("/");continue x}}}return{path:j,node:d}}throw new a.ErrnoError(32)},getPath(n){for(var o;;){if(a.isRoot(n)){var f=n.mount.mountpoint;return o?f[f.length-1]!=="/"?`${f}/${o}`:f+o:f}o=o?`${n.name}/${o}`:n.name,n=n.parent}},hashName(n,o){for(var f=0,E=0;E<o.length;E++)f=(f<<5)-f+o.charCodeAt(E)|0;return(n+f>>>0)%a.nameTable.length},hashAddNode(n){var o=a.hashName(n.parent.id,n.name);n.name_next=a.nameTable[o],a.nameTable[o]=n},hashRemoveNode(n){var o=a.hashName(n.parent.id,n.name);if(a.nameTable[o]===n)a.nameTable[o]=n.name_next;else for(var f=a.nameTable[o];f;){if(f.name_next===n){f.name_next=n.name_next;break}f=f.name_next}},lookupNode(n,o){var f=a.mayLookup(n);if(f)throw new a.ErrnoError(f);for(var E=a.hashName(n.id,o),d=a.nameTable[E];d;d=d.name_next){var j=d.name;if(d.parent.id===n.id&&j===o)return d}return a.lookup(n,o)},createNode(n,o,f,E){var d=new a.FSNode(n,o,f,E);return a.hashAddNode(d),d},destroyNode(n){a.hashRemoveNode(n)},isRoot(n){return n===n.parent},isMountpoint(n){return!!n.mounted},isFile(n){return(n&61440)===32768},isDir(n){return(n&61440)===16384},isLink(n){return(n&61440)===40960},isChrdev(n){return(n&61440)===8192},isBlkdev(n){return(n&61440)===24576},isFIFO(n){return(n&61440)===4096},isSocket(n){return(n&49152)===49152},flagsToPermissionString(n){var o=["r","w","rw"][n&3];return n&512&&(o+="w"),o},nodePermissions(n,o){return a.ignorePermissions?0:o.includes("r")&&!(n.mode&292)||o.includes("w")&&!(n.mode&146)||o.includes("x")&&!(n.mode&73)?2:0},mayLookup(n){if(!a.isDir(n.mode))return 54;var o=a.nodePermissions(n,"x");return o||(n.node_ops.lookup?0:2)},mayCreate(n,o){if(!a.isDir(n.mode))return 54;try{var f=a.lookupNode(n,o);return 20}catch{}return a.nodePermissions(n,"wx")},mayDelete(n,o,f){var E;try{E=a.lookupNode(n,o)}catch(j){return j.errno}var d=a.nodePermissions(n,"wx");if(d)return d;if(f){if(!a.isDir(E.mode))return 54;if(a.isRoot(E)||a.getPath(E)===a.cwd())return 10}else if(a.isDir(E.mode))return 31;return 0},mayOpen(n,o){if(!n)return 44;if(a.isLink(n.mode))return 32;var f=a.flagsToPermissionString(o);return a.isDir(n.mode)&&(f!=="r"||o&576)?31:a.nodePermissions(n,f)},checkOpExists(n,o){if(!n)throw new a.ErrnoError(o);return n},MAX_OPEN_FDS:4096,nextfd(){for(var n=0;n<=a.MAX_OPEN_FDS;n++)if(!a.streams[n])return n;throw new a.ErrnoError(33)},getStreamChecked(n){var o=a.getStream(n);if(!o)throw new a.ErrnoError(8);return o},getStream:n=>a.streams[n],createStream(n,o=-1){return n=Object.assign(new a.FSStream,n),o==-1&&(o=a.nextfd()),n.fd=o,a.streams[o]=n,n},closeStream(n){a.streams[n]=null},dupStream(n,o=-1){var f=a.createStream(n,o);return f.stream_ops?.dup?.(f),f},doSetAttr(n,o,f){var E=n?.stream_ops.setattr,d=E?n:o;E??(E=o.node_ops.setattr),a.checkOpExists(E,63);try{E(d,f)}catch(j){throw j instanceof RangeError?new a.ErrnoError(22):j}},chrdev_stream_ops:{open(n){var o=a.getDevice(n.node.rdev);n.stream_ops=o.stream_ops,n.stream_ops.open?.(n)},llseek(){throw new a.ErrnoError(70)}},major:n=>n>>8,minor:n=>n&255,makedev:(n,o)=>n<<8|o,registerDevice(n,o){a.devices[n]={stream_ops:o}},getDevice:n=>a.devices[n],getMounts(n){for(var o=[],f=[n];f.length;){var E=f.pop();o.push(E),f.push(...E.mounts)}return o},syncfs(n,o){typeof n=="function"&&(o=n,n=!1),a.syncFSRequests++,a.syncFSRequests>1&&N(`warning: ${a.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var f=a.getMounts(a.root.mount),E=0;function d(I){return a.syncFSRequests--,o(I)}function j(I){if(I)return j.errored?void 0:(j.errored=!0,d(I));++E>=f.length&&d(null)}for(var S of f)S.type.syncfs?S.type.syncfs(S,n,j):j(null)},mount(n,o,f){var E=f==="/",d=!f,j;if(E&&a.root)throw new a.ErrnoError(10);if(!E&&!d){var S=a.lookupPath(f,{follow_mount:!1});if(f=S.path,j=S.node,a.isMountpoint(j))throw new a.ErrnoError(10);if(!a.isDir(j.mode))throw new a.ErrnoError(54)}var I={type:n,opts:o,mountpoint:f,mounts:[]},Z=n.mount(I);return Z.mount=I,I.root=Z,E?a.root=Z:j&&(j.mounted=I,j.mount&&j.mount.mounts.push(I)),Z},unmount(n){var o=a.lookupPath(n,{follow_mount:!1});if(!a.isMountpoint(o.node))throw new a.ErrnoError(28);var f=o.node,E=f.mounted,d=a.getMounts(E);for(var[j,S]of Object.entries(a.nameTable))for(;S;){var I=S.name_next;d.includes(S.mount)&&a.destroyNode(S),S=I}f.mounted=null;var Z=f.mount.mounts.indexOf(E);f.mount.mounts.splice(Z,1)},lookup(n,o){return n.node_ops.lookup(n,o)},mknod(n,o,f){var E=a.lookupPath(n,{parent:!0}),d=E.node,j=o0.basename(n);if(!j)throw new a.ErrnoError(28);if(j==="."||j==="..")throw new a.ErrnoError(20);var S=a.mayCreate(d,j);if(S)throw new a.ErrnoError(S);if(!d.node_ops.mknod)throw new a.ErrnoError(63);return d.node_ops.mknod(d,j,o,f)},statfs(n){return a.statfsNode(a.lookupPath(n,{follow:!0}).node)},statfsStream(n){return a.statfsNode(n.node)},statfsNode(n){var o={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:a.nextInode,ffree:a.nextInode-1,fsid:42,flags:2,namelen:255};return n.node_ops.statfs&&Object.assign(o,n.node_ops.statfs(n.mount.opts.root)),o},create(n,o=438){return o&=4095,o|=32768,a.mknod(n,o,0)},mkdir(n,o=511){return o&=1023,o|=16384,a.mknod(n,o,0)},mkdirTree(n,o){var f=n.split("/"),E="";for(var d of f)if(d){(E||o0.isAbs(n))&&(E+="/"),E+=d;try{a.mkdir(E,o)}catch(j){if(j.errno!=20)throw j}}},mkdev(n,o,f){return typeof f>"u"&&(f=o,o=438),o|=8192,a.mknod(n,o,f)},symlink(n,o){if(!Fx.resolve(n))throw new a.ErrnoError(44);var f=a.lookupPath(o,{parent:!0}),E=f.node;if(!E)throw new a.ErrnoError(44);var d=o0.basename(o),j=a.mayCreate(E,d);if(j)throw new a.ErrnoError(j);if(!E.node_ops.symlink)throw new a.ErrnoError(63);return E.node_ops.symlink(E,d,n)},rename(n,o){var f=o0.dirname(n),E=o0.dirname(o),d=o0.basename(n),j=o0.basename(o),S,I,Z;if(S=a.lookupPath(n,{parent:!0}),I=S.node,S=a.lookupPath(o,{parent:!0}),Z=S.node,!I||!Z)throw new a.ErrnoError(44);if(I.mount!==Z.mount)throw new a.ErrnoError(75);var d0=a.lookupNode(I,d),g0=Fx.relative(n,E);if(g0.charAt(0)!==".")throw new a.ErrnoError(28);if(g0=Fx.relative(o,f),g0.charAt(0)!==".")throw new a.ErrnoError(55);var u0;try{u0=a.lookupNode(Z,j)}catch{}if(d0!==u0){var E0=a.isDir(d0.mode),B0=a.mayDelete(I,d,E0);if(B0)throw new a.ErrnoError(B0);if(B0=u0?a.mayDelete(Z,j,E0):a.mayCreate(Z,j),B0)throw new a.ErrnoError(B0);if(!I.node_ops.rename)throw new a.ErrnoError(63);if(a.isMountpoint(d0)||u0&&a.isMountpoint(u0))throw new a.ErrnoError(10);if(Z!==I&&(B0=a.nodePermissions(I,"w"),B0))throw new a.ErrnoError(B0);a.hashRemoveNode(d0);try{I.node_ops.rename(d0,Z,j),d0.parent=Z}catch(M0){throw M0}finally{a.hashAddNode(d0)}}},rmdir(n){var o=a.lookupPath(n,{parent:!0}),f=o.node,E=o0.basename(n),d=a.lookupNode(f,E),j=a.mayDelete(f,E,!0);if(j)throw new a.ErrnoError(j);if(!f.node_ops.rmdir)throw new a.ErrnoError(63);if(a.isMountpoint(d))throw new a.ErrnoError(10);f.node_ops.rmdir(f,E),a.destroyNode(d)},readdir(n){var o=a.lookupPath(n,{follow:!0}),f=o.node,E=a.checkOpExists(f.node_ops.readdir,54);return E(f)},unlink(n){var o=a.lookupPath(n,{parent:!0}),f=o.node;if(!f)throw new a.ErrnoError(44);var E=o0.basename(n),d=a.lookupNode(f,E),j=a.mayDelete(f,E,!1);if(j)throw new a.ErrnoError(j);if(!f.node_ops.unlink)throw new a.ErrnoError(63);if(a.isMountpoint(d))throw new a.ErrnoError(10);f.node_ops.unlink(f,E),a.destroyNode(d)},readlink(n){var o=a.lookupPath(n),f=o.node;if(!f)throw new a.ErrnoError(44);if(!f.node_ops.readlink)throw new a.ErrnoError(28);return f.node_ops.readlink(f)},stat(n,o){var f=a.lookupPath(n,{follow:!o}),E=f.node,d=a.checkOpExists(E.node_ops.getattr,63);return d(E)},fstat(n){var o=a.getStreamChecked(n),f=o.node,E=o.stream_ops.getattr,d=E?o:f;return E??(E=f.node_ops.getattr),a.checkOpExists(E,63),E(d)},lstat(n){return a.stat(n,!0)},doChmod(n,o,f,E){a.doSetAttr(n,o,{mode:f&4095|o.mode&-4096,ctime:Date.now(),dontFollow:E})},chmod(n,o,f){var E;if(typeof n=="string"){var d=a.lookupPath(n,{follow:!f});E=d.node}else E=n;a.doChmod(null,E,o,f)},lchmod(n,o){a.chmod(n,o,!0)},fchmod(n,o){var f=a.getStreamChecked(n);a.doChmod(f,f.node,o,!1)},doChown(n,o,f){a.doSetAttr(n,o,{timestamp:Date.now(),dontFollow:f})},chown(n,o,f,E){var d;if(typeof n=="string"){var j=a.lookupPath(n,{follow:!E});d=j.node}else d=n;a.doChown(null,d,E)},lchown(n,o,f){a.chown(n,o,f,!0)},fchown(n,o,f){var E=a.getStreamChecked(n);a.doChown(E,E.node,!1)},doTruncate(n,o,f){if(a.isDir(o.mode))throw new a.ErrnoError(31);if(!a.isFile(o.mode))throw new a.ErrnoError(28);var E=a.nodePermissions(o,"w");if(E)throw new a.ErrnoError(E);a.doSetAttr(n,o,{size:f,timestamp:Date.now()})},truncate(n,o){if(o<0)throw new a.ErrnoError(28);var f;if(typeof n=="string"){var E=a.lookupPath(n,{follow:!0});f=E.node}else f=n;a.doTruncate(null,f,o)},ftruncate(n,o){var f=a.getStreamChecked(n);if(o<0||(f.flags&2097155)===0)throw new a.ErrnoError(28);a.doTruncate(f,f.node,o)},utime(n,o,f){var E=a.lookupPath(n,{follow:!0}),d=E.node,j=a.checkOpExists(d.node_ops.setattr,63);j(d,{atime:o,mtime:f})},open(n,o,f=438){if(n==="")throw new a.ErrnoError(44);o=yA(o),o&64?f=f&4095|32768:f=0;var E,d;if(typeof n=="object")E=n;else{d=n.endsWith("/");var j=a.lookupPath(n,{follow:!(o&131072),noent_okay:!0});E=j.node,n=j.path}var S=!1;if(o&64)if(E){if(o&128)throw new a.ErrnoError(20)}else{if(d)throw new a.ErrnoError(31);E=a.mknod(n,f|511,0),S=!0}if(!E)throw new a.ErrnoError(44);if(a.isChrdev(E.mode)&&(o&=-513),o&65536&&!a.isDir(E.mode))throw new a.ErrnoError(54);if(!S){var I=a.mayOpen(E,o);if(I)throw new a.ErrnoError(I)}o&512&&!S&&a.truncate(E,0),o&=-131713;var Z=a.createStream({node:E,path:a.getPath(E),flags:o,seekable:!0,position:0,stream_ops:E.stream_ops,ungotten:[],error:!1});return Z.stream_ops.open&&Z.stream_ops.open(Z),S&&a.chmod(E,f&511),Z},close(n){if(a.isClosed(n))throw new a.ErrnoError(8);n.getdents&&(n.getdents=null);try{n.stream_ops.close&&n.stream_ops.close(n)}catch(o){throw o}finally{a.closeStream(n.fd)}n.fd=null},isClosed(n){return n.fd===null},llseek(n,o,f){if(a.isClosed(n))throw new a.ErrnoError(8);if(!n.seekable||!n.stream_ops.llseek)throw new a.ErrnoError(70);if(f!=0&&f!=1&&f!=2)throw new a.ErrnoError(28);return n.position=n.stream_ops.llseek(n,o,f),n.ungotten=[],n.position},read(n,o,f,E,d){if(E<0||d<0)throw new a.ErrnoError(28);if(a.isClosed(n))throw new a.ErrnoError(8);if((n.flags&2097155)===1)throw new a.ErrnoError(8);if(a.isDir(n.node.mode))throw new a.ErrnoError(31);if(!n.stream_ops.read)throw new a.ErrnoError(28);var j=typeof d<"u";if(!j)d=n.position;else if(!n.seekable)throw new a.ErrnoError(70);var S=n.stream_ops.read(n,o,f,E,d);return j||(n.position+=S),S},write(n,o,f,E,d,j){if(E<0||d<0)throw new a.ErrnoError(28);if(a.isClosed(n))throw new a.ErrnoError(8);if((n.flags&2097155)===0)throw new a.ErrnoError(8);if(a.isDir(n.node.mode))throw new a.ErrnoError(31);if(!n.stream_ops.write)throw new a.ErrnoError(28);n.seekable&&n.flags&1024&&a.llseek(n,0,2);var S=typeof d<"u";if(!S)d=n.position;else if(!n.seekable)throw new a.ErrnoError(70);var I=n.stream_ops.write(n,o,f,E,d,j);return S||(n.position+=I),I},mmap(n,o,f,E,d){if((E&2)!==0&&(d&2)===0&&(n.flags&2097155)!==2)throw new a.ErrnoError(2);if((n.flags&2097155)===1)throw new a.ErrnoError(2);if(!n.stream_ops.mmap)throw new a.ErrnoError(43);if(!o)throw new a.ErrnoError(28);return n.stream_ops.mmap(n,o,f,E,d)},msync(n,o,f,E,d){return n.stream_ops.msync?n.stream_ops.msync(n,o,f,E,d):0},ioctl(n,o,f){if(!n.stream_ops.ioctl)throw new a.ErrnoError(59);return n.stream_ops.ioctl(n,o,f)},readFile(n,o={}){o.flags=o.flags||0,o.encoding=o.encoding||"binary",o.encoding!=="utf8"&&o.encoding!=="binary"&&b0(`Invalid encoding type "${o.encoding}"`);var f=a.open(n,o.flags),E=a.stat(n),d=E.size,j=new Uint8Array(d);return a.read(f,j,0,d,0),o.encoding==="utf8"&&(j=BA(j)),a.close(f),j},writeFile(n,o,f={}){f.flags=f.flags||577;var E=a.open(n,f.flags,f.mode);o=xA(o),a.write(E,o,0,o.byteLength,void 0,f.canOwn),a.close(E)},cwd:()=>a.currentPath,chdir(n){var o=a.lookupPath(n,{follow:!0});if(o.node===null)throw new a.ErrnoError(44);if(!a.isDir(o.node.mode))throw new a.ErrnoError(54);var f=a.nodePermissions(o.node,"x");if(f)throw new a.ErrnoError(f);a.currentPath=o.path},createDefaultDirectories(){a.mkdir("/tmp"),a.mkdir("/home"),a.mkdir("/home/web_user")},createDefaultDevices(){a.mkdir("/dev"),a.registerDevice(a.makedev(1,3),{read:()=>0,write:(E,d,j,S,I)=>S,llseek:()=>0}),a.mkdev("/dev/null",a.makedev(1,3)),V0.register(a.makedev(5,0),V0.default_tty_ops),V0.register(a.makedev(6,0),V0.default_tty1_ops),a.mkdev("/dev/tty",a.makedev(5,0)),a.mkdev("/dev/tty1",a.makedev(6,0));var n=new Uint8Array(1024),o=0,f=()=>(o===0&&(ae(n),o=n.byteLength),n[--o]);a.createDevice("/dev","random",f),a.createDevice("/dev","urandom",f),a.mkdir("/dev/shm"),a.mkdir("/dev/shm/tmp")},createSpecialDirectories(){a.mkdir("/proc");var n=a.mkdir("/proc/self");a.mkdir("/proc/self/fd"),a.mount({mount(){var o=a.createNode(n,"fd",16895,73);return o.stream_ops={llseek:K.stream_ops.llseek},o.node_ops={lookup(f,E){var d=+E,j=a.getStreamChecked(d),S={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>j.path},id:d+1};return S.parent=S,S},readdir(){return Array.from(a.streams.entries()).filter(([f,E])=>E).map(([f,E])=>f.toString())}},o}},{},"/proc/self/fd")},createStandardStreams(n,o,f){n?a.createDevice("/dev","stdin",n):a.symlink("/dev/tty","/dev/stdin"),o?a.createDevice("/dev","stdout",null,o):a.symlink("/dev/tty","/dev/stdout"),f?a.createDevice("/dev","stderr",null,f):a.symlink("/dev/tty1","/dev/stderr");var E=a.open("/dev/stdin",0),d=a.open("/dev/stdout",1),j=a.open("/dev/stderr",1)},staticInit(){a.nameTable=new Array(4096),a.mount(K,{},"/"),a.createDefaultDirectories(),a.createDefaultDevices(),a.createSpecialDirectories(),a.filesystems={MEMFS:K,PROXYFS:m0}},init(n,o,f){a.initialized=!0,n??(n=i.stdin),o??(o=i.stdout),f??(f=i.stderr),a.createStandardStreams(n,o,f)},quit(){a.initialized=!1,h(0);for(var n of a.streams)n&&a.close(n)},findObject(n,o){var f=a.analyzePath(n,o);return f.exists?f.object:null},analyzePath(n,o){try{var f=a.lookupPath(n,{follow:!o});n=f.path}catch{}var E={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var f=a.lookupPath(n,{parent:!0});E.parentExists=!0,E.parentPath=f.path,E.parentObject=f.node,E.name=o0.basename(n),f=a.lookupPath(n,{follow:!o}),E.exists=!0,E.path=f.path,E.object=f.node,E.name=f.node.name,E.isRoot=f.path==="/"}catch(d){E.error=d.errno}return E},createPath(n,o,f,E){n=typeof n=="string"?n:a.getPath(n);for(var d=o.split("/").reverse();d.length;){var j=d.pop();if(j){var S=o0.join2(n,j);try{a.mkdir(S)}catch(I){if(I.errno!=20)throw I}n=S}}return S},createFile(n,o,f,E,d){var j=o0.join2(typeof n=="string"?n:a.getPath(n),o),S=AA(E,d);return a.create(j,S)},createDataFile(n,o,f,E,d,j){var S=o;n&&(n=typeof n=="string"?n:a.getPath(n),S=o?o0.join2(n,o):n);var I=AA(E,d),Z=a.create(S,I);if(f){f=xA(f),a.chmod(Z,I|146);var d0=a.open(Z,577);a.write(d0,f,0,f.length,0,j),a.close(d0),a.chmod(Z,I)}},createDevice(n,o,f,E){var d,j=o0.join2(typeof n=="string"?n:a.getPath(n),o),S=AA(!!f,!!E);(d=a.createDevice).major??(d.major=64);var I=a.makedev(a.createDevice.major++,0);return a.registerDevice(I,{open(Z){Z.seekable=!1},close(Z){E?.buffer?.length&&E(10)},read(Z,d0,g0,u0,E0){for(var B0=0,M0=0;M0<u0;M0++){var xx;try{xx=f()}catch{throw new a.ErrnoError(29)}if(xx===void 0&&B0===0)throw new a.ErrnoError(6);if(xx==null)break;B0++,d0[g0+M0]=xx}return B0&&(Z.node.atime=Date.now()),B0},write(Z,d0,g0,u0,E0){for(var B0=0;B0<u0;B0++)try{E(d0[g0+B0])}catch{throw new a.ErrnoError(29)}return u0&&(Z.node.mtime=Z.node.ctime=Date.now()),B0}}),a.mkdev(j,S,I)},forceLoadFile(n){if(n.isDevice||n.isFolder||n.link||n.contents)return!0;if(globalThis.XMLHttpRequest)b0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{n.contents=$(n.url)}catch{throw new a.ErrnoError(29)}},createLazyFile(n,o,f,E,d){class j{constructor(){ex(this,"lengthKnown",!1),ex(this,"chunks",[])}get(E0){if(!(E0>this.length-1||E0<0)){var B0=E0%this.chunkSize,M0=E0/this.chunkSize|0;return this.getter(M0)[B0]}}setDataGetter(E0){this.getter=E0}cacheLength(){var E0=new XMLHttpRequest;E0.open("HEAD",f,!1),E0.send(null),E0.status>=200&&E0.status<300||E0.status===304||b0("Couldn't load "+f+". Status: "+E0.status);var B0=Number(E0.getResponseHeader("Content-length")),M0,xx=(M0=E0.getResponseHeader("Accept-Ranges"))&&M0==="bytes",Ex=(M0=E0.getResponseHeader("Content-Encoding"))&&M0==="gzip",Dx=1024*1024;xx||(Dx=B0);var Nx=(Ix,Bx)=>{Ix>Bx&&b0("invalid range ("+Ix+", "+Bx+") or no bytes requested!"),Bx>B0-1&&b0("only "+B0+" bytes available! programmer error!");var Mx=new XMLHttpRequest;return Mx.open("GET",f,!1),B0!==Dx&&Mx.setRequestHeader("Range","bytes="+Ix+"-"+Bx),Mx.responseType="arraybuffer",Mx.overrideMimeType&&Mx.overrideMimeType("text/plain; charset=x-user-defined"),Mx.send(null),Mx.status>=200&&Mx.status<300||Mx.status===304||b0("Couldn't load "+f+". Status: "+Mx.status),Mx.response!==void 0?new Uint8Array(Mx.response||[]):dA(Mx.responseText||"",!0)},Ux=this;Ux.setDataGetter(Ix=>{var Bx=Ix*Dx,Mx=(Ix+1)*Dx-1;return Mx=Math.min(Mx,B0-1),typeof Ux.chunks[Ix]>"u"&&(Ux.chunks[Ix]=Nx(Bx,Mx)),typeof Ux.chunks[Ix]>"u"&&b0("doXHR failed!"),Ux.chunks[Ix]}),(Ex||!B0)&&(Dx=B0=1,B0=this.getter(0).length,Dx=B0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=B0,this._chunkSize=Dx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){c||b0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var S=new j,I={isDevice:!1,contents:S}}else var I={isDevice:!1,url:f};var Z=a.createFile(n,o,I,E,d);I.contents?Z.contents=I.contents:I.url&&(Z.contents=null,Z.url=I.url),Object.defineProperties(Z,{usedBytes:{get:function(){return this.contents.length}}});var d0={};for(let[u0,E0]of Object.entries(Z.stream_ops))d0[u0]=(...B0)=>(a.forceLoadFile(Z),E0(...B0));function g0(u0,E0,B0,M0,xx){var Ex=u0.node.contents;if(xx>=Ex.length)return 0;var Dx=Math.min(Ex.length-xx,M0);if(Ex.slice)for(var Nx=0;Nx<Dx;Nx++)E0[B0+Nx]=Ex[xx+Nx];else for(var Nx=0;Nx<Dx;Nx++)E0[B0+Nx]=Ex.get(xx+Nx);return Dx}return d0.read=(u0,E0,B0,M0,xx)=>(a.forceLoadFile(Z),g0(u0,E0,B0,M0,xx)),d0.mmap=(u0,E0,B0,M0,xx)=>{a.forceLoadFile(Z);var Ex=uA(E0);if(!Ex)throw new a.ErrnoError(48);return g0(u0,N0,Ex,E0,B0),{ptr:Ex,allocated:!0}},Z.stream_ops=d0,Z}},h0={currentUmask:18,calculateAt(n,o,f){if(o0.isAbs(o))return o;var E;if(n===-100)E=a.cwd();else{var d=h0.getStreamFromFD(n);E=d.path}if(o.length==0){if(!f)throw new a.ErrnoError(44);return E}return E+"/"+o},writeStat(n,o){C0[n>>2]=o.dev,C0[n+4>>2]=o.mode,C0[n+8>>2]=o.nlink,C0[n+12>>2]=o.uid,C0[n+16>>2]=o.gid,C0[n+20>>2]=o.rdev,Q0[n+24>>3]=BigInt(o.size),K0[n+32>>2]=4096,K0[n+36>>2]=o.blocks;var f=o.atime.getTime(),E=o.mtime.getTime(),d=o.ctime.getTime();return Q0[n+40>>3]=BigInt(Math.floor(f/1e3)),C0[n+48>>2]=f%1e3*1e3*1e3,Q0[n+56>>3]=BigInt(Math.floor(E/1e3)),C0[n+64>>2]=E%1e3*1e3*1e3,Q0[n+72>>3]=BigInt(Math.floor(d/1e3)),C0[n+80>>2]=d%1e3*1e3*1e3,Q0[n+88>>3]=BigInt(o.ino),0},writeStatFs(n,o){C0[n+4>>2]=o.bsize,C0[n+60>>2]=o.bsize,Q0[n+8>>3]=BigInt(o.blocks),Q0[n+16>>3]=BigInt(o.bfree),Q0[n+24>>3]=BigInt(o.bavail),Q0[n+32>>3]=BigInt(o.files),Q0[n+40>>3]=BigInt(o.ffree),C0[n+48>>2]=o.fsid,C0[n+64>>2]=o.flags,C0[n+56>>2]=o.namelen},doMsync(n,o,f,E,d){if(!a.isFile(o.node.mode))throw new a.ErrnoError(43);if(E&2)return 0;var j=sA.slice(n,n+f);a.msync(o,j,d,f,E)},getStreamFromFD(n){var o=a.getStreamChecked(n);return o},varargs:void 0,getStr(n){var o=zx(n);return o}};function we(n,o,f,E){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),f&-8)return-28;var d=a.lookupPath(o,{follow:!0}),j=d.node;if(!j)return-44;var S="";return f&4&&(S+="r"),f&2&&(S+="w"),f&1&&(S+="x"),S&&a.nodePermissions(j,S)?-2:0}catch(I){if(typeof a>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}var _A=()=>{var n=K0[+h0.varargs>>2];return h0.varargs+=4,n},bA=_A;function kr(n,o,f){h0.varargs=f;try{var E=h0.getStreamFromFD(n);switch(o){case 0:{var d=_A();if(d<0)return-28;for(;a.streams[d];)d++;var j;return j=a.dupStream(E,d),j.fd}case 1:case 2:return 0;case 3:return E.flags;case 4:{var d=_A(),S=289792;return E.flags=E.flags&~S|d&S,0}case 12:{var d=bA(),I=0;return W0[d+I>>1]=2,0}case 13:case 14:return 0}return-28}catch(Z){if(typeof a>"u"||Z.name!=="ErrnoError")throw Z;return-Z.errno}}var fe=(n,o,f)=>oe(n,sA,o,f);function Qe(n,o){try{if(o===0)return-28;var f=a.cwd(),E=CA(f)+1;return o<E?-68:(fe(f,n,o),E)}catch(d){if(typeof a>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function Ze(n,o,f){h0.varargs=f;try{var E=h0.getStreamFromFD(n);switch(o){case 21509:return E.tty?0:-59;case 21505:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var d=E.tty.ops.ioctl_tcgets(E),j=bA();K0[j>>2]=d.c_iflag||0,K0[j+4>>2]=d.c_oflag||0,K0[j+8>>2]=d.c_cflag||0,K0[j+12>>2]=d.c_lflag||0;for(var S=0;S<32;S++)N0[j+S+17]=d.c_cc[S]||0;return 0}return 0}case 21510:case 21511:case 21512:return E.tty?0:-59;case 21506:case 21507:case 21508:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){for(var j=bA(),I=K0[j>>2],Z=K0[j+4>>2],d0=K0[j+8>>2],g0=K0[j+12>>2],u0=[],S=0;S<32;S++)u0.push(N0[j+S+17]);return E.tty.ops.ioctl_tcsets(E.tty,o,{c_iflag:I,c_oflag:Z,c_cflag:d0,c_lflag:g0,c_cc:u0})}return 0}case 21519:{if(!E.tty)return-59;var j=bA();return K0[j>>2]=0,0}case 21520:return E.tty?-28:-59;case 21537:case 21531:{var j=bA();return a.ioctl(E,o,j)}case 21523:{if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var E0=E.tty.ops.ioctl_tiocgwinsz(E.tty),j=bA();W0[j>>1]=E0[0],W0[j+2>>1]=E0[1]}return 0}case 21524:return E.tty?0:-59;case 21515:return E.tty?0:-59;default:return-28}}catch(B0){if(typeof a>"u"||B0.name!=="ErrnoError")throw B0;return-B0.errno}}function yr(n,o,f,E){h0.varargs=E;try{o=h0.getStr(o),o=h0.calculateAt(n,o);var d=E?_A():0;return f&64&&(d&=~h0.currentUmask),a.open(o,f,d).fd}catch(j){if(typeof a>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function _r(n,o,f,E){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),E<=0)return-28;var d=a.readlink(o),j=Math.min(E,CA(d)),S=N0[f+j];return fe(d,f,E+1),N0[f+j]=S,j}catch(I){if(typeof a>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function wr(n,o,f,E){try{return o=h0.getStr(o),E=h0.getStr(E),o=h0.calculateAt(n,o),E=h0.calculateAt(f,E),a.rename(o,E),0}catch(d){if(typeof a>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}function le(n){try{return n=h0.getStr(n),a.rmdir(n),0}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function xr(n,o,f){try{if(o=h0.getStr(o),o=h0.calculateAt(n,o),!f)a.unlink(o);else if(f===512)a.rmdir(o);else return-28;return 0}catch(E){if(typeof a>"u"||E.name!=="ErrnoError")throw E;return-E.errno}}var UA=()=>{throw new V},ce=()=>performance.now(),Sr=()=>Date.now(),Ar=1,er=n=>n>=0&&n<=3,HA=9007199254740992,Ee=-9007199254740992,Se=n=>n<Ee||n>HA?NaN:Number(n);function rr(n,o,f){if(o=Se(o),!er(n))return 28;var E;if(n===0)E=Sr();else if(Ar)E=ce();else return 52;var d=Math.round(E*1e3*1e3);return Q0[f>>3]=BigInt(d),0}var tr=()=>2147483648,nr=(n,o)=>Math.ceil(n/o)*o,qr=n=>{var o=J0.buffer.byteLength,f=(n-o+65535)/65536|0;try{return J0.grow(f),x0(),1}catch{}},Tr=n=>{var o=sA.length;n>>>=0;var f=tr();if(n>f)return!1;for(var E=1;E<=4;E*=2){var d=o*(1+.2/E);d=Math.min(d,n+100663296);var j=Math.min(f,nr(Math.max(n,d),65536)),S=qr(j);if(S)return!0}return!1};function Be(n){try{var o=h0.getStreamFromFD(n);return a.close(o),0}catch(f){if(typeof a>"u"||f.name!=="ErrnoError")throw f;return f.errno}}var Pr=(n,o,f,E)=>{for(var d=0,j=0;j<f;j++){var S=C0[o>>2],I=C0[o+4>>2];o+=8;var Z=a.read(n,N0,S,I,E);if(Z<0)return-1;if(d+=Z,Z<I)break;typeof E<"u"&&(E+=Z)}return d};function $r(n,o,f,E){try{var d=h0.getStreamFromFD(n),j=Pr(d,o,f);return C0[E>>2]=j,0}catch(S){if(typeof a>"u"||S.name!=="ErrnoError")throw S;return S.errno}}function ir(n,o,f,E){o=Se(o);try{if(isNaN(o))return 22;var d=h0.getStreamFromFD(n);return a.llseek(d,o,f),Q0[E>>3]=BigInt(d.position),d.getdents&&o===0&&f===0&&(d.getdents=null),0}catch(j){if(typeof a>"u"||j.name!=="ErrnoError")throw j;return j.errno}}var sr=(n,o,f,E)=>{for(var d=0,j=0;j<f;j++){var S=C0[o>>2],I=C0[o+4>>2];o+=8;var Z=a.write(n,N0,S,I,E);if(Z<0)return-1;if(d+=Z,Z<I)break;typeof E<"u"&&(E+=Z)}return d};function JA(n,o,f,E){try{var d=h0.getStreamFromFD(n),j=sr(d,o,f);return C0[E>>2]=j,0}catch(S){if(typeof a>"u"||S.name!=="ErrnoError")throw S;return S.errno}}var ar=0,KA=()=>se||ar>0,qe=n=>{L=n,KA()||(i.onExit?.(n),F0=!0),g(n,new ox(n))},Ox=(n,o)=>{L=n,KA()||c0(),qe(n)},Nr=n=>{if(n instanceof ox||n=="unwind")return L;g(1,n)},wA=n=>Q(n),zA=n=>{var o=CA(n)+1,f=wA(o);return fe(n,f,o),f},Te=[],yx=n=>{var o=Te[n];return o||(Te[n]=o=O0.get(n)),o},Ce=(...n)=>a.createPath(...n),VA=(...n)=>a.unlink(...n),l=(...n)=>a.createLazyFile(...n),B=(...n)=>a.createDevice(...n);if(a.createPreloadedFile=gr,a.preloadFile=FA,a.staticInit(),i.noExitRuntime&&(se=i.noExitRuntime),i.preloadPlugins&&(GA=i.preloadPlugins),i.print&&(M=i.print),i.printErr&&(N=i.printErr),i.wasmBinary&&(z=i.wasmBinary),i.arguments&&(b=i.arguments),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();i.callMain=or,i.addRunDependency=$x,i.removeRunDependency=ve,i.FS_preloadFile=FA,i.FS_unlink=VA,i.FS_createPath=Ce,i.FS_createDevice=B,i.FS=a,i.FS_createDataFile=Fe,i.FS_createLazyFile=l,i.PROXYFS=m0;var p,h,w,P,J,Q,l0,k0,Z0,J0,O0;function q0(n){p=i._main=n.__main_argc_argv,h=n.fflush,w=n.__funcs_on_exit,P=n.setThrew,J=n._emscripten_stack_restore,Q=n._emscripten_stack_alloc,l0=n.emscripten_stack_get_current,k0=J0=n.memory,Z0=O0=n.__indirect_function_table}var cx={__assert_fail:Vx,__syscall_faccessat:we,__syscall_fcntl64:kr,__syscall_getcwd:Qe,__syscall_ioctl:Ze,__syscall_openat:yr,__syscall_readlinkat:_r,__syscall_renameat:wr,__syscall_rmdir:le,__syscall_unlinkat:xr,_emscripten_throw_longjmp:UA,clock_time_get:rr,emscripten_resize_heap:Tr,fd_close:Be,fd_read:$r,fd_seek:ir,fd_write:JA,invoke_i:WA,invoke_ii:Wx,invoke_iii:Xx,invoke_iiid:Tt,invoke_iiii:eA,invoke_iiiii:ux,invoke_iiiiii:tt,invoke_iijii:St,invoke_v:wx,invoke_vi:qt,invoke_vii:Gx,invoke_viii:Pe,invoke_viiii:vA,invoke_viiiii:Ir};function wx(n){var o=P0();try{yx(n)()}catch(f){if(fx(o),!(f instanceof O))throw f;P(1,0)}}function Gx(n,o,f){var E=P0();try{yx(n)(o,f)}catch(d){if(fx(E),!(d instanceof O))throw d;P(1,0)}}function Wx(n,o){var f=P0();try{return yx(n)(o)}catch(E){if(fx(f),!(E instanceof O))throw E;P(1,0)}}function Xx(n,o,f){var E=P0();try{return yx(n)(o,f)}catch(d){if(fx(E),!(d instanceof O))throw d;P(1,0)}}function WA(n){var o=P0();try{return yx(n)()}catch(f){if(fx(o),!(f instanceof O))throw f;P(1,0)}}function eA(n,o,f,E){var d=P0();try{return yx(n)(o,f,E)}catch(j){if(fx(d),!(j instanceof O))throw j;P(1,0)}}function vA(n,o,f,E,d){var j=P0();try{yx(n)(o,f,E,d)}catch(S){if(fx(j),!(S instanceof O))throw S;P(1,0)}}function ux(n,o,f,E,d){var j=P0();try{return yx(n)(o,f,E,d)}catch(S){if(fx(j),!(S instanceof O))throw S;P(1,0)}}function Ir(n,o,f,E,d,j){var S=P0();try{yx(n)(o,f,E,d,j)}catch(I){if(fx(S),!(I instanceof O))throw I;P(1,0)}}function St(n,o,f,E,d){var j=P0();try{return yx(n)(o,f,E,d)}catch(S){if(fx(j),!(S instanceof O))throw S;P(1,0)}}function qt(n,o){var f=P0();try{yx(n)(o)}catch(E){if(fx(f),!(E instanceof O))throw E;P(1,0)}}function Pe(n,o,f,E){var d=P0();try{yx(n)(o,f,E)}catch(j){if(fx(d),!(j instanceof O))throw j;P(1,0)}}function Tt(n,o,f,E){var d=P0();try{return yx(n)(o,f,E)}catch(j){if(fx(d),!(j instanceof O))throw j;P(1,0)}}function tt(n,o,f,E,d,j){var S=P0();try{return yx(n)(o,f,E,d,j)}catch(I){if(fx(S),!(I instanceof O))throw I;P(1,0)}}function or(n=[]){var o=p;n.unshift(m);var f=n.length,E=wA((f+1)*4),d=E;for(var j of n)C0[d>>2]=zA(j),d+=4;C0[d>>2]=0;try{var S=o(f,E);return Ox(S,!0),S}catch(I){return Nr(I)}}function XA(n=b){if(tx>0){w0=XA;return}if(f0(),tx>0){w0=XA;return}function o(){if(i.calledRun=!0,!F0){U(),H?.(i),i.onRuntimeInitialized?.();var f=i.noInitialRun||!0;f||or(n),p0()}}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),o()},1)):o()}var F;return F=await G0(),XA(),n0?s=i:s=new Promise((n,o)=>{H=n,W=o}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),MB=ts({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,i=t,v=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],m="./this.program",g=(l,B)=>{throw B};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var q="",_,$;if(u){var T=require("fs");q=__dirname+"/",$=l=>{l=k(l)?new URL(l):l;var B=T.readFileSync(l);return B},_=async(l,B=!0)=>{l=k(l)?new URL(l):l;var p=T.readFileSync(l,B?void 0:"utf8");return p},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(l,B)=>{throw process.exitCode=l,B}}else if(v||c){try{q=new URL(".",r).href}catch{}c&&($=l=>{var B=new XMLHttpRequest;return B.open("GET",l,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),_=async l=>{if(k(l))return new Promise((p,h)=>{var w=new XMLHttpRequest;w.open("GET",l,!0),w.responseType="arraybuffer",w.onload=()=>{if(w.status==200||w.status==0&&w.response){p(w.response);return}h(w.status)},w.onerror=h,w.send(null)});var B=await fetch(l,{credentials:"same-origin"});if(B.ok)return B.arrayBuffer();throw new Error(B.status+" : "+B.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,F0=!1,L,k=l=>l.startsWith("file://");class O{}class V extends O{}function Y(l){for(var B=0,p=l.length,h=new Uint8Array(p),w;B<p;++B)w=l.charCodeAt(B),h[B]=~w>>8&w;return h}var H,W,n0=!1,r0=!1;function x0(){var l=wA.buffer;N0=new Int8Array(l),W0=new Int16Array(l),sA=new Uint8Array(l),We=new Uint16Array(l),K0=new Int32Array(l),C0=new Uint32Array(l),br=new Float32Array(l),OA=new Float64Array(l),Q0=new BigInt64Array(l),mr=new BigUint64Array(l)}function f0(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Ye(i.preRun.shift());gA(aA)}function U(){n0=!0,!i.noFSInit&&!a.initialized&&a.init(),V0.init(),VA.__wasm_call_ctors(),a.ignorePermissions=!1}function v0(){}function c0(){sr(),a.quit(),V0.shutdown(),r0=!0}function p0(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)Xe(i.postRun.shift());gA(kA)}function b0(l){i.onAbort?.(l),l=`Aborted(${l})`,N(l),F0=!0,l+=". Build with -sASSERTIONS for more info.";var B=new WebAssembly.RuntimeError(l);throw W?.(B),B}var I0;function L0(){return Y(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
1163
1163
  
1164
1164
  \0\x07\v\v\0\b\0\0 \x07\0 \0\b\0\0\f\0\0\r\0\0\x07\0\f\x1B\x07\x07\f\0\v
1165
1165
  p\r\r\x07\x82\x80\x80\b\x7FA\x80\xAC\v\x07\xBD memory\0__wasm_call_ctors\0 __main_argc_argv\0
@@ -1523,8 +1523,8 @@ Usage: pawndbg -f <mapfile> [options]
1523
1523
  \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF
1524
1524
  \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0A\xC0\x1B\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0A\xE4\x1B\v\x07\0A\xFC\x1B\v
1525
1525
  \0\0\0\0\0\0\xEC\0A\x94\v\0A\xA4\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xE8\v \xD8\r\0\0\0\0\0\0\0A\xFC\v\b\0A\x94\v\0\0\0 \0\0\0\xF8\0\0\0\0A\xAC\v\0A\xBC\v\xFF\xFF\xFF\xFF
1526
- \0A\x80\v\vp\0\0D\0\0\0`)}function dx(f){return f}async function iA(f){return f}async function LA(f,B){try{var p=await iA(f),h=await WebAssembly.instantiate(p,B);return h}catch(w){N(`failed to asynchronously prepare wasm: ${w}`),b0(w)}}async function Kx(f,B,p){return LA(B,p)}function H0(){var f={env:Se,wasi_snapshot_preview1:Se};return f}async function G0(){function f(P,J){return VA=P.exports,zA(VA),x0(),VA}function B(P){return f(P.instance)}var p=H0();if(i.instantiateWasm)return new Promise((P,J)=>{i.instantiateWasm(p,(Q,l0)=>{P(f(Q,l0))})});I0??(I0=L0());var h=await Kx(z,I0,p),w=B(h);return w}class ox{constructor(B){ex(this,"name","ExitStatus"),this.message=`Program terminated with exit(${B})`,this.status=B}}var W0,K0,Q0,$0,br,OA,We,C0,mr,sA,hA=f=>{for(;f.length>0;)f.shift()(i)},gA=[],Xe=f=>gA.push(f),aA=[],Ye=f=>aA.push(f),ne=!1,fx=globalThis.TextDecoder&&new TextDecoder,P0=(f,B,p,h)=>{var w=B+p;if(h)return w;for(;f[B]&&!(B>=w);)++B;return B},Px=(f,B=0,p,h)=>{var w=P0(f,B,p,h);if(w-B>16&&f.buffer&&fx)return fx.decode(f.subarray(B,w));for(var P="";B<w;){var J=f[B++];if(!(J&128)){P+=String.fromCharCode(J);continue}var Q=f[B++]&63;if((J&224)==192){P+=String.fromCharCode((J&31)<<6|Q);continue}var l0=f[B++]&63;if((J&240)==224?J=(J&15)<<12|Q<<6|l0:J=(J&7)<<18|Q<<12|l0<<6|f[B++]&63,J<65536)P+=String.fromCharCode(J);else{var k0=J-65536;P+=String.fromCharCode(55296|k0>>10,56320|k0&1023)}}return P},lx=(f,B,p)=>f?Px(sA,f,B,p):"",BA=(f,B,p,h)=>b0(`Assertion failed: ${lx(f)}, at: `+[B?lx(B):"unknown filename",p,h?lx(h):"unknown function"]),zx=()=>{var f=K0[+h0.varargs>>2];return h0.varargs+=4,f},Vx=zx,o0={isAbs:f=>f.charAt(0)==="/",splitPath:f=>{var B=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return B.exec(f).slice(1)},normalizeArray:(f,B)=>{for(var p=0,h=f.length-1;h>=0;h--){var w=f[h];w==="."?f.splice(h,1):w===".."?(f.splice(h,1),p++):p&&(f.splice(h,1),p--)}if(B)for(;p;p--)f.unshift("..");return f},normalize:f=>{var B=o0.isAbs(f),p=f.slice(-1)==="/";return f=o0.normalizeArray(f.split("/").filter(h=>!!h),!B).join("/"),!f&&!B&&(f="."),f&&p&&(f+="/"),(B?"/":"")+f},dirname:f=>{var B=o0.splitPath(f),p=B[0],h=B[1];return!p&&!h?".":(h&&(h=h.slice(0,-1)),p+h)},basename:f=>f&&f.match(/([^\/]+|\/)\/*$/)[1],join:(...f)=>o0.normalize(f.join("/")),join2:(f,B)=>o0.normalize(f+"/"+B)},jr=()=>{if(u){var f=require("crypto");return B=>f.randomFillSync(B)}return B=>(crypto.getRandomValues(B),0)},ie=f=>(ie=jr())(f),Fx={resolve:(...f)=>{for(var B="",p=!1,h=f.length-1;h>=-1&&!p;h--){var w=h>=0?f[h]:s.cwd();if(typeof w!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!w)return"";B=w+"/"+B,p=o0.isAbs(w)}return B=o0.normalizeArray(B.split("/").filter(P=>!!P),!p).join("/"),(p?"/":"")+B||"."},relative:(f,B)=>{f=Fx.resolve(f).slice(1),B=Fx.resolve(B).slice(1);function p(k0){for(var Z0=0;Z0<k0.length&&k0[Z0]==="";Z0++);for(var J0=k0.length-1;J0>=0&&k0[J0]==="";J0--);return Z0>J0?[]:k0.slice(Z0,J0-Z0+1)}for(var h=p(f.split("/")),w=p(B.split("/")),P=Math.min(h.length,w.length),J=P,Q=0;Q<P;Q++)if(h[Q]!==w[Q]){J=Q;break}for(var l0=[],Q=J;Q<h.length;Q++)l0.push("..");return l0=l0.concat(w.slice(J)),l0.join("/")}},Lx=[],CA=f=>{for(var B=0,p=0;p<f.length;++p){var h=f.charCodeAt(p);h<=127?B++:h<=2047?B+=2:h>=55296&&h<=57343?(B+=4,++p):B+=3}return B},se=(f,B,p,h)=>{if(!(h>0))return 0;for(var w=p,P=p+h-1,J=0;J<f.length;++J){var Q=f.codePointAt(J);if(Q<=127){if(p>=P)break;B[p++]=Q}else if(Q<=2047){if(p+1>=P)break;B[p++]=192|Q>>6,B[p++]=128|Q&63}else if(Q<=65535){if(p+2>=P)break;B[p++]=224|Q>>12,B[p++]=128|Q>>6&63,B[p++]=128|Q&63}else{if(p+3>=P)break;B[p++]=240|Q>>18,B[p++]=128|Q>>12&63,B[p++]=128|Q>>6&63,B[p++]=128|Q&63,J++}}return B[p]=0,p-w},dA=(f,B,p)=>{var h=p>0?p:CA(f)+1,w=new Array(h),P=se(f,w,0,w.length);return B&&(w.length=P),w},hr=()=>{if(!Lx.length){var f=null;if(u){var B=256,p=Buffer.alloc(B),h=0,w=process.stdin.fd;try{h=T.readSync(w,p,0,B)}catch(P){if(P.toString().includes("EOF"))h=0;else throw P}h>0&&(f=p.slice(0,h).toString("utf-8"))}else globalThis.window?.prompt&&(f=window.prompt("Input: "),f!==null&&(f+=`
1527
- `));if(!f)return null;Lx=dA(f,!0)}return Lx.shift()},V0={ttys:[],init(){},shutdown(){},register(f,B){V0.ttys[f]={input:[],output:[],ops:B},s.registerDevice(f,V0.stream_ops)},stream_ops:{open(f){var B=V0.ttys[f.node.rdev];if(!B)throw new s.ErrnoError(43);f.tty=B,f.seekable=!1},close(f){f.tty.ops.fsync(f.tty)},fsync(f){f.tty.ops.fsync(f.tty)},read(f,B,p,h,w){if(!f.tty||!f.tty.ops.get_char)throw new s.ErrnoError(60);for(var P=0,J=0;J<h;J++){var Q;try{Q=f.tty.ops.get_char(f.tty)}catch{throw new s.ErrnoError(29)}if(Q===void 0&&P===0)throw new s.ErrnoError(6);if(Q==null)break;P++,B[p+J]=Q}return P&&(f.node.atime=Date.now()),P},write(f,B,p,h,w){if(!f.tty||!f.tty.ops.put_char)throw new s.ErrnoError(60);try{for(var P=0;P<h;P++)f.tty.ops.put_char(f.tty,B[p+P])}catch{throw new s.ErrnoError(29)}return h&&(f.node.mtime=f.node.ctime=Date.now()),P}},default_tty_ops:{get_char(f){return hr()},put_char(f,B){B===null||B===10?(M(Px(f.output)),f.output=[]):B!=0&&f.output.push(B)},fsync(f){f.output?.length>0&&(M(Px(f.output)),f.output=[])},ioctl_tcgets(f){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(f,B,p){return 0},ioctl_tiocgwinsz(f){return[24,80]}},default_tty1_ops:{put_char(f,B){B===null||B===10?(N(Px(f.output)),f.output=[]):B!=0&&f.output.push(B)},fsync(f){f.output?.length>0&&(N(Px(f.output)),f.output=[])}}},uA=f=>{b0()},K={ops_table:null,mount(f){return K.createNode(null,"/",16895,0)},createNode(f,B,p,h){if(s.isBlkdev(p)||s.isFIFO(p))throw new s.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:s.chrdev_stream_ops}});var w=s.createNode(f,B,p,h);return s.isDir(w.mode)?(w.node_ops=K.ops_table.dir.node,w.stream_ops=K.ops_table.dir.stream,w.contents={}):s.isFile(w.mode)?(w.node_ops=K.ops_table.file.node,w.stream_ops=K.ops_table.file.stream,w.usedBytes=0,w.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):s.isLink(w.mode)?(w.node_ops=K.ops_table.link.node,w.stream_ops=K.ops_table.link.stream):s.isChrdev(w.mode)&&(w.node_ops=K.ops_table.chrdev.node,w.stream_ops=K.ops_table.chrdev.stream),w.atime=w.mtime=w.ctime=Date.now(),f&&(f.contents[B]=w,f.atime=f.mtime=f.ctime=w.atime),w},getFileDataAsTypedArray(f){return f.contents.subarray(0,f.usedBytes)},expandFileStorage(f,B){var p=f.contents.length;if(!(p>=B)){var h=1024*1024;B=Math.max(B,p*(p<h?2:1.125)>>>0),p&&(B=Math.max(B,256));var w=K.getFileDataAsTypedArray(f);f.contents=new Uint8Array(B),f.contents.set(w)}},resizeFileStorage(f,B){if(f.usedBytes!=B){var p=f.contents;f.contents=new Uint8Array(B),f.contents.set(p.subarray(0,Math.min(B,f.usedBytes))),f.usedBytes=B}},node_ops:{getattr(f){var B={};return B.dev=s.isChrdev(f.mode)?f.id:1,B.ino=f.id,B.mode=f.mode,B.nlink=1,B.uid=0,B.gid=0,B.rdev=f.rdev,s.isDir(f.mode)?B.size=4096:s.isFile(f.mode)?B.size=f.usedBytes:s.isLink(f.mode)?B.size=f.link.length:B.size=0,B.atime=new Date(f.atime),B.mtime=new Date(f.mtime),B.ctime=new Date(f.ctime),B.blksize=4096,B.blocks=Math.ceil(B.size/B.blksize),B},setattr(f,B){for(let p of["mode","atime","mtime","ctime"])B[p]!=null&&(f[p]=B[p]);B.size!==void 0&&K.resizeFileStorage(f,B.size)},lookup(f,B){throw K.doesNotExistError||(K.doesNotExistError=new s.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(f,B,p,h){return K.createNode(f,B,p,h)},rename(f,B,p){var h;try{h=s.lookupNode(B,p)}catch{}if(h){if(s.isDir(f.mode))for(var w in h.contents)throw new s.ErrnoError(55);s.hashRemoveNode(h)}delete f.parent.contents[f.name],B.contents[p]=f,f.name=p,B.ctime=B.mtime=f.parent.ctime=f.parent.mtime=Date.now()},unlink(f,B){delete f.contents[B],f.ctime=f.mtime=Date.now()},rmdir(f,B){var p=s.lookupNode(f,B);for(var h in p.contents)throw new s.ErrnoError(55);delete f.contents[B],f.ctime=f.mtime=Date.now()},readdir(f){return[".","..",...Object.keys(f.contents)]},symlink(f,B,p){var h=K.createNode(f,B,41471,0);return h.link=p,h},readlink(f){if(!s.isLink(f.mode))throw new s.ErrnoError(28);return f.link}},stream_ops:{read(f,B,p,h,w){var P=f.node.contents;if(w>=f.node.usedBytes)return 0;var J=Math.min(f.node.usedBytes-w,h);return B.set(P.subarray(w,w+J),p),J},write(f,B,p,h,w,P){if(B.buffer===$0.buffer&&(P=!1),!h)return 0;var J=f.node;return J.mtime=J.ctime=Date.now(),P?(J.contents=B.subarray(p,p+h),J.usedBytes=h):J.usedBytes===0&&w===0?(J.contents=B.slice(p,p+h),J.usedBytes=h):(K.expandFileStorage(J,w+h),J.contents.set(B.subarray(p,p+h),w),J.usedBytes=Math.max(J.usedBytes,w+h)),h},llseek(f,B,p){var h=B;if(p===1?h+=f.position:p===2&&s.isFile(f.node.mode)&&(h+=f.node.usedBytes),h<0)throw new s.ErrnoError(28);return h},mmap(f,B,p,h,w){if(!s.isFile(f.node.mode))throw new s.ErrnoError(43);var P,J,Q=f.node.contents;if(!(w&2)&&Q.buffer===$0.buffer)J=!1,P=Q.byteOffset;else{if(J=!0,P=uA(B),!P)throw new s.ErrnoError(48);Q&&((p>0||p+B<Q.length)&&(Q.subarray?Q=Q.subarray(p,p+B):Q=Array.prototype.slice.call(Q,p,p+B)),$0.set(Q,P))}return{ptr:P,allocated:J}},msync(f,B,p,h,w){return K.stream_ops.write(f,B,0,h,p,!1),0}}},kA=f=>{if(typeof f!="string")return f;var B={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},p=B[f];if(typeof p>"u")throw new Error(`Unknown file open mode: ${f}`);return p},xA=f=>(typeof f=="string"&&(f=dA(f,!0)),f.subarray||(f=new Uint8Array(f)),f),AA=(f,B)=>{var p=0;return f&&(p|=365),B&&(p|=146),p},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},m0={mount(f){return m0.createNode(null,"/",f.opts.fs.lstat(f.opts.root).mode,0)},createNode(f,B,p,h){if(!s.isDir(p)&&!s.isFile(p)&&!s.isLink(p))throw new s.ErrnoError(y0.EINVAL);var w=s.createNode(f,B,p);return w.node_ops=m0.node_ops,w.stream_ops=m0.stream_ops,w},realPath(f){for(var B=[];f.parent!==f;)B.push(f.name),f=f.parent;return B.push(f.mount.opts.root),B.reverse(),o0.join(...B)},node_ops:{getattr(f){var B=m0.realPath(f),p;try{p=f.mount.opts.fs.lstat(B)}catch(h){throw h.code?new s.ErrnoError(y0[h.code]):h}return{dev:p.dev,ino:p.ino,mode:p.mode,nlink:p.nlink,uid:p.uid,gid:p.gid,rdev:p.rdev,size:p.size,atime:p.atime,mtime:p.mtime,ctime:p.ctime,blksize:p.blksize,blocks:p.blocks}},setattr(f,B){var p=m0.realPath(f);try{if(B.mode!==void 0&&(f.mount.opts.fs.chmod(p,B.mode),f.mode=B.mode),B.atime||B.mtime){var h=new Date(B.atime||B.mtime),w=new Date(B.mtime||B.atime);f.mount.opts.fs.utime(p,h,w)}B.size!==void 0&&f.mount.opts.fs.truncate(p,B.size)}catch(P){throw P.code?new s.ErrnoError(y0[P.code]):P}},lookup(f,B){try{var p=o0.join2(m0.realPath(f),B),h=f.mount.opts.fs.lstat(p).mode,w=m0.createNode(f,B,h);return w}catch(P){throw P.code?new s.ErrnoError(y0[P.code]):P}},mknod(f,B,p,h){var w=m0.createNode(f,B,p,h),P=m0.realPath(w);try{s.isDir(w.mode)?w.mount.opts.fs.mkdir(P,w.mode):w.mount.opts.fs.writeFile(P,"",{mode:w.mode})}catch(J){throw J.code?new s.ErrnoError(y0[J.code]):J}return w},rename(f,B,p){var h=m0.realPath(f),w=o0.join2(m0.realPath(B),p);try{f.mount.opts.fs.rename(h,w),f.name=p}catch(P){throw P.code?new s.ErrnoError(y0[P.code]):P}},unlink(f,B){var p=o0.join2(m0.realPath(f),B);try{f.mount.opts.fs.unlink(p)}catch(h){throw h.code?new s.ErrnoError(y0[h.code]):h}},rmdir(f,B){var p=o0.join2(m0.realPath(f),B);try{f.mount.opts.fs.rmdir(p)}catch(h){throw h.code?new s.ErrnoError(y0[h.code]):h}},readdir(f){var B=m0.realPath(f);try{return f.mount.opts.fs.readdir(B)}catch(p){throw p.code?new s.ErrnoError(y0[p.code]):p}},symlink(f,B,p){var h=o0.join2(m0.realPath(f),B);try{f.mount.opts.fs.symlink(p,h)}catch(w){throw w.code?new s.ErrnoError(y0[w.code]):w}},readlink(f){var B=m0.realPath(f);try{return f.mount.opts.fs.readlink(B)}catch(p){throw p.code?new s.ErrnoError(y0[p.code]):p}}},stream_ops:{open(f){var B=m0.realPath(f.node);try{f.nfd=f.node.mount.opts.fs.open(B,f.flags)}catch(p){throw p.code?new s.ErrnoError(y0[p.code]):p}},close(f){try{f.node.mount.opts.fs.close(f.nfd)}catch(B){throw B.code?new s.ErrnoError(y0[B.code]):B}},read(f,B,p,h,w){try{return f.node.mount.opts.fs.read(f.nfd,B,p,h,w)}catch(P){throw P.code?new s.ErrnoError(y0[P.code]):P}},write(f,B,p,h,w){try{return f.node.mount.opts.fs.write(f.nfd,B,p,h,w)}catch(P){throw P.code?new s.ErrnoError(y0[P.code]):P}},llseek(f,B,p){var h=B;if(p===1)h+=f.position;else if(p===2&&s.isFile(f.node.mode))try{var w=f.node.node_ops.getattr(f.node);h+=w.size}catch(P){throw new s.ErrnoError(y0[P.code])}if(h<0)throw new s.ErrnoError(y0.EINVAL);return h}}},DA=async f=>{var B=await _(f);return new Uint8Array(B)},ae=(...f)=>s.createDataFile(...f),kx=f=>f,tx=0,w0=null,oe=f=>{if(tx--,i.monitorRunDependencies?.(tx),tx==0&&w0){var B=w0;w0=null,B()}},$x=f=>{tx++,i.monitorRunDependencies?.(tx)},GA=[],pA=async(f,B)=>{typeof Browser<"u"&&Browser.init();for(var p of GA)if(p.canHandle(B))return p.handle(f,B);return f},FA=async(f,B,p,h,w,P,J,Q)=>{var l0=B?Fx.resolve(o0.join2(f,B)):f,k0=kx(`cp ${l0}`);$x(k0);try{var Z0=p;typeof p=="string"&&(Z0=await DA(p)),Z0=await pA(Z0,l0),Q?.(),P||ae(f,B,Z0,h,w,J)}finally{oe(k0)}},gr=(f,B,p,h,w,P,J,Q,l0,k0)=>{FA(f,B,p,h,w,Q,l0,k0).then(P).catch(J)},s={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(f){ex(this,"name","ErrnoError"),this.errno=f}},FSStream:class{constructor(){ex(this,"shared",{})}get object(){return this.node}set object(f){this.node=f}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(f){this.shared.flags=f}get position(){return this.shared.position}set position(f){this.shared.position=f}},FSNode:class{constructor(f,B,p,h){ex(this,"node_ops",{}),ex(this,"stream_ops",{}),ex(this,"readMode",365),ex(this,"writeMode",146),ex(this,"mounted",null),f||(f=this),this.parent=f,this.mount=f.mount,this.id=s.nextInode++,this.name=B,this.mode=p,this.rdev=h,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(f){f?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(f){f?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return s.isDir(this.mode)}get isDevice(){return s.isChrdev(this.mode)}},lookupPath(f,B={}){if(!f)throw new s.ErrnoError(44);B.follow_mount??(B.follow_mount=!0),o0.isAbs(f)||(f=s.cwd()+"/"+f);x:for(var p=0;p<40;p++){for(var h=f.split("/").filter(k0=>!!k0),w=s.root,P="/",J=0;J<h.length;J++){var Q=J===h.length-1;if(Q&&B.parent)break;if(h[J]!=="."){if(h[J]===".."){if(P=o0.dirname(P),s.isRoot(w)){f=P+"/"+h.slice(J+1).join("/"),p--;continue x}else w=w.parent;continue}P=o0.join2(P,h[J]);try{w=s.lookupNode(w,h[J])}catch(k0){if(k0?.errno===44&&Q&&B.noent_okay)return{path:P};throw k0}if(s.isMountpoint(w)&&(!Q||B.follow_mount)&&(w=w.mounted.root),s.isLink(w.mode)&&(!Q||B.follow)){if(!w.node_ops.readlink)throw new s.ErrnoError(52);var l0=w.node_ops.readlink(w);o0.isAbs(l0)||(l0=o0.dirname(P)+"/"+l0),f=l0+"/"+h.slice(J+1).join("/");continue x}}}return{path:P,node:w}}throw new s.ErrnoError(32)},getPath(f){for(var B;;){if(s.isRoot(f)){var p=f.mount.mountpoint;return B?p[p.length-1]!=="/"?`${p}/${B}`:p+B:p}B=B?`${f.name}/${B}`:f.name,f=f.parent}},hashName(f,B){for(var p=0,h=0;h<B.length;h++)p=(p<<5)-p+B.charCodeAt(h)|0;return(f+p>>>0)%s.nameTable.length},hashAddNode(f){var B=s.hashName(f.parent.id,f.name);f.name_next=s.nameTable[B],s.nameTable[B]=f},hashRemoveNode(f){var B=s.hashName(f.parent.id,f.name);if(s.nameTable[B]===f)s.nameTable[B]=f.name_next;else for(var p=s.nameTable[B];p;){if(p.name_next===f){p.name_next=f.name_next;break}p=p.name_next}},lookupNode(f,B){var p=s.mayLookup(f);if(p)throw new s.ErrnoError(p);for(var h=s.hashName(f.id,B),w=s.nameTable[h];w;w=w.name_next){var P=w.name;if(w.parent.id===f.id&&P===B)return w}return s.lookup(f,B)},createNode(f,B,p,h){var w=new s.FSNode(f,B,p,h);return s.hashAddNode(w),w},destroyNode(f){s.hashRemoveNode(f)},isRoot(f){return f===f.parent},isMountpoint(f){return!!f.mounted},isFile(f){return(f&61440)===32768},isDir(f){return(f&61440)===16384},isLink(f){return(f&61440)===40960},isChrdev(f){return(f&61440)===8192},isBlkdev(f){return(f&61440)===24576},isFIFO(f){return(f&61440)===4096},isSocket(f){return(f&49152)===49152},flagsToPermissionString(f){var B=["r","w","rw"][f&3];return f&512&&(B+="w"),B},nodePermissions(f,B){return s.ignorePermissions?0:B.includes("r")&&!(f.mode&292)||B.includes("w")&&!(f.mode&146)||B.includes("x")&&!(f.mode&73)?2:0},mayLookup(f){if(!s.isDir(f.mode))return 54;var B=s.nodePermissions(f,"x");return B||(f.node_ops.lookup?0:2)},mayCreate(f,B){if(!s.isDir(f.mode))return 54;try{var p=s.lookupNode(f,B);return 20}catch{}return s.nodePermissions(f,"wx")},mayDelete(f,B,p){var h;try{h=s.lookupNode(f,B)}catch(P){return P.errno}var w=s.nodePermissions(f,"wx");if(w)return w;if(p){if(!s.isDir(h.mode))return 54;if(s.isRoot(h)||s.getPath(h)===s.cwd())return 10}else if(s.isDir(h.mode))return 31;return 0},mayOpen(f,B){if(!f)return 44;if(s.isLink(f.mode))return 32;var p=s.flagsToPermissionString(B);return s.isDir(f.mode)&&(p!=="r"||B&576)?31:s.nodePermissions(f,p)},checkOpExists(f,B){if(!f)throw new s.ErrnoError(B);return f},MAX_OPEN_FDS:4096,nextfd(){for(var f=0;f<=s.MAX_OPEN_FDS;f++)if(!s.streams[f])return f;throw new s.ErrnoError(33)},getStreamChecked(f){var B=s.getStream(f);if(!B)throw new s.ErrnoError(8);return B},getStream:f=>s.streams[f],createStream(f,B=-1){return f=Object.assign(new s.FSStream,f),B==-1&&(B=s.nextfd()),f.fd=B,s.streams[B]=f,f},closeStream(f){s.streams[f]=null},dupStream(f,B=-1){var p=s.createStream(f,B);return p.stream_ops?.dup?.(p),p},doSetAttr(f,B,p){var h=f?.stream_ops.setattr,w=h?f:B;h??(h=B.node_ops.setattr),s.checkOpExists(h,63);try{h(w,p)}catch(P){throw P instanceof RangeError?new s.ErrnoError(22):P}},chrdev_stream_ops:{open(f){var B=s.getDevice(f.node.rdev);f.stream_ops=B.stream_ops,f.stream_ops.open?.(f)},llseek(){throw new s.ErrnoError(70)}},major:f=>f>>8,minor:f=>f&255,makedev:(f,B)=>f<<8|B,registerDevice(f,B){s.devices[f]={stream_ops:B}},getDevice:f=>s.devices[f],getMounts(f){for(var B=[],p=[f];p.length;){var h=p.pop();B.push(h),p.push(...h.mounts)}return B},syncfs(f,B){typeof f=="function"&&(B=f,f=!1),s.syncFSRequests++,s.syncFSRequests>1&&N(`warning: ${s.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var p=s.getMounts(s.root.mount),h=0;function w(Q){return s.syncFSRequests--,B(Q)}function P(Q){if(Q)return P.errored?void 0:(P.errored=!0,w(Q));++h>=p.length&&w(null)}for(var J of p)J.type.syncfs?J.type.syncfs(J,f,P):P(null)},mount(f,B,p){var h=p==="/",w=!p,P;if(h&&s.root)throw new s.ErrnoError(10);if(!h&&!w){var J=s.lookupPath(p,{follow_mount:!1});if(p=J.path,P=J.node,s.isMountpoint(P))throw new s.ErrnoError(10);if(!s.isDir(P.mode))throw new s.ErrnoError(54)}var Q={type:f,opts:B,mountpoint:p,mounts:[]},l0=f.mount(Q);return l0.mount=Q,Q.root=l0,h?s.root=l0:P&&(P.mounted=Q,P.mount&&P.mount.mounts.push(Q)),l0},unmount(f){var B=s.lookupPath(f,{follow_mount:!1});if(!s.isMountpoint(B.node))throw new s.ErrnoError(28);var p=B.node,h=p.mounted,w=s.getMounts(h);for(var[P,J]of Object.entries(s.nameTable))for(;J;){var Q=J.name_next;w.includes(J.mount)&&s.destroyNode(J),J=Q}p.mounted=null;var l0=p.mount.mounts.indexOf(h);p.mount.mounts.splice(l0,1)},lookup(f,B){return f.node_ops.lookup(f,B)},mknod(f,B,p){var h=s.lookupPath(f,{parent:!0}),w=h.node,P=o0.basename(f);if(!P)throw new s.ErrnoError(28);if(P==="."||P==="..")throw new s.ErrnoError(20);var J=s.mayCreate(w,P);if(J)throw new s.ErrnoError(J);if(!w.node_ops.mknod)throw new s.ErrnoError(63);return w.node_ops.mknod(w,P,B,p)},statfs(f){return s.statfsNode(s.lookupPath(f,{follow:!0}).node)},statfsStream(f){return s.statfsNode(f.node)},statfsNode(f){var B={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:s.nextInode,ffree:s.nextInode-1,fsid:42,flags:2,namelen:255};return f.node_ops.statfs&&Object.assign(B,f.node_ops.statfs(f.mount.opts.root)),B},create(f,B=438){return B&=4095,B|=32768,s.mknod(f,B,0)},mkdir(f,B=511){return B&=1023,B|=16384,s.mknod(f,B,0)},mkdirTree(f,B){var p=f.split("/"),h="";for(var w of p)if(w){(h||o0.isAbs(f))&&(h+="/"),h+=w;try{s.mkdir(h,B)}catch(P){if(P.errno!=20)throw P}}},mkdev(f,B,p){return typeof p>"u"&&(p=B,B=438),B|=8192,s.mknod(f,B,p)},symlink(f,B){if(!Fx.resolve(f))throw new s.ErrnoError(44);var p=s.lookupPath(B,{parent:!0}),h=p.node;if(!h)throw new s.ErrnoError(44);var w=o0.basename(B),P=s.mayCreate(h,w);if(P)throw new s.ErrnoError(P);if(!h.node_ops.symlink)throw new s.ErrnoError(63);return h.node_ops.symlink(h,w,f)},rename(f,B){var p=o0.dirname(f),h=o0.dirname(B),w=o0.basename(f),P=o0.basename(B),J,Q,l0;if(J=s.lookupPath(f,{parent:!0}),Q=J.node,J=s.lookupPath(B,{parent:!0}),l0=J.node,!Q||!l0)throw new s.ErrnoError(44);if(Q.mount!==l0.mount)throw new s.ErrnoError(75);var k0=s.lookupNode(Q,w),Z0=Fx.relative(f,h);if(Z0.charAt(0)!==".")throw new s.ErrnoError(28);if(Z0=Fx.relative(B,p),Z0.charAt(0)!==".")throw new s.ErrnoError(55);var J0;try{J0=s.lookupNode(l0,P)}catch{}if(k0!==J0){var O0=s.isDir(k0.mode),q0=s.mayDelete(Q,w,O0);if(q0)throw new s.ErrnoError(q0);if(q0=J0?s.mayDelete(l0,P,O0):s.mayCreate(l0,P),q0)throw new s.ErrnoError(q0);if(!Q.node_ops.rename)throw new s.ErrnoError(63);if(s.isMountpoint(k0)||J0&&s.isMountpoint(J0))throw new s.ErrnoError(10);if(l0!==Q&&(q0=s.nodePermissions(Q,"w"),q0))throw new s.ErrnoError(q0);s.hashRemoveNode(k0);try{Q.node_ops.rename(k0,l0,P),k0.parent=l0}catch(cx){throw cx}finally{s.hashAddNode(k0)}}},rmdir(f){var B=s.lookupPath(f,{parent:!0}),p=B.node,h=o0.basename(f),w=s.lookupNode(p,h),P=s.mayDelete(p,h,!0);if(P)throw new s.ErrnoError(P);if(!p.node_ops.rmdir)throw new s.ErrnoError(63);if(s.isMountpoint(w))throw new s.ErrnoError(10);p.node_ops.rmdir(p,h),s.destroyNode(w)},readdir(f){var B=s.lookupPath(f,{follow:!0}),p=B.node,h=s.checkOpExists(p.node_ops.readdir,54);return h(p)},unlink(f){var B=s.lookupPath(f,{parent:!0}),p=B.node;if(!p)throw new s.ErrnoError(44);var h=o0.basename(f),w=s.lookupNode(p,h),P=s.mayDelete(p,h,!1);if(P)throw new s.ErrnoError(P);if(!p.node_ops.unlink)throw new s.ErrnoError(63);if(s.isMountpoint(w))throw new s.ErrnoError(10);p.node_ops.unlink(p,h),s.destroyNode(w)},readlink(f){var B=s.lookupPath(f),p=B.node;if(!p)throw new s.ErrnoError(44);if(!p.node_ops.readlink)throw new s.ErrnoError(28);return p.node_ops.readlink(p)},stat(f,B){var p=s.lookupPath(f,{follow:!B}),h=p.node,w=s.checkOpExists(h.node_ops.getattr,63);return w(h)},fstat(f){var B=s.getStreamChecked(f),p=B.node,h=B.stream_ops.getattr,w=h?B:p;return h??(h=p.node_ops.getattr),s.checkOpExists(h,63),h(w)},lstat(f){return s.stat(f,!0)},doChmod(f,B,p,h){s.doSetAttr(f,B,{mode:p&4095|B.mode&-4096,ctime:Date.now(),dontFollow:h})},chmod(f,B,p){var h;if(typeof f=="string"){var w=s.lookupPath(f,{follow:!p});h=w.node}else h=f;s.doChmod(null,h,B,p)},lchmod(f,B){s.chmod(f,B,!0)},fchmod(f,B){var p=s.getStreamChecked(f);s.doChmod(p,p.node,B,!1)},doChown(f,B,p){s.doSetAttr(f,B,{timestamp:Date.now(),dontFollow:p})},chown(f,B,p,h){var w;if(typeof f=="string"){var P=s.lookupPath(f,{follow:!h});w=P.node}else w=f;s.doChown(null,w,h)},lchown(f,B,p){s.chown(f,B,p,!0)},fchown(f,B,p){var h=s.getStreamChecked(f);s.doChown(h,h.node,!1)},doTruncate(f,B,p){if(s.isDir(B.mode))throw new s.ErrnoError(31);if(!s.isFile(B.mode))throw new s.ErrnoError(28);var h=s.nodePermissions(B,"w");if(h)throw new s.ErrnoError(h);s.doSetAttr(f,B,{size:p,timestamp:Date.now()})},truncate(f,B){if(B<0)throw new s.ErrnoError(28);var p;if(typeof f=="string"){var h=s.lookupPath(f,{follow:!0});p=h.node}else p=f;s.doTruncate(null,p,B)},ftruncate(f,B){var p=s.getStreamChecked(f);if(B<0||(p.flags&2097155)===0)throw new s.ErrnoError(28);s.doTruncate(p,p.node,B)},utime(f,B,p){var h=s.lookupPath(f,{follow:!0}),w=h.node,P=s.checkOpExists(w.node_ops.setattr,63);P(w,{atime:B,mtime:p})},open(f,B,p=438){if(f==="")throw new s.ErrnoError(44);B=kA(B),B&64?p=p&4095|32768:p=0;var h,w;if(typeof f=="object")h=f;else{w=f.endsWith("/");var P=s.lookupPath(f,{follow:!(B&131072),noent_okay:!0});h=P.node,f=P.path}var J=!1;if(B&64)if(h){if(B&128)throw new s.ErrnoError(20)}else{if(w)throw new s.ErrnoError(31);h=s.mknod(f,p|511,0),J=!0}if(!h)throw new s.ErrnoError(44);if(s.isChrdev(h.mode)&&(B&=-513),B&65536&&!s.isDir(h.mode))throw new s.ErrnoError(54);if(!J){var Q=s.mayOpen(h,B);if(Q)throw new s.ErrnoError(Q)}B&512&&!J&&s.truncate(h,0),B&=-131713;var l0=s.createStream({node:h,path:s.getPath(h),flags:B,seekable:!0,position:0,stream_ops:h.stream_ops,ungotten:[],error:!1});return l0.stream_ops.open&&l0.stream_ops.open(l0),J&&s.chmod(h,p&511),l0},close(f){if(s.isClosed(f))throw new s.ErrnoError(8);f.getdents&&(f.getdents=null);try{f.stream_ops.close&&f.stream_ops.close(f)}catch(B){throw B}finally{s.closeStream(f.fd)}f.fd=null},isClosed(f){return f.fd===null},llseek(f,B,p){if(s.isClosed(f))throw new s.ErrnoError(8);if(!f.seekable||!f.stream_ops.llseek)throw new s.ErrnoError(70);if(p!=0&&p!=1&&p!=2)throw new s.ErrnoError(28);return f.position=f.stream_ops.llseek(f,B,p),f.ungotten=[],f.position},read(f,B,p,h,w){if(h<0||w<0)throw new s.ErrnoError(28);if(s.isClosed(f))throw new s.ErrnoError(8);if((f.flags&2097155)===1)throw new s.ErrnoError(8);if(s.isDir(f.node.mode))throw new s.ErrnoError(31);if(!f.stream_ops.read)throw new s.ErrnoError(28);var P=typeof w<"u";if(!P)w=f.position;else if(!f.seekable)throw new s.ErrnoError(70);var J=f.stream_ops.read(f,B,p,h,w);return P||(f.position+=J),J},write(f,B,p,h,w,P){if(h<0||w<0)throw new s.ErrnoError(28);if(s.isClosed(f))throw new s.ErrnoError(8);if((f.flags&2097155)===0)throw new s.ErrnoError(8);if(s.isDir(f.node.mode))throw new s.ErrnoError(31);if(!f.stream_ops.write)throw new s.ErrnoError(28);f.seekable&&f.flags&1024&&s.llseek(f,0,2);var J=typeof w<"u";if(!J)w=f.position;else if(!f.seekable)throw new s.ErrnoError(70);var Q=f.stream_ops.write(f,B,p,h,w,P);return J||(f.position+=Q),Q},mmap(f,B,p,h,w){if((h&2)!==0&&(w&2)===0&&(f.flags&2097155)!==2)throw new s.ErrnoError(2);if((f.flags&2097155)===1)throw new s.ErrnoError(2);if(!f.stream_ops.mmap)throw new s.ErrnoError(43);if(!B)throw new s.ErrnoError(28);return f.stream_ops.mmap(f,B,p,h,w)},msync(f,B,p,h,w){return f.stream_ops.msync?f.stream_ops.msync(f,B,p,h,w):0},ioctl(f,B,p){if(!f.stream_ops.ioctl)throw new s.ErrnoError(59);return f.stream_ops.ioctl(f,B,p)},readFile(f,B={}){B.flags=B.flags||0,B.encoding=B.encoding||"binary",B.encoding!=="utf8"&&B.encoding!=="binary"&&b0(`Invalid encoding type "${B.encoding}"`);var p=s.open(f,B.flags),h=s.stat(f),w=h.size,P=new Uint8Array(w);return s.read(p,P,0,w,0),B.encoding==="utf8"&&(P=Px(P)),s.close(p),P},writeFile(f,B,p={}){p.flags=p.flags||577;var h=s.open(f,p.flags,p.mode);B=xA(B),s.write(h,B,0,B.byteLength,void 0,p.canOwn),s.close(h)},cwd:()=>s.currentPath,chdir(f){var B=s.lookupPath(f,{follow:!0});if(B.node===null)throw new s.ErrnoError(44);if(!s.isDir(B.node.mode))throw new s.ErrnoError(54);var p=s.nodePermissions(B.node,"x");if(p)throw new s.ErrnoError(p);s.currentPath=B.path},createDefaultDirectories(){s.mkdir("/tmp"),s.mkdir("/home"),s.mkdir("/home/web_user")},createDefaultDevices(){s.mkdir("/dev"),s.registerDevice(s.makedev(1,3),{read:()=>0,write:(h,w,P,J,Q)=>J,llseek:()=>0}),s.mkdev("/dev/null",s.makedev(1,3)),V0.register(s.makedev(5,0),V0.default_tty_ops),V0.register(s.makedev(6,0),V0.default_tty1_ops),s.mkdev("/dev/tty",s.makedev(5,0)),s.mkdev("/dev/tty1",s.makedev(6,0));var f=new Uint8Array(1024),B=0,p=()=>(B===0&&(ie(f),B=f.byteLength),f[--B]);s.createDevice("/dev","random",p),s.createDevice("/dev","urandom",p),s.mkdir("/dev/shm"),s.mkdir("/dev/shm/tmp")},createSpecialDirectories(){s.mkdir("/proc");var f=s.mkdir("/proc/self");s.mkdir("/proc/self/fd"),s.mount({mount(){var B=s.createNode(f,"fd",16895,73);return B.stream_ops={llseek:K.stream_ops.llseek},B.node_ops={lookup(p,h){var w=+h,P=s.getStreamChecked(w),J={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>P.path},id:w+1};return J.parent=J,J},readdir(){return Array.from(s.streams.entries()).filter(([p,h])=>h).map(([p,h])=>p.toString())}},B}},{},"/proc/self/fd")},createStandardStreams(f,B,p){f?s.createDevice("/dev","stdin",f):s.symlink("/dev/tty","/dev/stdin"),B?s.createDevice("/dev","stdout",null,B):s.symlink("/dev/tty","/dev/stdout"),p?s.createDevice("/dev","stderr",null,p):s.symlink("/dev/tty1","/dev/stderr");var h=s.open("/dev/stdin",0),w=s.open("/dev/stdout",1),P=s.open("/dev/stderr",1)},staticInit(){s.nameTable=new Array(4096),s.mount(K,{},"/"),s.createDefaultDirectories(),s.createDefaultDevices(),s.createSpecialDirectories(),s.filesystems={MEMFS:K,PROXYFS:m0}},init(f,B,p){s.initialized=!0,f??(f=i.stdin),B??(B=i.stdout),p??(p=i.stderr),s.createStandardStreams(f,B,p)},quit(){s.initialized=!1,JA(0);for(var f of s.streams)f&&s.close(f)},findObject(f,B){var p=s.analyzePath(f,B);return p.exists?p.object:null},analyzePath(f,B){try{var p=s.lookupPath(f,{follow:!B});f=p.path}catch{}var h={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var p=s.lookupPath(f,{parent:!0});h.parentExists=!0,h.parentPath=p.path,h.parentObject=p.node,h.name=o0.basename(f),p=s.lookupPath(f,{follow:!B}),h.exists=!0,h.path=p.path,h.object=p.node,h.name=p.node.name,h.isRoot=p.path==="/"}catch(w){h.error=w.errno}return h},createPath(f,B,p,h){f=typeof f=="string"?f:s.getPath(f);for(var w=B.split("/").reverse();w.length;){var P=w.pop();if(P){var J=o0.join2(f,P);try{s.mkdir(J)}catch(Q){if(Q.errno!=20)throw Q}f=J}}return J},createFile(f,B,p,h,w){var P=o0.join2(typeof f=="string"?f:s.getPath(f),B),J=AA(h,w);return s.create(P,J)},createDataFile(f,B,p,h,w,P){var J=B;f&&(f=typeof f=="string"?f:s.getPath(f),J=B?o0.join2(f,B):f);var Q=AA(h,w),l0=s.create(J,Q);if(p){p=xA(p),s.chmod(l0,Q|146);var k0=s.open(l0,577);s.write(k0,p,0,p.length,0,P),s.close(k0),s.chmod(l0,Q)}},createDevice(f,B,p,h){var w,P=o0.join2(typeof f=="string"?f:s.getPath(f),B),J=AA(!!p,!!h);(w=s.createDevice).major??(w.major=64);var Q=s.makedev(s.createDevice.major++,0);return s.registerDevice(Q,{open(l0){l0.seekable=!1},close(l0){h?.buffer?.length&&h(10)},read(l0,k0,Z0,J0,O0){for(var q0=0,cx=0;cx<J0;cx++){var wx;try{wx=p()}catch{throw new s.ErrnoError(29)}if(wx===void 0&&q0===0)throw new s.ErrnoError(6);if(wx==null)break;q0++,k0[Z0+cx]=wx}return q0&&(l0.node.atime=Date.now()),q0},write(l0,k0,Z0,J0,O0){for(var q0=0;q0<J0;q0++)try{h(k0[Z0+q0])}catch{throw new s.ErrnoError(29)}return J0&&(l0.node.mtime=l0.node.ctime=Date.now()),q0}}),s.mkdev(P,J,Q)},forceLoadFile(f){if(f.isDevice||f.isFolder||f.link||f.contents)return!0;if(globalThis.XMLHttpRequest)b0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{f.contents=$(f.url)}catch{throw new s.ErrnoError(29)}},createLazyFile(f,B,p,h,w){class P{constructor(){ex(this,"lengthKnown",!1),ex(this,"chunks",[])}get(O0){if(!(O0>this.length-1||O0<0)){var q0=O0%this.chunkSize,cx=O0/this.chunkSize|0;return this.getter(cx)[q0]}}setDataGetter(O0){this.getter=O0}cacheLength(){var O0=new XMLHttpRequest;O0.open("HEAD",p,!1),O0.send(null),O0.status>=200&&O0.status<300||O0.status===304||b0("Couldn't load "+p+". Status: "+O0.status);var q0=Number(O0.getResponseHeader("Content-length")),cx,wx=(cx=O0.getResponseHeader("Accept-Ranges"))&&cx==="bytes",Gx=(cx=O0.getResponseHeader("Content-Encoding"))&&cx==="gzip",Wx=1024*1024;wx||(Wx=q0);var Xx=(eA,vA)=>{eA>vA&&b0("invalid range ("+eA+", "+vA+") or no bytes requested!"),vA>q0-1&&b0("only "+q0+" bytes available! programmer error!");var ux=new XMLHttpRequest;return ux.open("GET",p,!1),q0!==Wx&&ux.setRequestHeader("Range","bytes="+eA+"-"+vA),ux.responseType="arraybuffer",ux.overrideMimeType&&ux.overrideMimeType("text/plain; charset=x-user-defined"),ux.send(null),ux.status>=200&&ux.status<300||ux.status===304||b0("Couldn't load "+p+". Status: "+ux.status),ux.response!==void 0?new Uint8Array(ux.response||[]):dA(ux.responseText||"",!0)},WA=this;WA.setDataGetter(eA=>{var vA=eA*Wx,ux=(eA+1)*Wx-1;return ux=Math.min(ux,q0-1),typeof WA.chunks[eA]>"u"&&(WA.chunks[eA]=Xx(vA,ux)),typeof WA.chunks[eA]>"u"&&b0("doXHR failed!"),WA.chunks[eA]}),(Gx||!q0)&&(Wx=q0=1,q0=this.getter(0).length,Wx=q0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=q0,this._chunkSize=Wx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){c||b0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var J=new P,Q={isDevice:!1,contents:J}}else var Q={isDevice:!1,url:p};var l0=s.createFile(f,B,Q,h,w);Q.contents?l0.contents=Q.contents:Q.url&&(l0.contents=null,l0.url=Q.url),Object.defineProperties(l0,{usedBytes:{get:function(){return this.contents.length}}});var k0={};for(let[J0,O0]of Object.entries(l0.stream_ops))k0[J0]=(...q0)=>(s.forceLoadFile(l0),O0(...q0));function Z0(J0,O0,q0,cx,wx){var Gx=J0.node.contents;if(wx>=Gx.length)return 0;var Wx=Math.min(Gx.length-wx,cx);if(Gx.slice)for(var Xx=0;Xx<Wx;Xx++)O0[q0+Xx]=Gx[wx+Xx];else for(var Xx=0;Xx<Wx;Xx++)O0[q0+Xx]=Gx.get(wx+Xx);return Wx}return k0.read=(J0,O0,q0,cx,wx)=>(s.forceLoadFile(l0),Z0(J0,O0,q0,cx,wx)),k0.mmap=(J0,O0,q0,cx,wx)=>{s.forceLoadFile(l0);var Gx=uA(O0);if(!Gx)throw new s.ErrnoError(48);return Z0(J0,$0,Gx,O0,q0),{ptr:Gx,allocated:!0}},l0.stream_ops=k0,l0}},h0={currentUmask:18,calculateAt(f,B,p){if(o0.isAbs(B))return B;var h;if(f===-100)h=s.cwd();else{var w=h0.getStreamFromFD(f);h=w.path}if(B.length==0){if(!p)throw new s.ErrnoError(44);return h}return h+"/"+B},writeStat(f,B){C0[f>>2]=B.dev,C0[f+4>>2]=B.mode,C0[f+8>>2]=B.nlink,C0[f+12>>2]=B.uid,C0[f+16>>2]=B.gid,C0[f+20>>2]=B.rdev,Q0[f+24>>3]=BigInt(B.size),K0[f+32>>2]=4096,K0[f+36>>2]=B.blocks;var p=B.atime.getTime(),h=B.mtime.getTime(),w=B.ctime.getTime();return Q0[f+40>>3]=BigInt(Math.floor(p/1e3)),C0[f+48>>2]=p%1e3*1e3*1e3,Q0[f+56>>3]=BigInt(Math.floor(h/1e3)),C0[f+64>>2]=h%1e3*1e3*1e3,Q0[f+72>>3]=BigInt(Math.floor(w/1e3)),C0[f+80>>2]=w%1e3*1e3*1e3,Q0[f+88>>3]=BigInt(B.ino),0},writeStatFs(f,B){C0[f+4>>2]=B.bsize,C0[f+60>>2]=B.bsize,Q0[f+8>>3]=BigInt(B.blocks),Q0[f+16>>3]=BigInt(B.bfree),Q0[f+24>>3]=BigInt(B.bavail),Q0[f+32>>3]=BigInt(B.files),Q0[f+40>>3]=BigInt(B.ffree),C0[f+48>>2]=B.fsid,C0[f+64>>2]=B.flags,C0[f+56>>2]=B.namelen},doMsync(f,B,p,h,w){if(!s.isFile(B.node.mode))throw new s.ErrnoError(43);if(h&2)return 0;var P=sA.slice(f,f+p);s.msync(B,P,w,p,h)},getStreamFromFD(f){var B=s.getStreamChecked(f);return B},varargs:void 0,getStr(f){var B=lx(f);return B}};function ye(f,B,p){h0.varargs=p;try{var h=h0.getStreamFromFD(f);switch(B){case 0:{var w=zx();if(w<0)return-28;for(;s.streams[w];)w++;var P;return P=s.dupStream(h,w),P.fd}case 1:case 2:return 0;case 3:return h.flags;case 4:{var w=zx(),J=289792;return h.flags=h.flags&~J|w&J,0}case 12:{var w=Vx(),Q=0;return W0[w+Q>>1]=2,0}case 13:case 14:return 0}return-28}catch(l0){if(typeof s>"u"||l0.name!=="ErrnoError")throw l0;return-l0.errno}}function yA(f,B,p){h0.varargs=p;try{var h=h0.getStreamFromFD(f);switch(B){case 21509:return h.tty?0:-59;case 21505:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcgets){var w=h.tty.ops.ioctl_tcgets(h),P=Vx();K0[P>>2]=w.c_iflag||0,K0[P+4>>2]=w.c_oflag||0,K0[P+8>>2]=w.c_cflag||0,K0[P+12>>2]=w.c_lflag||0;for(var J=0;J<32;J++)$0[P+J+17]=w.c_cc[J]||0;return 0}return 0}case 21510:case 21511:case 21512:return h.tty?0:-59;case 21506:case 21507:case 21508:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcsets){for(var P=Vx(),Q=K0[P>>2],l0=K0[P+4>>2],k0=K0[P+8>>2],Z0=K0[P+12>>2],J0=[],J=0;J<32;J++)J0.push($0[P+J+17]);return h.tty.ops.ioctl_tcsets(h.tty,B,{c_iflag:Q,c_oflag:l0,c_cflag:k0,c_lflag:Z0,c_cc:J0})}return 0}case 21519:{if(!h.tty)return-59;var P=Vx();return K0[P>>2]=0,0}case 21520:return h.tty?-28:-59;case 21537:case 21531:{var P=Vx();return s.ioctl(h,B,P)}case 21523:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tiocgwinsz){var O0=h.tty.ops.ioctl_tiocgwinsz(h.tty),P=Vx();W0[P>>1]=O0[0],W0[P+2>>1]=O0[1]}return 0}case 21524:return h.tty?0:-59;case 21515:return h.tty?0:-59;default:return-28}}catch(q0){if(typeof s>"u"||q0.name!=="ErrnoError")throw q0;return-q0.errno}}function bA(f,B,p,h){h0.varargs=h;try{B=h0.getStr(B),B=h0.calculateAt(f,B);var w=h?zx():0;return p&64&&(w&=~h0.currentUmask),s.open(B,p,w).fd}catch(P){if(typeof s>"u"||P.name!=="ErrnoError")throw P;return-P.errno}}var kr=()=>2147483648,Fe=(f,B)=>Math.ceil(f/B)*B,Qe=f=>{var B=_A.buffer.byteLength,p=(f-B+65535)/65536|0;try{return _A.grow(p),x0(),1}catch{}},Ze=f=>{var B=sA.length;f>>>=0;var p=kr();if(f>p)return!1;for(var h=1;h<=4;h*=2){var w=B*(1+.2/h);w=Math.min(w,f+100663296);var P=Math.min(p,Fe(Math.max(f,w),65536)),J=Qe(P);if(J)return!0}return!1};function yr(f){try{var B=h0.getStreamFromFD(f);return s.close(B),0}catch(p){if(typeof s>"u"||p.name!=="ErrnoError")throw p;return p.errno}}var _r=(f,B,p,h)=>{for(var w=0,P=0;P<p;P++){var J=C0[B>>2],Q=C0[B+4>>2];B+=8;var l0=s.read(f,$0,J,Q,h);if(l0<0)return-1;if(w+=l0,l0<Q)break;typeof h<"u"&&(h+=l0)}return w};function wr(f,B,p,h){try{var w=h0.getStreamFromFD(f),P=_r(w,B,p);return C0[h>>2]=P,0}catch(J){if(typeof s>"u"||J.name!=="ErrnoError")throw J;return J.errno}}var ve=9007199254740992,xr=-9007199254740992,UA=f=>f<xr||f>ve?NaN:Number(f);function fe(f,B,p,h){B=UA(B);try{if(isNaN(B))return 22;var w=h0.getStreamFromFD(f);return s.llseek(w,B,p),Q0[h>>3]=BigInt(w.position),w.getdents&&B===0&&p===0&&(w.getdents=null),0}catch(P){if(typeof s>"u"||P.name!=="ErrnoError")throw P;return P.errno}}var Sr=(f,B,p,h)=>{for(var w=0,P=0;P<p;P++){var J=C0[B>>2],Q=C0[B+4>>2];B+=8;var l0=s.write(f,$0,J,Q,h);if(l0<0)return-1;if(w+=l0,l0<Q)break;typeof h<"u"&&(h+=l0)}return w};function Ar(f,B,p,h){try{var w=h0.getStreamFromFD(f),P=Sr(w,B,p);return C0[h>>2]=P,0}catch(J){if(typeof s>"u"||J.name!=="ErrnoError")throw J;return J.errno}}var er=0,HA=()=>ne||er>0,le=f=>{R=f,HA()||(i.onExit?.(f),F0=!0),g(f,new ox(f))},_e=(f,B)=>{R=f,HA()||c0(),le(f)},rr=f=>{if(f instanceof ox||f=="unwind")return R;g(1,f)},tr=(f,B,p)=>se(f,sA,B,p),nr=f=>KA(f),qr=f=>{var B=CA(f)+1,p=nr(B);return tr(f,p,B),p},Tr=(...f)=>s.createPath(...f),ce=(...f)=>s.unlink(...f),Pr=(...f)=>s.createLazyFile(...f),$r=(...f)=>s.createDevice(...f);if(s.createPreloadedFile=gr,s.preloadFile=FA,s.staticInit(),i.noExitRuntime&&(ne=i.noExitRuntime),i.preloadPlugins&&(GA=i.preloadPlugins),i.print&&(M=i.print),i.printErr&&(N=i.printErr),i.wasmBinary&&(z=i.wasmBinary),i.arguments&&(b=i.arguments),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();i.callMain=yx,i.addRunDependency=$x,i.removeRunDependency=oe,i.FS_preloadFile=FA,i.FS_unlink=ce,i.FS_createPath=Tr,i.FS_createDevice=$r,i.FS=s,i.FS_createDataFile=ae,i.FS_createLazyFile=Pr,i.PROXYFS=m0;var ir,sr,JA,ar,KA,we,Ox,Nr,_A;function zA(f){ir=i._main=f.__main_argc_argv,sr=f.__funcs_on_exit,JA=f.fflush,ar=f._emscripten_stack_restore,KA=f._emscripten_stack_alloc,we=f.emscripten_stack_get_current,Ox=_A=f.memory,Nr=f.__indirect_function_table}var Se={__assert_fail:BA,__syscall_fcntl64:ye,__syscall_ioctl:yA,__syscall_openat:bA,emscripten_resize_heap:Ze,fd_close:yr,fd_read:wr,fd_seek:fe,fd_write:Ar};function yx(f=[]){var B=ir;f.unshift(m);var p=f.length,h=nr((p+1)*4),w=h;for(var P of f)C0[w>>2]=qr(P),w+=4;C0[w>>2]=0;try{var J=B(p,h);return _e(J,!0),J}catch(Q){return rr(Q)}}function Ee(f=b){if(tx>0){w0=Ee;return}if(f0(),tx>0){w0=Ee;return}function B(){if(i.calledRun=!0,!F0){U(),H?.(i),i.onRuntimeInitialized?.();var p=i.noInitialRun||!0;p||yx(f),p0()}}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),B()},1)):B()}var VA;return VA=await G0(),Ee(),n0?a=i:a=new Promise((f,B)=>{H=f,V=B}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),BB=es({"wasm/bin/pawnrun.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var a,i=t,l=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],m="./this.program",g=(F,n)=>{throw n};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var q="",_,$;if(u){var T=require("fs");q=__dirname+"/",$=F=>{F=R(F)?new URL(F):F;var n=T.readFileSync(F);return n},_=async(F,n=!0)=>{F=R(F)?new URL(F):F;var o=T.readFileSync(F,n?void 0:"utf8");return o},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(F,n)=>{throw process.exitCode=F,n}}else if(l||c){try{q=new URL(".",r).href}catch{}c&&($=F=>{var n=new XMLHttpRequest;return n.open("GET",F,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),_=async F=>{if(R(F))return new Promise((o,v)=>{var E=new XMLHttpRequest;E.open("GET",F,!0),E.responseType="arraybuffer",E.onload=()=>{if(E.status==200||E.status==0&&E.response){o(E.response);return}v(E.status)},E.onerror=v,E.send(null)});var n=await fetch(F,{credentials:"same-origin"});if(n.ok)return n.arrayBuffer();throw new Error(n.status+" : "+n.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,F0=!1,R=F=>F.startsWith("file://");class k{}class O extends k{}function W(F){for(var n=0,o=F.length,v=new Uint8Array(o),E;n<o;++n)E=F.charCodeAt(n),v[n]=~E>>8&E;return v}var Y,H,V=!1;function n0(){var F=qe.buffer;ox=new Int8Array(F),Kx=new Int16Array(F),i.HEAPU8=OA=new Uint8Array(F),Q0=new Uint16Array(F),i.HEAP32=H0=new Int32Array(F),i.HEAPU32=$0=new Uint32Array(F),W0=new Float32Array(F),K0=new Float64Array(F),G0=new BigInt64Array(F),br=new BigUint64Array(F)}function r0(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)hA(i.preRun.shift());We(sA)}function x0(){V=!0,!i.noFSInit&&!s.initialized&&s.init(),V0.init(),XA.__wasm_call_ctors(),s.ignorePermissions=!1}function f0(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)mr(i.postRun.shift());We(C0)}function U(F){i.onAbort?.(F),F=`Aborted(${F})`,N(F),F0=!0,F+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(F);throw H?.(n),n}var v0;function c0(){return W(`\0asm\0\0\0\xD7#\`\x7F\x7F\x7F\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\`\0\x7F\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\x7F\0\`}}\`\x7F~~~~\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F~~\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\x7F\0\`|}\`\x7F}\`|\x7F|\`\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\0|\`|\0\`}\x7F\x7F\`}}}\`\x7F}}\`}\x7F\`}\x7F}\`\x7F~~~\0\`\x7F~\`|\x7F}\`~\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xBE\fenvpr_js_has_dispatch\0envpr_js_dispatch\0env\r__assert_fail\0env\fpr_debug_out\0\0env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xD9\xD7\r\x07\0\0\0\v\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x07\x07\v\r\0\b\b\b\b\b\x07
1526
+ \0A\x80\v\vp\0\0D\0\0\0`)}function dx(l){return l}async function iA(l){return l}async function LA(l,B){try{var p=await iA(l),h=await WebAssembly.instantiate(p,B);return h}catch(w){N(`failed to asynchronously prepare wasm: ${w}`),b0(w)}}async function Kx(l,B,p){return LA(B,p)}function H0(){var l={env:Te,wasi_snapshot_preview1:Te};return l}async function G0(){function l(P,J){return VA=P.exports,zA(VA),x0(),VA}function B(P){return l(P.instance)}var p=H0();if(i.instantiateWasm)return new Promise((P,J)=>{i.instantiateWasm(p,(Q,l0)=>{P(l(Q,l0))})});I0??(I0=L0());var h=await Kx(z,I0,p),w=B(h);return w}class ox{constructor(B){ex(this,"name","ExitStatus"),this.message=`Program terminated with exit(${B})`,this.status=B}}var W0,K0,Q0,N0,br,OA,We,C0,mr,sA,gA=l=>{for(;l.length>0;)l.shift()(i)},kA=[],Xe=l=>kA.push(l),aA=[],Ye=l=>aA.push(l),se=!1,fx=globalThis.TextDecoder&&new TextDecoder,P0=(l,B,p,h)=>{var w=B+p;if(h)return w;for(;l[B]&&!(B>=w);)++B;return B},Px=(l,B=0,p,h)=>{var w=P0(l,B,p,h);if(w-B>16&&l.buffer&&fx)return fx.decode(l.subarray(B,w));for(var P="";B<w;){var J=l[B++];if(!(J&128)){P+=String.fromCharCode(J);continue}var Q=l[B++]&63;if((J&224)==192){P+=String.fromCharCode((J&31)<<6|Q);continue}var l0=l[B++]&63;if((J&240)==224?J=(J&15)<<12|Q<<6|l0:J=(J&7)<<18|Q<<12|l0<<6|l[B++]&63,J<65536)P+=String.fromCharCode(J);else{var k0=J-65536;P+=String.fromCharCode(55296|k0>>10,56320|k0&1023)}}return P},lx=(l,B,p)=>l?Px(sA,l,B,p):"",BA=(l,B,p,h)=>b0(`Assertion failed: ${lx(l)}, at: `+[B?lx(B):"unknown filename",p,h?lx(h):"unknown function"]),zx=()=>{var l=K0[+h0.varargs>>2];return h0.varargs+=4,l},Vx=zx,o0={isAbs:l=>l.charAt(0)==="/",splitPath:l=>{var B=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return B.exec(l).slice(1)},normalizeArray:(l,B)=>{for(var p=0,h=l.length-1;h>=0;h--){var w=l[h];w==="."?l.splice(h,1):w===".."?(l.splice(h,1),p++):p&&(l.splice(h,1),p--)}if(B)for(;p;p--)l.unshift("..");return l},normalize:l=>{var B=o0.isAbs(l),p=l.slice(-1)==="/";return l=o0.normalizeArray(l.split("/").filter(h=>!!h),!B).join("/"),!l&&!B&&(l="."),l&&p&&(l+="/"),(B?"/":"")+l},dirname:l=>{var B=o0.splitPath(l),p=B[0],h=B[1];return!p&&!h?".":(h&&(h=h.slice(0,-1)),p+h)},basename:l=>l&&l.match(/([^\/]+|\/)\/*$/)[1],join:(...l)=>o0.normalize(l.join("/")),join2:(l,B)=>o0.normalize(l+"/"+B)},jr=()=>{if(u){var l=require("crypto");return B=>l.randomFillSync(B)}return B=>(crypto.getRandomValues(B),0)},ae=l=>(ae=jr())(l),Fx={resolve:(...l)=>{for(var B="",p=!1,h=l.length-1;h>=-1&&!p;h--){var w=h>=0?l[h]:a.cwd();if(typeof w!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!w)return"";B=w+"/"+B,p=o0.isAbs(w)}return B=o0.normalizeArray(B.split("/").filter(P=>!!P),!p).join("/"),(p?"/":"")+B||"."},relative:(l,B)=>{l=Fx.resolve(l).slice(1),B=Fx.resolve(B).slice(1);function p(k0){for(var Z0=0;Z0<k0.length&&k0[Z0]==="";Z0++);for(var J0=k0.length-1;J0>=0&&k0[J0]==="";J0--);return Z0>J0?[]:k0.slice(Z0,J0-Z0+1)}for(var h=p(l.split("/")),w=p(B.split("/")),P=Math.min(h.length,w.length),J=P,Q=0;Q<P;Q++)if(h[Q]!==w[Q]){J=Q;break}for(var l0=[],Q=J;Q<h.length;Q++)l0.push("..");return l0=l0.concat(w.slice(J)),l0.join("/")}},Lx=[],CA=l=>{for(var B=0,p=0;p<l.length;++p){var h=l.charCodeAt(p);h<=127?B++:h<=2047?B+=2:h>=55296&&h<=57343?(B+=4,++p):B+=3}return B},oe=(l,B,p,h)=>{if(!(h>0))return 0;for(var w=p,P=p+h-1,J=0;J<l.length;++J){var Q=l.codePointAt(J);if(Q<=127){if(p>=P)break;B[p++]=Q}else if(Q<=2047){if(p+1>=P)break;B[p++]=192|Q>>6,B[p++]=128|Q&63}else if(Q<=65535){if(p+2>=P)break;B[p++]=224|Q>>12,B[p++]=128|Q>>6&63,B[p++]=128|Q&63}else{if(p+3>=P)break;B[p++]=240|Q>>18,B[p++]=128|Q>>12&63,B[p++]=128|Q>>6&63,B[p++]=128|Q&63,J++}}return B[p]=0,p-w},dA=(l,B,p)=>{var h=p>0?p:CA(l)+1,w=new Array(h),P=oe(l,w,0,w.length);return B&&(w.length=P),w},hr=()=>{if(!Lx.length){var l=null;if(u){var B=256,p=Buffer.alloc(B),h=0,w=process.stdin.fd;try{h=T.readSync(w,p,0,B)}catch(P){if(P.toString().includes("EOF"))h=0;else throw P}h>0&&(l=p.slice(0,h).toString("utf-8"))}else globalThis.window?.prompt&&(l=window.prompt("Input: "),l!==null&&(l+=`
1527
+ `));if(!l)return null;Lx=dA(l,!0)}return Lx.shift()},V0={ttys:[],init(){},shutdown(){},register(l,B){V0.ttys[l]={input:[],output:[],ops:B},a.registerDevice(l,V0.stream_ops)},stream_ops:{open(l){var B=V0.ttys[l.node.rdev];if(!B)throw new a.ErrnoError(43);l.tty=B,l.seekable=!1},close(l){l.tty.ops.fsync(l.tty)},fsync(l){l.tty.ops.fsync(l.tty)},read(l,B,p,h,w){if(!l.tty||!l.tty.ops.get_char)throw new a.ErrnoError(60);for(var P=0,J=0;J<h;J++){var Q;try{Q=l.tty.ops.get_char(l.tty)}catch{throw new a.ErrnoError(29)}if(Q===void 0&&P===0)throw new a.ErrnoError(6);if(Q==null)break;P++,B[p+J]=Q}return P&&(l.node.atime=Date.now()),P},write(l,B,p,h,w){if(!l.tty||!l.tty.ops.put_char)throw new a.ErrnoError(60);try{for(var P=0;P<h;P++)l.tty.ops.put_char(l.tty,B[p+P])}catch{throw new a.ErrnoError(29)}return h&&(l.node.mtime=l.node.ctime=Date.now()),P}},default_tty_ops:{get_char(l){return hr()},put_char(l,B){B===null||B===10?(M(Px(l.output)),l.output=[]):B!=0&&l.output.push(B)},fsync(l){l.output?.length>0&&(M(Px(l.output)),l.output=[])},ioctl_tcgets(l){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(l,B,p){return 0},ioctl_tiocgwinsz(l){return[24,80]}},default_tty1_ops:{put_char(l,B){B===null||B===10?(N(Px(l.output)),l.output=[]):B!=0&&l.output.push(B)},fsync(l){l.output?.length>0&&(N(Px(l.output)),l.output=[])}}},uA=l=>{b0()},K={ops_table:null,mount(l){return K.createNode(null,"/",16895,0)},createNode(l,B,p,h){if(a.isBlkdev(p)||a.isFIFO(p))throw new a.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:a.chrdev_stream_ops}});var w=a.createNode(l,B,p,h);return a.isDir(w.mode)?(w.node_ops=K.ops_table.dir.node,w.stream_ops=K.ops_table.dir.stream,w.contents={}):a.isFile(w.mode)?(w.node_ops=K.ops_table.file.node,w.stream_ops=K.ops_table.file.stream,w.usedBytes=0,w.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):a.isLink(w.mode)?(w.node_ops=K.ops_table.link.node,w.stream_ops=K.ops_table.link.stream):a.isChrdev(w.mode)&&(w.node_ops=K.ops_table.chrdev.node,w.stream_ops=K.ops_table.chrdev.stream),w.atime=w.mtime=w.ctime=Date.now(),l&&(l.contents[B]=w,l.atime=l.mtime=l.ctime=w.atime),w},getFileDataAsTypedArray(l){return l.contents.subarray(0,l.usedBytes)},expandFileStorage(l,B){var p=l.contents.length;if(!(p>=B)){var h=1024*1024;B=Math.max(B,p*(p<h?2:1.125)>>>0),p&&(B=Math.max(B,256));var w=K.getFileDataAsTypedArray(l);l.contents=new Uint8Array(B),l.contents.set(w)}},resizeFileStorage(l,B){if(l.usedBytes!=B){var p=l.contents;l.contents=new Uint8Array(B),l.contents.set(p.subarray(0,Math.min(B,l.usedBytes))),l.usedBytes=B}},node_ops:{getattr(l){var B={};return B.dev=a.isChrdev(l.mode)?l.id:1,B.ino=l.id,B.mode=l.mode,B.nlink=1,B.uid=0,B.gid=0,B.rdev=l.rdev,a.isDir(l.mode)?B.size=4096:a.isFile(l.mode)?B.size=l.usedBytes:a.isLink(l.mode)?B.size=l.link.length:B.size=0,B.atime=new Date(l.atime),B.mtime=new Date(l.mtime),B.ctime=new Date(l.ctime),B.blksize=4096,B.blocks=Math.ceil(B.size/B.blksize),B},setattr(l,B){for(let p of["mode","atime","mtime","ctime"])B[p]!=null&&(l[p]=B[p]);B.size!==void 0&&K.resizeFileStorage(l,B.size)},lookup(l,B){throw K.doesNotExistError||(K.doesNotExistError=new a.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(l,B,p,h){return K.createNode(l,B,p,h)},rename(l,B,p){var h;try{h=a.lookupNode(B,p)}catch{}if(h){if(a.isDir(l.mode))for(var w in h.contents)throw new a.ErrnoError(55);a.hashRemoveNode(h)}delete l.parent.contents[l.name],B.contents[p]=l,l.name=p,B.ctime=B.mtime=l.parent.ctime=l.parent.mtime=Date.now()},unlink(l,B){delete l.contents[B],l.ctime=l.mtime=Date.now()},rmdir(l,B){var p=a.lookupNode(l,B);for(var h in p.contents)throw new a.ErrnoError(55);delete l.contents[B],l.ctime=l.mtime=Date.now()},readdir(l){return[".","..",...Object.keys(l.contents)]},symlink(l,B,p){var h=K.createNode(l,B,41471,0);return h.link=p,h},readlink(l){if(!a.isLink(l.mode))throw new a.ErrnoError(28);return l.link}},stream_ops:{read(l,B,p,h,w){var P=l.node.contents;if(w>=l.node.usedBytes)return 0;var J=Math.min(l.node.usedBytes-w,h);return B.set(P.subarray(w,w+J),p),J},write(l,B,p,h,w,P){if(B.buffer===N0.buffer&&(P=!1),!h)return 0;var J=l.node;return J.mtime=J.ctime=Date.now(),P?(J.contents=B.subarray(p,p+h),J.usedBytes=h):J.usedBytes===0&&w===0?(J.contents=B.slice(p,p+h),J.usedBytes=h):(K.expandFileStorage(J,w+h),J.contents.set(B.subarray(p,p+h),w),J.usedBytes=Math.max(J.usedBytes,w+h)),h},llseek(l,B,p){var h=B;if(p===1?h+=l.position:p===2&&a.isFile(l.node.mode)&&(h+=l.node.usedBytes),h<0)throw new a.ErrnoError(28);return h},mmap(l,B,p,h,w){if(!a.isFile(l.node.mode))throw new a.ErrnoError(43);var P,J,Q=l.node.contents;if(!(w&2)&&Q.buffer===N0.buffer)J=!1,P=Q.byteOffset;else{if(J=!0,P=uA(B),!P)throw new a.ErrnoError(48);Q&&((p>0||p+B<Q.length)&&(Q.subarray?Q=Q.subarray(p,p+B):Q=Array.prototype.slice.call(Q,p,p+B)),N0.set(Q,P))}return{ptr:P,allocated:J}},msync(l,B,p,h,w){return K.stream_ops.write(l,B,0,h,p,!1),0}}},yA=l=>{if(typeof l!="string")return l;var B={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},p=B[l];if(typeof p>"u")throw new Error(`Unknown file open mode: ${l}`);return p},xA=l=>(typeof l=="string"&&(l=dA(l,!0)),l.subarray||(l=new Uint8Array(l)),l),AA=(l,B)=>{var p=0;return l&&(p|=365),B&&(p|=146),p},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},m0={mount(l){return m0.createNode(null,"/",l.opts.fs.lstat(l.opts.root).mode,0)},createNode(l,B,p,h){if(!a.isDir(p)&&!a.isFile(p)&&!a.isLink(p))throw new a.ErrnoError(y0.EINVAL);var w=a.createNode(l,B,p);return w.node_ops=m0.node_ops,w.stream_ops=m0.stream_ops,w},realPath(l){for(var B=[];l.parent!==l;)B.push(l.name),l=l.parent;return B.push(l.mount.opts.root),B.reverse(),o0.join(...B)},node_ops:{getattr(l){var B=m0.realPath(l),p;try{p=l.mount.opts.fs.lstat(B)}catch(h){throw h.code?new a.ErrnoError(y0[h.code]):h}return{dev:p.dev,ino:p.ino,mode:p.mode,nlink:p.nlink,uid:p.uid,gid:p.gid,rdev:p.rdev,size:p.size,atime:p.atime,mtime:p.mtime,ctime:p.ctime,blksize:p.blksize,blocks:p.blocks}},setattr(l,B){var p=m0.realPath(l);try{if(B.mode!==void 0&&(l.mount.opts.fs.chmod(p,B.mode),l.mode=B.mode),B.atime||B.mtime){var h=new Date(B.atime||B.mtime),w=new Date(B.mtime||B.atime);l.mount.opts.fs.utime(p,h,w)}B.size!==void 0&&l.mount.opts.fs.truncate(p,B.size)}catch(P){throw P.code?new a.ErrnoError(y0[P.code]):P}},lookup(l,B){try{var p=o0.join2(m0.realPath(l),B),h=l.mount.opts.fs.lstat(p).mode,w=m0.createNode(l,B,h);return w}catch(P){throw P.code?new a.ErrnoError(y0[P.code]):P}},mknod(l,B,p,h){var w=m0.createNode(l,B,p,h),P=m0.realPath(w);try{a.isDir(w.mode)?w.mount.opts.fs.mkdir(P,w.mode):w.mount.opts.fs.writeFile(P,"",{mode:w.mode})}catch(J){throw J.code?new a.ErrnoError(y0[J.code]):J}return w},rename(l,B,p){var h=m0.realPath(l),w=o0.join2(m0.realPath(B),p);try{l.mount.opts.fs.rename(h,w),l.name=p}catch(P){throw P.code?new a.ErrnoError(y0[P.code]):P}},unlink(l,B){var p=o0.join2(m0.realPath(l),B);try{l.mount.opts.fs.unlink(p)}catch(h){throw h.code?new a.ErrnoError(y0[h.code]):h}},rmdir(l,B){var p=o0.join2(m0.realPath(l),B);try{l.mount.opts.fs.rmdir(p)}catch(h){throw h.code?new a.ErrnoError(y0[h.code]):h}},readdir(l){var B=m0.realPath(l);try{return l.mount.opts.fs.readdir(B)}catch(p){throw p.code?new a.ErrnoError(y0[p.code]):p}},symlink(l,B,p){var h=o0.join2(m0.realPath(l),B);try{l.mount.opts.fs.symlink(p,h)}catch(w){throw w.code?new a.ErrnoError(y0[w.code]):w}},readlink(l){var B=m0.realPath(l);try{return l.mount.opts.fs.readlink(B)}catch(p){throw p.code?new a.ErrnoError(y0[p.code]):p}}},stream_ops:{open(l){var B=m0.realPath(l.node);try{l.nfd=l.node.mount.opts.fs.open(B,l.flags)}catch(p){throw p.code?new a.ErrnoError(y0[p.code]):p}},close(l){try{l.node.mount.opts.fs.close(l.nfd)}catch(B){throw B.code?new a.ErrnoError(y0[B.code]):B}},read(l,B,p,h,w){try{return l.node.mount.opts.fs.read(l.nfd,B,p,h,w)}catch(P){throw P.code?new a.ErrnoError(y0[P.code]):P}},write(l,B,p,h,w){try{return l.node.mount.opts.fs.write(l.nfd,B,p,h,w)}catch(P){throw P.code?new a.ErrnoError(y0[P.code]):P}},llseek(l,B,p){var h=B;if(p===1)h+=l.position;else if(p===2&&a.isFile(l.node.mode))try{var w=l.node.node_ops.getattr(l.node);h+=w.size}catch(P){throw new a.ErrnoError(y0[P.code])}if(h<0)throw new a.ErrnoError(y0.EINVAL);return h}}},DA=async l=>{var B=await _(l);return new Uint8Array(B)},Fe=(...l)=>a.createDataFile(...l),kx=l=>l,tx=0,w0=null,ve=l=>{if(tx--,i.monitorRunDependencies?.(tx),tx==0&&w0){var B=w0;w0=null,B()}},$x=l=>{tx++,i.monitorRunDependencies?.(tx)},GA=[],pA=async(l,B)=>{typeof Browser<"u"&&Browser.init();for(var p of GA)if(p.canHandle(B))return p.handle(l,B);return l},FA=async(l,B,p,h,w,P,J,Q)=>{var l0=B?Fx.resolve(o0.join2(l,B)):l,k0=kx(`cp ${l0}`);$x(k0);try{var Z0=p;typeof p=="string"&&(Z0=await DA(p)),Z0=await pA(Z0,l0),Q?.(),P||Fe(l,B,Z0,h,w,J)}finally{ve(k0)}},gr=(l,B,p,h,w,P,J,Q,l0,k0)=>{FA(l,B,p,h,w,Q,l0,k0).then(P).catch(J)},a={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(l){ex(this,"name","ErrnoError"),this.errno=l}},FSStream:class{constructor(){ex(this,"shared",{})}get object(){return this.node}set object(l){this.node=l}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(l){this.shared.flags=l}get position(){return this.shared.position}set position(l){this.shared.position=l}},FSNode:class{constructor(l,B,p,h){ex(this,"node_ops",{}),ex(this,"stream_ops",{}),ex(this,"readMode",365),ex(this,"writeMode",146),ex(this,"mounted",null),l||(l=this),this.parent=l,this.mount=l.mount,this.id=a.nextInode++,this.name=B,this.mode=p,this.rdev=h,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(l){l?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(l){l?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return a.isDir(this.mode)}get isDevice(){return a.isChrdev(this.mode)}},lookupPath(l,B={}){if(!l)throw new a.ErrnoError(44);B.follow_mount??(B.follow_mount=!0),o0.isAbs(l)||(l=a.cwd()+"/"+l);x:for(var p=0;p<40;p++){for(var h=l.split("/").filter(k0=>!!k0),w=a.root,P="/",J=0;J<h.length;J++){var Q=J===h.length-1;if(Q&&B.parent)break;if(h[J]!=="."){if(h[J]===".."){if(P=o0.dirname(P),a.isRoot(w)){l=P+"/"+h.slice(J+1).join("/"),p--;continue x}else w=w.parent;continue}P=o0.join2(P,h[J]);try{w=a.lookupNode(w,h[J])}catch(k0){if(k0?.errno===44&&Q&&B.noent_okay)return{path:P};throw k0}if(a.isMountpoint(w)&&(!Q||B.follow_mount)&&(w=w.mounted.root),a.isLink(w.mode)&&(!Q||B.follow)){if(!w.node_ops.readlink)throw new a.ErrnoError(52);var l0=w.node_ops.readlink(w);o0.isAbs(l0)||(l0=o0.dirname(P)+"/"+l0),l=l0+"/"+h.slice(J+1).join("/");continue x}}}return{path:P,node:w}}throw new a.ErrnoError(32)},getPath(l){for(var B;;){if(a.isRoot(l)){var p=l.mount.mountpoint;return B?p[p.length-1]!=="/"?`${p}/${B}`:p+B:p}B=B?`${l.name}/${B}`:l.name,l=l.parent}},hashName(l,B){for(var p=0,h=0;h<B.length;h++)p=(p<<5)-p+B.charCodeAt(h)|0;return(l+p>>>0)%a.nameTable.length},hashAddNode(l){var B=a.hashName(l.parent.id,l.name);l.name_next=a.nameTable[B],a.nameTable[B]=l},hashRemoveNode(l){var B=a.hashName(l.parent.id,l.name);if(a.nameTable[B]===l)a.nameTable[B]=l.name_next;else for(var p=a.nameTable[B];p;){if(p.name_next===l){p.name_next=l.name_next;break}p=p.name_next}},lookupNode(l,B){var p=a.mayLookup(l);if(p)throw new a.ErrnoError(p);for(var h=a.hashName(l.id,B),w=a.nameTable[h];w;w=w.name_next){var P=w.name;if(w.parent.id===l.id&&P===B)return w}return a.lookup(l,B)},createNode(l,B,p,h){var w=new a.FSNode(l,B,p,h);return a.hashAddNode(w),w},destroyNode(l){a.hashRemoveNode(l)},isRoot(l){return l===l.parent},isMountpoint(l){return!!l.mounted},isFile(l){return(l&61440)===32768},isDir(l){return(l&61440)===16384},isLink(l){return(l&61440)===40960},isChrdev(l){return(l&61440)===8192},isBlkdev(l){return(l&61440)===24576},isFIFO(l){return(l&61440)===4096},isSocket(l){return(l&49152)===49152},flagsToPermissionString(l){var B=["r","w","rw"][l&3];return l&512&&(B+="w"),B},nodePermissions(l,B){return a.ignorePermissions?0:B.includes("r")&&!(l.mode&292)||B.includes("w")&&!(l.mode&146)||B.includes("x")&&!(l.mode&73)?2:0},mayLookup(l){if(!a.isDir(l.mode))return 54;var B=a.nodePermissions(l,"x");return B||(l.node_ops.lookup?0:2)},mayCreate(l,B){if(!a.isDir(l.mode))return 54;try{var p=a.lookupNode(l,B);return 20}catch{}return a.nodePermissions(l,"wx")},mayDelete(l,B,p){var h;try{h=a.lookupNode(l,B)}catch(P){return P.errno}var w=a.nodePermissions(l,"wx");if(w)return w;if(p){if(!a.isDir(h.mode))return 54;if(a.isRoot(h)||a.getPath(h)===a.cwd())return 10}else if(a.isDir(h.mode))return 31;return 0},mayOpen(l,B){if(!l)return 44;if(a.isLink(l.mode))return 32;var p=a.flagsToPermissionString(B);return a.isDir(l.mode)&&(p!=="r"||B&576)?31:a.nodePermissions(l,p)},checkOpExists(l,B){if(!l)throw new a.ErrnoError(B);return l},MAX_OPEN_FDS:4096,nextfd(){for(var l=0;l<=a.MAX_OPEN_FDS;l++)if(!a.streams[l])return l;throw new a.ErrnoError(33)},getStreamChecked(l){var B=a.getStream(l);if(!B)throw new a.ErrnoError(8);return B},getStream:l=>a.streams[l],createStream(l,B=-1){return l=Object.assign(new a.FSStream,l),B==-1&&(B=a.nextfd()),l.fd=B,a.streams[B]=l,l},closeStream(l){a.streams[l]=null},dupStream(l,B=-1){var p=a.createStream(l,B);return p.stream_ops?.dup?.(p),p},doSetAttr(l,B,p){var h=l?.stream_ops.setattr,w=h?l:B;h??(h=B.node_ops.setattr),a.checkOpExists(h,63);try{h(w,p)}catch(P){throw P instanceof RangeError?new a.ErrnoError(22):P}},chrdev_stream_ops:{open(l){var B=a.getDevice(l.node.rdev);l.stream_ops=B.stream_ops,l.stream_ops.open?.(l)},llseek(){throw new a.ErrnoError(70)}},major:l=>l>>8,minor:l=>l&255,makedev:(l,B)=>l<<8|B,registerDevice(l,B){a.devices[l]={stream_ops:B}},getDevice:l=>a.devices[l],getMounts(l){for(var B=[],p=[l];p.length;){var h=p.pop();B.push(h),p.push(...h.mounts)}return B},syncfs(l,B){typeof l=="function"&&(B=l,l=!1),a.syncFSRequests++,a.syncFSRequests>1&&N(`warning: ${a.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var p=a.getMounts(a.root.mount),h=0;function w(Q){return a.syncFSRequests--,B(Q)}function P(Q){if(Q)return P.errored?void 0:(P.errored=!0,w(Q));++h>=p.length&&w(null)}for(var J of p)J.type.syncfs?J.type.syncfs(J,l,P):P(null)},mount(l,B,p){var h=p==="/",w=!p,P;if(h&&a.root)throw new a.ErrnoError(10);if(!h&&!w){var J=a.lookupPath(p,{follow_mount:!1});if(p=J.path,P=J.node,a.isMountpoint(P))throw new a.ErrnoError(10);if(!a.isDir(P.mode))throw new a.ErrnoError(54)}var Q={type:l,opts:B,mountpoint:p,mounts:[]},l0=l.mount(Q);return l0.mount=Q,Q.root=l0,h?a.root=l0:P&&(P.mounted=Q,P.mount&&P.mount.mounts.push(Q)),l0},unmount(l){var B=a.lookupPath(l,{follow_mount:!1});if(!a.isMountpoint(B.node))throw new a.ErrnoError(28);var p=B.node,h=p.mounted,w=a.getMounts(h);for(var[P,J]of Object.entries(a.nameTable))for(;J;){var Q=J.name_next;w.includes(J.mount)&&a.destroyNode(J),J=Q}p.mounted=null;var l0=p.mount.mounts.indexOf(h);p.mount.mounts.splice(l0,1)},lookup(l,B){return l.node_ops.lookup(l,B)},mknod(l,B,p){var h=a.lookupPath(l,{parent:!0}),w=h.node,P=o0.basename(l);if(!P)throw new a.ErrnoError(28);if(P==="."||P==="..")throw new a.ErrnoError(20);var J=a.mayCreate(w,P);if(J)throw new a.ErrnoError(J);if(!w.node_ops.mknod)throw new a.ErrnoError(63);return w.node_ops.mknod(w,P,B,p)},statfs(l){return a.statfsNode(a.lookupPath(l,{follow:!0}).node)},statfsStream(l){return a.statfsNode(l.node)},statfsNode(l){var B={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:a.nextInode,ffree:a.nextInode-1,fsid:42,flags:2,namelen:255};return l.node_ops.statfs&&Object.assign(B,l.node_ops.statfs(l.mount.opts.root)),B},create(l,B=438){return B&=4095,B|=32768,a.mknod(l,B,0)},mkdir(l,B=511){return B&=1023,B|=16384,a.mknod(l,B,0)},mkdirTree(l,B){var p=l.split("/"),h="";for(var w of p)if(w){(h||o0.isAbs(l))&&(h+="/"),h+=w;try{a.mkdir(h,B)}catch(P){if(P.errno!=20)throw P}}},mkdev(l,B,p){return typeof p>"u"&&(p=B,B=438),B|=8192,a.mknod(l,B,p)},symlink(l,B){if(!Fx.resolve(l))throw new a.ErrnoError(44);var p=a.lookupPath(B,{parent:!0}),h=p.node;if(!h)throw new a.ErrnoError(44);var w=o0.basename(B),P=a.mayCreate(h,w);if(P)throw new a.ErrnoError(P);if(!h.node_ops.symlink)throw new a.ErrnoError(63);return h.node_ops.symlink(h,w,l)},rename(l,B){var p=o0.dirname(l),h=o0.dirname(B),w=o0.basename(l),P=o0.basename(B),J,Q,l0;if(J=a.lookupPath(l,{parent:!0}),Q=J.node,J=a.lookupPath(B,{parent:!0}),l0=J.node,!Q||!l0)throw new a.ErrnoError(44);if(Q.mount!==l0.mount)throw new a.ErrnoError(75);var k0=a.lookupNode(Q,w),Z0=Fx.relative(l,h);if(Z0.charAt(0)!==".")throw new a.ErrnoError(28);if(Z0=Fx.relative(B,p),Z0.charAt(0)!==".")throw new a.ErrnoError(55);var J0;try{J0=a.lookupNode(l0,P)}catch{}if(k0!==J0){var O0=a.isDir(k0.mode),q0=a.mayDelete(Q,w,O0);if(q0)throw new a.ErrnoError(q0);if(q0=J0?a.mayDelete(l0,P,O0):a.mayCreate(l0,P),q0)throw new a.ErrnoError(q0);if(!Q.node_ops.rename)throw new a.ErrnoError(63);if(a.isMountpoint(k0)||J0&&a.isMountpoint(J0))throw new a.ErrnoError(10);if(l0!==Q&&(q0=a.nodePermissions(Q,"w"),q0))throw new a.ErrnoError(q0);a.hashRemoveNode(k0);try{Q.node_ops.rename(k0,l0,P),k0.parent=l0}catch(cx){throw cx}finally{a.hashAddNode(k0)}}},rmdir(l){var B=a.lookupPath(l,{parent:!0}),p=B.node,h=o0.basename(l),w=a.lookupNode(p,h),P=a.mayDelete(p,h,!0);if(P)throw new a.ErrnoError(P);if(!p.node_ops.rmdir)throw new a.ErrnoError(63);if(a.isMountpoint(w))throw new a.ErrnoError(10);p.node_ops.rmdir(p,h),a.destroyNode(w)},readdir(l){var B=a.lookupPath(l,{follow:!0}),p=B.node,h=a.checkOpExists(p.node_ops.readdir,54);return h(p)},unlink(l){var B=a.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new a.ErrnoError(44);var h=o0.basename(l),w=a.lookupNode(p,h),P=a.mayDelete(p,h,!1);if(P)throw new a.ErrnoError(P);if(!p.node_ops.unlink)throw new a.ErrnoError(63);if(a.isMountpoint(w))throw new a.ErrnoError(10);p.node_ops.unlink(p,h),a.destroyNode(w)},readlink(l){var B=a.lookupPath(l),p=B.node;if(!p)throw new a.ErrnoError(44);if(!p.node_ops.readlink)throw new a.ErrnoError(28);return p.node_ops.readlink(p)},stat(l,B){var p=a.lookupPath(l,{follow:!B}),h=p.node,w=a.checkOpExists(h.node_ops.getattr,63);return w(h)},fstat(l){var B=a.getStreamChecked(l),p=B.node,h=B.stream_ops.getattr,w=h?B:p;return h??(h=p.node_ops.getattr),a.checkOpExists(h,63),h(w)},lstat(l){return a.stat(l,!0)},doChmod(l,B,p,h){a.doSetAttr(l,B,{mode:p&4095|B.mode&-4096,ctime:Date.now(),dontFollow:h})},chmod(l,B,p){var h;if(typeof l=="string"){var w=a.lookupPath(l,{follow:!p});h=w.node}else h=l;a.doChmod(null,h,B,p)},lchmod(l,B){a.chmod(l,B,!0)},fchmod(l,B){var p=a.getStreamChecked(l);a.doChmod(p,p.node,B,!1)},doChown(l,B,p){a.doSetAttr(l,B,{timestamp:Date.now(),dontFollow:p})},chown(l,B,p,h){var w;if(typeof l=="string"){var P=a.lookupPath(l,{follow:!h});w=P.node}else w=l;a.doChown(null,w,h)},lchown(l,B,p){a.chown(l,B,p,!0)},fchown(l,B,p){var h=a.getStreamChecked(l);a.doChown(h,h.node,!1)},doTruncate(l,B,p){if(a.isDir(B.mode))throw new a.ErrnoError(31);if(!a.isFile(B.mode))throw new a.ErrnoError(28);var h=a.nodePermissions(B,"w");if(h)throw new a.ErrnoError(h);a.doSetAttr(l,B,{size:p,timestamp:Date.now()})},truncate(l,B){if(B<0)throw new a.ErrnoError(28);var p;if(typeof l=="string"){var h=a.lookupPath(l,{follow:!0});p=h.node}else p=l;a.doTruncate(null,p,B)},ftruncate(l,B){var p=a.getStreamChecked(l);if(B<0||(p.flags&2097155)===0)throw new a.ErrnoError(28);a.doTruncate(p,p.node,B)},utime(l,B,p){var h=a.lookupPath(l,{follow:!0}),w=h.node,P=a.checkOpExists(w.node_ops.setattr,63);P(w,{atime:B,mtime:p})},open(l,B,p=438){if(l==="")throw new a.ErrnoError(44);B=yA(B),B&64?p=p&4095|32768:p=0;var h,w;if(typeof l=="object")h=l;else{w=l.endsWith("/");var P=a.lookupPath(l,{follow:!(B&131072),noent_okay:!0});h=P.node,l=P.path}var J=!1;if(B&64)if(h){if(B&128)throw new a.ErrnoError(20)}else{if(w)throw new a.ErrnoError(31);h=a.mknod(l,p|511,0),J=!0}if(!h)throw new a.ErrnoError(44);if(a.isChrdev(h.mode)&&(B&=-513),B&65536&&!a.isDir(h.mode))throw new a.ErrnoError(54);if(!J){var Q=a.mayOpen(h,B);if(Q)throw new a.ErrnoError(Q)}B&512&&!J&&a.truncate(h,0),B&=-131713;var l0=a.createStream({node:h,path:a.getPath(h),flags:B,seekable:!0,position:0,stream_ops:h.stream_ops,ungotten:[],error:!1});return l0.stream_ops.open&&l0.stream_ops.open(l0),J&&a.chmod(h,p&511),l0},close(l){if(a.isClosed(l))throw new a.ErrnoError(8);l.getdents&&(l.getdents=null);try{l.stream_ops.close&&l.stream_ops.close(l)}catch(B){throw B}finally{a.closeStream(l.fd)}l.fd=null},isClosed(l){return l.fd===null},llseek(l,B,p){if(a.isClosed(l))throw new a.ErrnoError(8);if(!l.seekable||!l.stream_ops.llseek)throw new a.ErrnoError(70);if(p!=0&&p!=1&&p!=2)throw new a.ErrnoError(28);return l.position=l.stream_ops.llseek(l,B,p),l.ungotten=[],l.position},read(l,B,p,h,w){if(h<0||w<0)throw new a.ErrnoError(28);if(a.isClosed(l))throw new a.ErrnoError(8);if((l.flags&2097155)===1)throw new a.ErrnoError(8);if(a.isDir(l.node.mode))throw new a.ErrnoError(31);if(!l.stream_ops.read)throw new a.ErrnoError(28);var P=typeof w<"u";if(!P)w=l.position;else if(!l.seekable)throw new a.ErrnoError(70);var J=l.stream_ops.read(l,B,p,h,w);return P||(l.position+=J),J},write(l,B,p,h,w,P){if(h<0||w<0)throw new a.ErrnoError(28);if(a.isClosed(l))throw new a.ErrnoError(8);if((l.flags&2097155)===0)throw new a.ErrnoError(8);if(a.isDir(l.node.mode))throw new a.ErrnoError(31);if(!l.stream_ops.write)throw new a.ErrnoError(28);l.seekable&&l.flags&1024&&a.llseek(l,0,2);var J=typeof w<"u";if(!J)w=l.position;else if(!l.seekable)throw new a.ErrnoError(70);var Q=l.stream_ops.write(l,B,p,h,w,P);return J||(l.position+=Q),Q},mmap(l,B,p,h,w){if((h&2)!==0&&(w&2)===0&&(l.flags&2097155)!==2)throw new a.ErrnoError(2);if((l.flags&2097155)===1)throw new a.ErrnoError(2);if(!l.stream_ops.mmap)throw new a.ErrnoError(43);if(!B)throw new a.ErrnoError(28);return l.stream_ops.mmap(l,B,p,h,w)},msync(l,B,p,h,w){return l.stream_ops.msync?l.stream_ops.msync(l,B,p,h,w):0},ioctl(l,B,p){if(!l.stream_ops.ioctl)throw new a.ErrnoError(59);return l.stream_ops.ioctl(l,B,p)},readFile(l,B={}){B.flags=B.flags||0,B.encoding=B.encoding||"binary",B.encoding!=="utf8"&&B.encoding!=="binary"&&b0(`Invalid encoding type "${B.encoding}"`);var p=a.open(l,B.flags),h=a.stat(l),w=h.size,P=new Uint8Array(w);return a.read(p,P,0,w,0),B.encoding==="utf8"&&(P=Px(P)),a.close(p),P},writeFile(l,B,p={}){p.flags=p.flags||577;var h=a.open(l,p.flags,p.mode);B=xA(B),a.write(h,B,0,B.byteLength,void 0,p.canOwn),a.close(h)},cwd:()=>a.currentPath,chdir(l){var B=a.lookupPath(l,{follow:!0});if(B.node===null)throw new a.ErrnoError(44);if(!a.isDir(B.node.mode))throw new a.ErrnoError(54);var p=a.nodePermissions(B.node,"x");if(p)throw new a.ErrnoError(p);a.currentPath=B.path},createDefaultDirectories(){a.mkdir("/tmp"),a.mkdir("/home"),a.mkdir("/home/web_user")},createDefaultDevices(){a.mkdir("/dev"),a.registerDevice(a.makedev(1,3),{read:()=>0,write:(h,w,P,J,Q)=>J,llseek:()=>0}),a.mkdev("/dev/null",a.makedev(1,3)),V0.register(a.makedev(5,0),V0.default_tty_ops),V0.register(a.makedev(6,0),V0.default_tty1_ops),a.mkdev("/dev/tty",a.makedev(5,0)),a.mkdev("/dev/tty1",a.makedev(6,0));var l=new Uint8Array(1024),B=0,p=()=>(B===0&&(ae(l),B=l.byteLength),l[--B]);a.createDevice("/dev","random",p),a.createDevice("/dev","urandom",p),a.mkdir("/dev/shm"),a.mkdir("/dev/shm/tmp")},createSpecialDirectories(){a.mkdir("/proc");var l=a.mkdir("/proc/self");a.mkdir("/proc/self/fd"),a.mount({mount(){var B=a.createNode(l,"fd",16895,73);return B.stream_ops={llseek:K.stream_ops.llseek},B.node_ops={lookup(p,h){var w=+h,P=a.getStreamChecked(w),J={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>P.path},id:w+1};return J.parent=J,J},readdir(){return Array.from(a.streams.entries()).filter(([p,h])=>h).map(([p,h])=>p.toString())}},B}},{},"/proc/self/fd")},createStandardStreams(l,B,p){l?a.createDevice("/dev","stdin",l):a.symlink("/dev/tty","/dev/stdin"),B?a.createDevice("/dev","stdout",null,B):a.symlink("/dev/tty","/dev/stdout"),p?a.createDevice("/dev","stderr",null,p):a.symlink("/dev/tty1","/dev/stderr");var h=a.open("/dev/stdin",0),w=a.open("/dev/stdout",1),P=a.open("/dev/stderr",1)},staticInit(){a.nameTable=new Array(4096),a.mount(K,{},"/"),a.createDefaultDirectories(),a.createDefaultDevices(),a.createSpecialDirectories(),a.filesystems={MEMFS:K,PROXYFS:m0}},init(l,B,p){a.initialized=!0,l??(l=i.stdin),B??(B=i.stdout),p??(p=i.stderr),a.createStandardStreams(l,B,p)},quit(){a.initialized=!1,JA(0);for(var l of a.streams)l&&a.close(l)},findObject(l,B){var p=a.analyzePath(l,B);return p.exists?p.object:null},analyzePath(l,B){try{var p=a.lookupPath(l,{follow:!B});l=p.path}catch{}var h={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var p=a.lookupPath(l,{parent:!0});h.parentExists=!0,h.parentPath=p.path,h.parentObject=p.node,h.name=o0.basename(l),p=a.lookupPath(l,{follow:!B}),h.exists=!0,h.path=p.path,h.object=p.node,h.name=p.node.name,h.isRoot=p.path==="/"}catch(w){h.error=w.errno}return h},createPath(l,B,p,h){l=typeof l=="string"?l:a.getPath(l);for(var w=B.split("/").reverse();w.length;){var P=w.pop();if(P){var J=o0.join2(l,P);try{a.mkdir(J)}catch(Q){if(Q.errno!=20)throw Q}l=J}}return J},createFile(l,B,p,h,w){var P=o0.join2(typeof l=="string"?l:a.getPath(l),B),J=AA(h,w);return a.create(P,J)},createDataFile(l,B,p,h,w,P){var J=B;l&&(l=typeof l=="string"?l:a.getPath(l),J=B?o0.join2(l,B):l);var Q=AA(h,w),l0=a.create(J,Q);if(p){p=xA(p),a.chmod(l0,Q|146);var k0=a.open(l0,577);a.write(k0,p,0,p.length,0,P),a.close(k0),a.chmod(l0,Q)}},createDevice(l,B,p,h){var w,P=o0.join2(typeof l=="string"?l:a.getPath(l),B),J=AA(!!p,!!h);(w=a.createDevice).major??(w.major=64);var Q=a.makedev(a.createDevice.major++,0);return a.registerDevice(Q,{open(l0){l0.seekable=!1},close(l0){h?.buffer?.length&&h(10)},read(l0,k0,Z0,J0,O0){for(var q0=0,cx=0;cx<J0;cx++){var wx;try{wx=p()}catch{throw new a.ErrnoError(29)}if(wx===void 0&&q0===0)throw new a.ErrnoError(6);if(wx==null)break;q0++,k0[Z0+cx]=wx}return q0&&(l0.node.atime=Date.now()),q0},write(l0,k0,Z0,J0,O0){for(var q0=0;q0<J0;q0++)try{h(k0[Z0+q0])}catch{throw new a.ErrnoError(29)}return J0&&(l0.node.mtime=l0.node.ctime=Date.now()),q0}}),a.mkdev(P,J,Q)},forceLoadFile(l){if(l.isDevice||l.isFolder||l.link||l.contents)return!0;if(globalThis.XMLHttpRequest)b0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{l.contents=$(l.url)}catch{throw new a.ErrnoError(29)}},createLazyFile(l,B,p,h,w){class P{constructor(){ex(this,"lengthKnown",!1),ex(this,"chunks",[])}get(O0){if(!(O0>this.length-1||O0<0)){var q0=O0%this.chunkSize,cx=O0/this.chunkSize|0;return this.getter(cx)[q0]}}setDataGetter(O0){this.getter=O0}cacheLength(){var O0=new XMLHttpRequest;O0.open("HEAD",p,!1),O0.send(null),O0.status>=200&&O0.status<300||O0.status===304||b0("Couldn't load "+p+". Status: "+O0.status);var q0=Number(O0.getResponseHeader("Content-length")),cx,wx=(cx=O0.getResponseHeader("Accept-Ranges"))&&cx==="bytes",Gx=(cx=O0.getResponseHeader("Content-Encoding"))&&cx==="gzip",Wx=1024*1024;wx||(Wx=q0);var Xx=(eA,vA)=>{eA>vA&&b0("invalid range ("+eA+", "+vA+") or no bytes requested!"),vA>q0-1&&b0("only "+q0+" bytes available! programmer error!");var ux=new XMLHttpRequest;return ux.open("GET",p,!1),q0!==Wx&&ux.setRequestHeader("Range","bytes="+eA+"-"+vA),ux.responseType="arraybuffer",ux.overrideMimeType&&ux.overrideMimeType("text/plain; charset=x-user-defined"),ux.send(null),ux.status>=200&&ux.status<300||ux.status===304||b0("Couldn't load "+p+". Status: "+ux.status),ux.response!==void 0?new Uint8Array(ux.response||[]):dA(ux.responseText||"",!0)},WA=this;WA.setDataGetter(eA=>{var vA=eA*Wx,ux=(eA+1)*Wx-1;return ux=Math.min(ux,q0-1),typeof WA.chunks[eA]>"u"&&(WA.chunks[eA]=Xx(vA,ux)),typeof WA.chunks[eA]>"u"&&b0("doXHR failed!"),WA.chunks[eA]}),(Gx||!q0)&&(Wx=q0=1,q0=this.getter(0).length,Wx=q0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=q0,this._chunkSize=Wx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){c||b0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var J=new P,Q={isDevice:!1,contents:J}}else var Q={isDevice:!1,url:p};var l0=a.createFile(l,B,Q,h,w);Q.contents?l0.contents=Q.contents:Q.url&&(l0.contents=null,l0.url=Q.url),Object.defineProperties(l0,{usedBytes:{get:function(){return this.contents.length}}});var k0={};for(let[J0,O0]of Object.entries(l0.stream_ops))k0[J0]=(...q0)=>(a.forceLoadFile(l0),O0(...q0));function Z0(J0,O0,q0,cx,wx){var Gx=J0.node.contents;if(wx>=Gx.length)return 0;var Wx=Math.min(Gx.length-wx,cx);if(Gx.slice)for(var Xx=0;Xx<Wx;Xx++)O0[q0+Xx]=Gx[wx+Xx];else for(var Xx=0;Xx<Wx;Xx++)O0[q0+Xx]=Gx.get(wx+Xx);return Wx}return k0.read=(J0,O0,q0,cx,wx)=>(a.forceLoadFile(l0),Z0(J0,O0,q0,cx,wx)),k0.mmap=(J0,O0,q0,cx,wx)=>{a.forceLoadFile(l0);var Gx=uA(O0);if(!Gx)throw new a.ErrnoError(48);return Z0(J0,N0,Gx,O0,q0),{ptr:Gx,allocated:!0}},l0.stream_ops=k0,l0}},h0={currentUmask:18,calculateAt(l,B,p){if(o0.isAbs(B))return B;var h;if(l===-100)h=a.cwd();else{var w=h0.getStreamFromFD(l);h=w.path}if(B.length==0){if(!p)throw new a.ErrnoError(44);return h}return h+"/"+B},writeStat(l,B){C0[l>>2]=B.dev,C0[l+4>>2]=B.mode,C0[l+8>>2]=B.nlink,C0[l+12>>2]=B.uid,C0[l+16>>2]=B.gid,C0[l+20>>2]=B.rdev,Q0[l+24>>3]=BigInt(B.size),K0[l+32>>2]=4096,K0[l+36>>2]=B.blocks;var p=B.atime.getTime(),h=B.mtime.getTime(),w=B.ctime.getTime();return Q0[l+40>>3]=BigInt(Math.floor(p/1e3)),C0[l+48>>2]=p%1e3*1e3*1e3,Q0[l+56>>3]=BigInt(Math.floor(h/1e3)),C0[l+64>>2]=h%1e3*1e3*1e3,Q0[l+72>>3]=BigInt(Math.floor(w/1e3)),C0[l+80>>2]=w%1e3*1e3*1e3,Q0[l+88>>3]=BigInt(B.ino),0},writeStatFs(l,B){C0[l+4>>2]=B.bsize,C0[l+60>>2]=B.bsize,Q0[l+8>>3]=BigInt(B.blocks),Q0[l+16>>3]=BigInt(B.bfree),Q0[l+24>>3]=BigInt(B.bavail),Q0[l+32>>3]=BigInt(B.files),Q0[l+40>>3]=BigInt(B.ffree),C0[l+48>>2]=B.fsid,C0[l+64>>2]=B.flags,C0[l+56>>2]=B.namelen},doMsync(l,B,p,h,w){if(!a.isFile(B.node.mode))throw new a.ErrnoError(43);if(h&2)return 0;var P=sA.slice(l,l+p);a.msync(B,P,w,p,h)},getStreamFromFD(l){var B=a.getStreamChecked(l);return B},varargs:void 0,getStr(l){var B=lx(l);return B}};function we(l,B,p){h0.varargs=p;try{var h=h0.getStreamFromFD(l);switch(B){case 0:{var w=zx();if(w<0)return-28;for(;a.streams[w];)w++;var P;return P=a.dupStream(h,w),P.fd}case 1:case 2:return 0;case 3:return h.flags;case 4:{var w=zx(),J=289792;return h.flags=h.flags&~J|w&J,0}case 12:{var w=Vx(),Q=0;return W0[w+Q>>1]=2,0}case 13:case 14:return 0}return-28}catch(l0){if(typeof a>"u"||l0.name!=="ErrnoError")throw l0;return-l0.errno}}function _A(l,B,p){h0.varargs=p;try{var h=h0.getStreamFromFD(l);switch(B){case 21509:return h.tty?0:-59;case 21505:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcgets){var w=h.tty.ops.ioctl_tcgets(h),P=Vx();K0[P>>2]=w.c_iflag||0,K0[P+4>>2]=w.c_oflag||0,K0[P+8>>2]=w.c_cflag||0,K0[P+12>>2]=w.c_lflag||0;for(var J=0;J<32;J++)N0[P+J+17]=w.c_cc[J]||0;return 0}return 0}case 21510:case 21511:case 21512:return h.tty?0:-59;case 21506:case 21507:case 21508:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tcsets){for(var P=Vx(),Q=K0[P>>2],l0=K0[P+4>>2],k0=K0[P+8>>2],Z0=K0[P+12>>2],J0=[],J=0;J<32;J++)J0.push(N0[P+J+17]);return h.tty.ops.ioctl_tcsets(h.tty,B,{c_iflag:Q,c_oflag:l0,c_cflag:k0,c_lflag:Z0,c_cc:J0})}return 0}case 21519:{if(!h.tty)return-59;var P=Vx();return K0[P>>2]=0,0}case 21520:return h.tty?-28:-59;case 21537:case 21531:{var P=Vx();return a.ioctl(h,B,P)}case 21523:{if(!h.tty)return-59;if(h.tty.ops.ioctl_tiocgwinsz){var O0=h.tty.ops.ioctl_tiocgwinsz(h.tty),P=Vx();W0[P>>1]=O0[0],W0[P+2>>1]=O0[1]}return 0}case 21524:return h.tty?0:-59;case 21515:return h.tty?0:-59;default:return-28}}catch(q0){if(typeof a>"u"||q0.name!=="ErrnoError")throw q0;return-q0.errno}}function bA(l,B,p,h){h0.varargs=h;try{B=h0.getStr(B),B=h0.calculateAt(l,B);var w=h?zx():0;return p&64&&(w&=~h0.currentUmask),a.open(B,p,w).fd}catch(P){if(typeof a>"u"||P.name!=="ErrnoError")throw P;return-P.errno}}var kr=()=>2147483648,fe=(l,B)=>Math.ceil(l/B)*B,Qe=l=>{var B=wA.buffer.byteLength,p=(l-B+65535)/65536|0;try{return wA.grow(p),x0(),1}catch{}},Ze=l=>{var B=sA.length;l>>>=0;var p=kr();if(l>p)return!1;for(var h=1;h<=4;h*=2){var w=B*(1+.2/h);w=Math.min(w,l+100663296);var P=Math.min(p,fe(Math.max(l,w),65536)),J=Qe(P);if(J)return!0}return!1};function yr(l){try{var B=h0.getStreamFromFD(l);return a.close(B),0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}var _r=(l,B,p,h)=>{for(var w=0,P=0;P<p;P++){var J=C0[B>>2],Q=C0[B+4>>2];B+=8;var l0=a.read(l,N0,J,Q,h);if(l0<0)return-1;if(w+=l0,l0<Q)break;typeof h<"u"&&(h+=l0)}return w};function wr(l,B,p,h){try{var w=h0.getStreamFromFD(l),P=_r(w,B,p);return C0[h>>2]=P,0}catch(J){if(typeof a>"u"||J.name!=="ErrnoError")throw J;return J.errno}}var le=9007199254740992,xr=-9007199254740992,UA=l=>l<xr||l>le?NaN:Number(l);function ce(l,B,p,h){B=UA(B);try{if(isNaN(B))return 22;var w=h0.getStreamFromFD(l);return a.llseek(w,B,p),Q0[h>>3]=BigInt(w.position),w.getdents&&B===0&&p===0&&(w.getdents=null),0}catch(P){if(typeof a>"u"||P.name!=="ErrnoError")throw P;return P.errno}}var Sr=(l,B,p,h)=>{for(var w=0,P=0;P<p;P++){var J=C0[B>>2],Q=C0[B+4>>2];B+=8;var l0=a.write(l,N0,J,Q,h);if(l0<0)return-1;if(w+=l0,l0<Q)break;typeof h<"u"&&(h+=l0)}return w};function Ar(l,B,p,h){try{var w=h0.getStreamFromFD(l),P=Sr(w,B,p);return C0[h>>2]=P,0}catch(J){if(typeof a>"u"||J.name!=="ErrnoError")throw J;return J.errno}}var er=0,HA=()=>se||er>0,Ee=l=>{L=l,HA()||(i.onExit?.(l),F0=!0),g(l,new ox(l))},Se=(l,B)=>{L=l,HA()||c0(),Ee(l)},rr=l=>{if(l instanceof ox||l=="unwind")return L;g(1,l)},tr=(l,B,p)=>oe(l,sA,B,p),nr=l=>KA(l),qr=l=>{var B=CA(l)+1,p=nr(B);return tr(l,p,B),p},Tr=(...l)=>a.createPath(...l),Be=(...l)=>a.unlink(...l),Pr=(...l)=>a.createLazyFile(...l),$r=(...l)=>a.createDevice(...l);if(a.createPreloadedFile=gr,a.preloadFile=FA,a.staticInit(),i.noExitRuntime&&(se=i.noExitRuntime),i.preloadPlugins&&(GA=i.preloadPlugins),i.print&&(M=i.print),i.printErr&&(N=i.printErr),i.wasmBinary&&(z=i.wasmBinary),i.arguments&&(b=i.arguments),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();i.callMain=yx,i.addRunDependency=$x,i.removeRunDependency=ve,i.FS_preloadFile=FA,i.FS_unlink=Be,i.FS_createPath=Tr,i.FS_createDevice=$r,i.FS=a,i.FS_createDataFile=Fe,i.FS_createLazyFile=Pr,i.PROXYFS=m0;var ir,sr,JA,ar,KA,qe,Ox,Nr,wA;function zA(l){ir=i._main=l.__main_argc_argv,sr=l.__funcs_on_exit,JA=l.fflush,ar=l._emscripten_stack_restore,KA=l._emscripten_stack_alloc,qe=l.emscripten_stack_get_current,Ox=wA=l.memory,Nr=l.__indirect_function_table}var Te={__assert_fail:BA,__syscall_fcntl64:we,__syscall_ioctl:_A,__syscall_openat:bA,emscripten_resize_heap:Ze,fd_close:yr,fd_read:wr,fd_seek:ce,fd_write:Ar};function yx(l=[]){var B=ir;l.unshift(m);var p=l.length,h=nr((p+1)*4),w=h;for(var P of l)C0[w>>2]=qr(P),w+=4;C0[w>>2]=0;try{var J=B(p,h);return Se(J,!0),J}catch(Q){return rr(Q)}}function Ce(l=b){if(tx>0){w0=Ce;return}if(f0(),tx>0){w0=Ce;return}function B(){if(i.calledRun=!0,!F0){U(),H?.(i),i.onRuntimeInitialized?.();var p=i.noInitialRun||!0;p||yx(l),p0()}}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),B()},1)):B()}var VA;return VA=await G0(),Ce(),n0?s=i:s=new Promise((l,B)=>{H=l,W=B}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),RB=ts({"wasm/bin/pawnrun.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,i=t,v=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=[],m="./this.program",g=(F,n)=>{throw n};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var q="",_,$;if(u){var T=require("fs");q=__dirname+"/",$=F=>{F=L(F)?new URL(F):F;var n=T.readFileSync(F);return n},_=async(F,n=!0)=>{F=L(F)?new URL(F):F;var o=T.readFileSync(F,n?void 0:"utf8");return o},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),g=(F,n)=>{throw process.exitCode=F,n}}else if(v||c){try{q=new URL(".",r).href}catch{}c&&($=F=>{var n=new XMLHttpRequest;return n.open("GET",F,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),_=async F=>{if(L(F))return new Promise((o,f)=>{var E=new XMLHttpRequest;E.open("GET",F,!0),E.responseType="arraybuffer",E.onload=()=>{if(E.status==200||E.status==0&&E.response){o(E.response);return}f(E.status)},E.onerror=f,E.send(null)});var n=await fetch(F,{credentials:"same-origin"});if(n.ok)return n.arrayBuffer();throw new Error(n.status+" : "+n.url)}}var M=console.log.bind(console),N=console.error.bind(console),z,F0=!1,L=F=>F.startsWith("file://");class k{}class O extends k{}function V(F){for(var n=0,o=F.length,f=new Uint8Array(o),E;n<o;++n)E=F.charCodeAt(n),f[n]=~E>>8&E;return f}var Y,H,W=!1;function n0(){var F=Pe.buffer;ox=new Int8Array(F),Kx=new Int16Array(F),i.HEAPU8=OA=new Uint8Array(F),Q0=new Uint16Array(F),i.HEAP32=H0=new Int32Array(F),i.HEAPU32=N0=new Uint32Array(F),W0=new Float32Array(F),K0=new Float64Array(F),G0=new BigInt64Array(F),br=new BigUint64Array(F)}function r0(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)gA(i.preRun.shift());We(sA)}function x0(){W=!0,!i.noFSInit&&!a.initialized&&a.init(),V0.init(),XA.__wasm_call_ctors(),a.ignorePermissions=!1}function f0(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)mr(i.postRun.shift());We(C0)}function U(F){i.onAbort?.(F),F=`Aborted(${F})`,N(F),F0=!0,F+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(F);throw H?.(n),n}var v0;function c0(){return V(`\0asm\0\0\0\xD7#\`\x7F\x7F\x7F\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\`\0\x7F\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\x7F\0\`}}\`\x7F~~~~\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F~~\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\x7F\0\`|}\`\x7F}\`|\x7F|\`\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\0|\`|\0\`}\x7F\x7F\`}}}\`\x7F}}\`}\x7F\`}\x7F}\`\x7F~~~\0\`\x7F~\`|\x7F}\`~\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xBE\fenvpr_js_has_dispatch\0envpr_js_dispatch\0env\r__assert_fail\0env\fpr_debug_out\0\0env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xD9\xD7\r\x07\0\0\0\v\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x07\x07\v\r\0\b\b\b\b\b\x07
1528
1528
  \x07\0\b\0\0\0\0\0\x1B\f \v\x07\x07\0 \f ! "\f p]]\x07\x82\x80\x80\b\x7FA\xC0\xD2\v\x07\x9F'memory\0__wasm_call_ctors\0\f\rpr_set_limits\0\r\rpr_set_budget\0\bpr_close\0free\0\xD2pr_reset_run_state\0\x8F\x07pr_open\0pr_num_natives\0pr_native_name\0pr_register_all\0__indirect_function_table\0pr_num_publics\0pr_public_name\0pr_find_public\0\x07pr_exec\0\rpr_last_error\0\vpr_last_cip\0\x1B\vpr_last_frm\0pr_get_budget_used\0pr_raise_error\0pr_verify_addr\0\x07pr_addr\0 \fpr_data_size\0!\rpr_heap_alloc\0"\fpr_read_cell\0#\rpr_write_cell\0$\rpr_read_cells\0%pr_write_cells\0&pr_read_packed\0'pr_write_packed\0(pr_read_cstring\0)malloc\0\xD1pr_get_virtual_us\0\x90pr_set_virtual_us\0\x91pr_set_rand_seed\0\x92_emscripten_stack_restore\0\xE0_emscripten_stack_alloc\0\xE1emscripten_stack_get_current\0\xE2 o\0A\v\\*3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~\x7F\x80\x81\x82\x83\x84\x85\xA4\xA5\xA6\xA7\xCC\xCD\xCE\f
1529
1529
  \x9A\xE3\xD7\0\v\0A\xD4\xC9\0 6\0A\xD0\xC9\0 \x006\0A\xD0\xCC\0 6\0\v\v\0A\xD8\xC9\0 \x006\0\v]\0A\xD4\xCC\0-\0\0@A\xD0\xCD\0(\0\xD2A\xD4\xCC\0A\0:\0\0A\xD0\xCD\0A\x006\0A\xD4\xCD\0A\x006\0A\xD8\xCD\0A\x006\0A\xDC\xCD\0A\x006\0A\xE0\xCD\0A\x006\0A\xD8\xCC\0A\0A\xF8\0\xFC\v\0\x8F\vA\0\v\xBC\b\x7F~#\0A@j"$\0Aw!@A\xD4\xCC\0-\0\0\r\0A\x7F!#\0Ak"$\0@@A\xBFA\xBC,\0\0\xB5E@A\x88\xCEA6\0\f\vA!A\xBCA+\xB5E@A\xBC-\0\0A\xF2\0G!\v A\x80r A\xBCA\xF8\0\xB5\x1B"A\x80\x80 r A\xBCA\xE5\0\xB5\x1B" A\xC0\0rA\xBC-\0\0"A\xF2\0F\x1B"A\x80r  A\xF7\0F\x1B"A\x80\br  A\xE1\0F\x1B! B\xB67\0A\x9C\x7F \0 A\x80\x80r "\0A\x81\`O@A\x88\xCEA\0 \0k6\0A\x7F!\0\v \0A\0H\r \0!#\0A k"\x07$\0\x7F@@A\xBFA\xBC,\0\0\xB5E@A\x88\xCEA6\0\f\vA\x98 \xD1"\r\vA\0\f\v A\0A\x90\xA3A\xBCA+\xB5E@ A\bAA\xBC-\0\0A\xF2\0F\x1B6\0\v@A\xBC-\0\0A\xE1\0G@ (\0!\f\v AA\0"A\x80\bqE@ \x07 A\x80\br\xAC7 A \x07Aj\v  (\0A\x80r"6\0\v A\x7F6P A\x80\b60  6<  A\x98j6,@ A\bq\r\0 \x07 \x07Aj\xAD7\0 A\x93\xA8 \x07\r\0 A
1530
1530
  6P\v A\xD6\x006( A\xD7\x006$ A\xD8\x006 A\xD9\x006\fA\x8D\xCE-\0\0E@ A\x7F6L\v A\xC8\xCE(\0"68 @  64\vA\xC8\xCE 6\0 \v! \x07A j$\0 "\r \0 \vA\0!\v Aj$\0 "\0E\r\0 \0A\xAC@ \0\xA1\f\v\x7F \0((!@ \0B\0 \0-\0\0A\x80q\x7FAA \0( \0(F\x1BA\v 
@@ -1958,8 +1958,8 @@ OW\xC6\xBF\xA0\x8E\v{"^\xF2?\0\x81\x9C\xC7+\xAA\xC1\xBF?4JJ\xBB\xF1?^\x8C\xCEv
1958
1958
  \0\0\0d\0\0\0\xE8\0\0'\0\0\xA0\x86\0@B\0\x80\x96\x98\0\0\xE1\xF5\0\0\x005\0\0\0q\0\0\0k\xFF\xFF\xFF\xCE\xFB\xFF\xFF\x92\xBF\xFF\xFF\0\0\0\0\0\0\0\0\0\v\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\v\0\0\0\0\0\0\0\0\0
1959
1959
 
1960
1960
  
1961
- \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\xC1\xC6\0\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xFB\xC6\0\v\f\0A\x87\xC7\0\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\xB5\xC7\0\v\0A\xC1\xC7\0\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xEF\xC7\0\v\0A\xFB\xC7\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\xB2\xC8\0\v\0\0\0\0\0\0\0\0\0 \0A\xE3\xC8\0\v\0A\xEF\xC8\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\x9D\xC9\0\v\0A\xA9\xC9\0\v'\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\0A\xD2\xC9\0\v\0\0\0\0p\x99\0\x91\xF4E%,g\0\0@i`)}function p0(F){return F}async function b0(F){return F}async function I0(F,n){try{var o=await b0(F),v=await WebAssembly.instantiate(o,n);return v}catch(E){N(`failed to asynchronously prepare wasm: ${E}`),U(E)}}async function L0(F,n,o){return I0(n,o)}function dx(){var F={env:tt,wasi_snapshot_preview1:tt};return F}async function iA(){function F(d,j){return XA=d.exports,qt(XA),n0(),XA}function n(d){return F(d.instance)}var o=dx();if(i.instantiateWasm)return new Promise((d,j)=>{i.instantiateWasm(o,(S,I)=>{d(F(S,I))})});v0??(v0=c0());var v=await L0(z,v0,o),E=n(v);return E}class LA{constructor(n){ex(this,"name","ExitStatus"),this.message=`Program terminated with exit(${n})`,this.status=n}}var Kx,H0,G0,ox,W0,K0,Q0,$0,br,OA,We=F=>{for(;F.length>0;)F.shift()(i)},C0=[],mr=F=>C0.push(F),sA=[],hA=F=>sA.push(F);function gA(F,n="i8"){switch(n.endsWith("*")&&(n="*"),n){case"i1":return ox[F];case"i8":return ox[F];case"i16":return Kx[F>>1];case"i32":return H0[F>>2];case"i64":return G0[F>>3];case"float":return W0[F>>2];case"double":return K0[F>>3];case"*":return $0[F>>2];default:U(`invalid type for getValue: ${n}`)}}var Xe=!0;function aA(F,n,o="i8"){switch(o.endsWith("*")&&(o="*"),o){case"i1":ox[F]=n;break;case"i8":ox[F]=n;break;case"i16":Kx[F>>1]=n;break;case"i32":H0[F>>2]=n;break;case"i64":G0[F>>3]=BigInt(n);break;case"float":W0[F>>2]=n;break;case"double":K0[F>>3]=n;break;case"*":$0[F>>2]=n;break;default:U(`invalid type for setValue: ${o}`)}}var Ye=F=>vA(F),ne=()=>Ir(),fx=globalThis.TextDecoder&&new TextDecoder,P0=(F,n,o,v)=>{var E=n+o;if(v)return E;for(;F[n]&&!(n>=E);)++n;return n},Px=(F,n=0,o,v)=>{var E=P0(F,n,o,v);if(E-n>16&&F.buffer&&fx)return fx.decode(F.subarray(n,E));for(var d="";n<E;){var j=F[n++];if(!(j&128)){d+=String.fromCharCode(j);continue}var S=F[n++]&63;if((j&224)==192){d+=String.fromCharCode((j&31)<<6|S);continue}var I=F[n++]&63;if((j&240)==224?j=(j&15)<<12|S<<6|I:j=(j&7)<<18|S<<12|I<<6|F[n++]&63,j<65536)d+=String.fromCharCode(j);else{var Z=j-65536;d+=String.fromCharCode(55296|Z>>10,56320|Z&1023)}}return d},lx=(F,n,o)=>F?Px(OA,F,n,o):"",BA=(F,n,o,v)=>U(`Assertion failed: ${lx(F)}, at: `+[n?lx(n):"unknown filename",o,v?lx(v):"unknown function"]),zx=()=>{var F=H0[+h0.varargs>>2];return h0.varargs+=4,F},Vx=zx,o0={isAbs:F=>F.charAt(0)==="/",splitPath:F=>{var n=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return n.exec(F).slice(1)},normalizeArray:(F,n)=>{for(var o=0,v=F.length-1;v>=0;v--){var E=F[v];E==="."?F.splice(v,1):E===".."?(F.splice(v,1),o++):o&&(F.splice(v,1),o--)}if(n)for(;o;o--)F.unshift("..");return F},normalize:F=>{var n=o0.isAbs(F),o=F.slice(-1)==="/";return F=o0.normalizeArray(F.split("/").filter(v=>!!v),!n).join("/"),!F&&!n&&(F="."),F&&o&&(F+="/"),(n?"/":"")+F},dirname:F=>{var n=o0.splitPath(F),o=n[0],v=n[1];return!o&&!v?".":(v&&(v=v.slice(0,-1)),o+v)},basename:F=>F&&F.match(/([^\/]+|\/)\/*$/)[1],join:(...F)=>o0.normalize(F.join("/")),join2:(F,n)=>o0.normalize(F+"/"+n)},jr=()=>{if(u){var F=require("crypto");return n=>F.randomFillSync(n)}return n=>(crypto.getRandomValues(n),0)},ie=F=>(ie=jr())(F),Fx={resolve:(...F)=>{for(var n="",o=!1,v=F.length-1;v>=-1&&!o;v--){var E=v>=0?F[v]:s.cwd();if(typeof E!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!E)return"";n=E+"/"+n,o=o0.isAbs(E)}return n=o0.normalizeArray(n.split("/").filter(d=>!!d),!o).join("/"),(o?"/":"")+n||"."},relative:(F,n)=>{F=Fx.resolve(F).slice(1),n=Fx.resolve(n).slice(1);function o(Z){for(var d0=0;d0<Z.length&&Z[d0]==="";d0++);for(var g0=Z.length-1;g0>=0&&Z[g0]==="";g0--);return d0>g0?[]:Z.slice(d0,g0-d0+1)}for(var v=o(F.split("/")),E=o(n.split("/")),d=Math.min(v.length,E.length),j=d,S=0;S<d;S++)if(v[S]!==E[S]){j=S;break}for(var I=[],S=j;S<v.length;S++)I.push("..");return I=I.concat(E.slice(j)),I.join("/")}},Lx=[],CA=F=>{for(var n=0,o=0;o<F.length;++o){var v=F.charCodeAt(o);v<=127?n++:v<=2047?n+=2:v>=55296&&v<=57343?(n+=4,++o):n+=3}return n},se=(F,n,o,v)=>{if(!(v>0))return 0;for(var E=o,d=o+v-1,j=0;j<F.length;++j){var S=F.codePointAt(j);if(S<=127){if(o>=d)break;n[o++]=S}else if(S<=2047){if(o+1>=d)break;n[o++]=192|S>>6,n[o++]=128|S&63}else if(S<=65535){if(o+2>=d)break;n[o++]=224|S>>12,n[o++]=128|S>>6&63,n[o++]=128|S&63}else{if(o+3>=d)break;n[o++]=240|S>>18,n[o++]=128|S>>12&63,n[o++]=128|S>>6&63,n[o++]=128|S&63,j++}}return n[o]=0,o-E},dA=(F,n,o)=>{var v=o>0?o:CA(F)+1,E=new Array(v),d=se(F,E,0,E.length);return n&&(E.length=d),E},hr=()=>{if(!Lx.length){var F=null;if(u){var n=256,o=Buffer.alloc(n),v=0,E=process.stdin.fd;try{v=T.readSync(E,o,0,n)}catch(d){if(d.toString().includes("EOF"))v=0;else throw d}v>0&&(F=o.slice(0,v).toString("utf-8"))}else globalThis.window?.prompt&&(F=window.prompt("Input: "),F!==null&&(F+=`
1962
- `));if(!F)return null;Lx=dA(F,!0)}return Lx.shift()},V0={ttys:[],init(){},shutdown(){},register(F,n){V0.ttys[F]={input:[],output:[],ops:n},s.registerDevice(F,V0.stream_ops)},stream_ops:{open(F){var n=V0.ttys[F.node.rdev];if(!n)throw new s.ErrnoError(43);F.tty=n,F.seekable=!1},close(F){F.tty.ops.fsync(F.tty)},fsync(F){F.tty.ops.fsync(F.tty)},read(F,n,o,v,E){if(!F.tty||!F.tty.ops.get_char)throw new s.ErrnoError(60);for(var d=0,j=0;j<v;j++){var S;try{S=F.tty.ops.get_char(F.tty)}catch{throw new s.ErrnoError(29)}if(S===void 0&&d===0)throw new s.ErrnoError(6);if(S==null)break;d++,n[o+j]=S}return d&&(F.node.atime=Date.now()),d},write(F,n,o,v,E){if(!F.tty||!F.tty.ops.put_char)throw new s.ErrnoError(60);try{for(var d=0;d<v;d++)F.tty.ops.put_char(F.tty,n[o+d])}catch{throw new s.ErrnoError(29)}return v&&(F.node.mtime=F.node.ctime=Date.now()),d}},default_tty_ops:{get_char(F){return hr()},put_char(F,n){n===null||n===10?(M(Px(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(M(Px(F.output)),F.output=[])},ioctl_tcgets(F){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(F,n,o){return 0},ioctl_tiocgwinsz(F){return[24,80]}},default_tty1_ops:{put_char(F,n){n===null||n===10?(N(Px(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(N(Px(F.output)),F.output=[])}}},uA=F=>{U()},K={ops_table:null,mount(F){return K.createNode(null,"/",16895,0)},createNode(F,n,o,v){if(s.isBlkdev(o)||s.isFIFO(o))throw new s.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:s.chrdev_stream_ops}});var E=s.createNode(F,n,o,v);return s.isDir(E.mode)?(E.node_ops=K.ops_table.dir.node,E.stream_ops=K.ops_table.dir.stream,E.contents={}):s.isFile(E.mode)?(E.node_ops=K.ops_table.file.node,E.stream_ops=K.ops_table.file.stream,E.usedBytes=0,E.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):s.isLink(E.mode)?(E.node_ops=K.ops_table.link.node,E.stream_ops=K.ops_table.link.stream):s.isChrdev(E.mode)&&(E.node_ops=K.ops_table.chrdev.node,E.stream_ops=K.ops_table.chrdev.stream),E.atime=E.mtime=E.ctime=Date.now(),F&&(F.contents[n]=E,F.atime=F.mtime=F.ctime=E.atime),E},getFileDataAsTypedArray(F){return F.contents.subarray(0,F.usedBytes)},expandFileStorage(F,n){var o=F.contents.length;if(!(o>=n)){var v=1024*1024;n=Math.max(n,o*(o<v?2:1.125)>>>0),o&&(n=Math.max(n,256));var E=K.getFileDataAsTypedArray(F);F.contents=new Uint8Array(n),F.contents.set(E)}},resizeFileStorage(F,n){if(F.usedBytes!=n){var o=F.contents;F.contents=new Uint8Array(n),F.contents.set(o.subarray(0,Math.min(n,F.usedBytes))),F.usedBytes=n}},node_ops:{getattr(F){var n={};return n.dev=s.isChrdev(F.mode)?F.id:1,n.ino=F.id,n.mode=F.mode,n.nlink=1,n.uid=0,n.gid=0,n.rdev=F.rdev,s.isDir(F.mode)?n.size=4096:s.isFile(F.mode)?n.size=F.usedBytes:s.isLink(F.mode)?n.size=F.link.length:n.size=0,n.atime=new Date(F.atime),n.mtime=new Date(F.mtime),n.ctime=new Date(F.ctime),n.blksize=4096,n.blocks=Math.ceil(n.size/n.blksize),n},setattr(F,n){for(let o of["mode","atime","mtime","ctime"])n[o]!=null&&(F[o]=n[o]);n.size!==void 0&&K.resizeFileStorage(F,n.size)},lookup(F,n){throw K.doesNotExistError||(K.doesNotExistError=new s.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(F,n,o,v){return K.createNode(F,n,o,v)},rename(F,n,o){var v;try{v=s.lookupNode(n,o)}catch{}if(v){if(s.isDir(F.mode))for(var E in v.contents)throw new s.ErrnoError(55);s.hashRemoveNode(v)}delete F.parent.contents[F.name],n.contents[o]=F,F.name=o,n.ctime=n.mtime=F.parent.ctime=F.parent.mtime=Date.now()},unlink(F,n){delete F.contents[n],F.ctime=F.mtime=Date.now()},rmdir(F,n){var o=s.lookupNode(F,n);for(var v in o.contents)throw new s.ErrnoError(55);delete F.contents[n],F.ctime=F.mtime=Date.now()},readdir(F){return[".","..",...Object.keys(F.contents)]},symlink(F,n,o){var v=K.createNode(F,n,41471,0);return v.link=o,v},readlink(F){if(!s.isLink(F.mode))throw new s.ErrnoError(28);return F.link}},stream_ops:{read(F,n,o,v,E){var d=F.node.contents;if(E>=F.node.usedBytes)return 0;var j=Math.min(F.node.usedBytes-E,v);return n.set(d.subarray(E,E+j),o),j},write(F,n,o,v,E,d){if(n.buffer===ox.buffer&&(d=!1),!v)return 0;var j=F.node;return j.mtime=j.ctime=Date.now(),d?(j.contents=n.subarray(o,o+v),j.usedBytes=v):j.usedBytes===0&&E===0?(j.contents=n.slice(o,o+v),j.usedBytes=v):(K.expandFileStorage(j,E+v),j.contents.set(n.subarray(o,o+v),E),j.usedBytes=Math.max(j.usedBytes,E+v)),v},llseek(F,n,o){var v=n;if(o===1?v+=F.position:o===2&&s.isFile(F.node.mode)&&(v+=F.node.usedBytes),v<0)throw new s.ErrnoError(28);return v},mmap(F,n,o,v,E){if(!s.isFile(F.node.mode))throw new s.ErrnoError(43);var d,j,S=F.node.contents;if(!(E&2)&&S.buffer===ox.buffer)j=!1,d=S.byteOffset;else{if(j=!0,d=uA(n),!d)throw new s.ErrnoError(48);S&&((o>0||o+n<S.length)&&(S.subarray?S=S.subarray(o,o+n):S=Array.prototype.slice.call(S,o,o+n)),ox.set(S,d))}return{ptr:d,allocated:j}},msync(F,n,o,v,E){return K.stream_ops.write(F,n,0,v,o,!1),0}}},kA=F=>{if(typeof F!="string")return F;var n={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},o=n[F];if(typeof o>"u")throw new Error(`Unknown file open mode: ${F}`);return o},xA=F=>(typeof F=="string"&&(F=dA(F,!0)),F.subarray||(F=new Uint8Array(F)),F),AA=(F,n)=>{var o=0;return F&&(o|=365),n&&(o|=146),o},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},m0={mount(F){return m0.createNode(null,"/",F.opts.fs.lstat(F.opts.root).mode,0)},createNode(F,n,o,v){if(!s.isDir(o)&&!s.isFile(o)&&!s.isLink(o))throw new s.ErrnoError(y0.EINVAL);var E=s.createNode(F,n,o);return E.node_ops=m0.node_ops,E.stream_ops=m0.stream_ops,E},realPath(F){for(var n=[];F.parent!==F;)n.push(F.name),F=F.parent;return n.push(F.mount.opts.root),n.reverse(),o0.join(...n)},node_ops:{getattr(F){var n=m0.realPath(F),o;try{o=F.mount.opts.fs.lstat(n)}catch(v){throw v.code?new s.ErrnoError(y0[v.code]):v}return{dev:o.dev,ino:o.ino,mode:o.mode,nlink:o.nlink,uid:o.uid,gid:o.gid,rdev:o.rdev,size:o.size,atime:o.atime,mtime:o.mtime,ctime:o.ctime,blksize:o.blksize,blocks:o.blocks}},setattr(F,n){var o=m0.realPath(F);try{if(n.mode!==void 0&&(F.mount.opts.fs.chmod(o,n.mode),F.mode=n.mode),n.atime||n.mtime){var v=new Date(n.atime||n.mtime),E=new Date(n.mtime||n.atime);F.mount.opts.fs.utime(o,v,E)}n.size!==void 0&&F.mount.opts.fs.truncate(o,n.size)}catch(d){throw d.code?new s.ErrnoError(y0[d.code]):d}},lookup(F,n){try{var o=o0.join2(m0.realPath(F),n),v=F.mount.opts.fs.lstat(o).mode,E=m0.createNode(F,n,v);return E}catch(d){throw d.code?new s.ErrnoError(y0[d.code]):d}},mknod(F,n,o,v){var E=m0.createNode(F,n,o,v),d=m0.realPath(E);try{s.isDir(E.mode)?E.mount.opts.fs.mkdir(d,E.mode):E.mount.opts.fs.writeFile(d,"",{mode:E.mode})}catch(j){throw j.code?new s.ErrnoError(y0[j.code]):j}return E},rename(F,n,o){var v=m0.realPath(F),E=o0.join2(m0.realPath(n),o);try{F.mount.opts.fs.rename(v,E),F.name=o}catch(d){throw d.code?new s.ErrnoError(y0[d.code]):d}},unlink(F,n){var o=o0.join2(m0.realPath(F),n);try{F.mount.opts.fs.unlink(o)}catch(v){throw v.code?new s.ErrnoError(y0[v.code]):v}},rmdir(F,n){var o=o0.join2(m0.realPath(F),n);try{F.mount.opts.fs.rmdir(o)}catch(v){throw v.code?new s.ErrnoError(y0[v.code]):v}},readdir(F){var n=m0.realPath(F);try{return F.mount.opts.fs.readdir(n)}catch(o){throw o.code?new s.ErrnoError(y0[o.code]):o}},symlink(F,n,o){var v=o0.join2(m0.realPath(F),n);try{F.mount.opts.fs.symlink(o,v)}catch(E){throw E.code?new s.ErrnoError(y0[E.code]):E}},readlink(F){var n=m0.realPath(F);try{return F.mount.opts.fs.readlink(n)}catch(o){throw o.code?new s.ErrnoError(y0[o.code]):o}}},stream_ops:{open(F){var n=m0.realPath(F.node);try{F.nfd=F.node.mount.opts.fs.open(n,F.flags)}catch(o){throw o.code?new s.ErrnoError(y0[o.code]):o}},close(F){try{F.node.mount.opts.fs.close(F.nfd)}catch(n){throw n.code?new s.ErrnoError(y0[n.code]):n}},read(F,n,o,v,E){try{return F.node.mount.opts.fs.read(F.nfd,n,o,v,E)}catch(d){throw d.code?new s.ErrnoError(y0[d.code]):d}},write(F,n,o,v,E){try{return F.node.mount.opts.fs.write(F.nfd,n,o,v,E)}catch(d){throw d.code?new s.ErrnoError(y0[d.code]):d}},llseek(F,n,o){var v=n;if(o===1)v+=F.position;else if(o===2&&s.isFile(F.node.mode))try{var E=F.node.node_ops.getattr(F.node);v+=E.size}catch(d){throw new s.ErrnoError(y0[d.code])}if(v<0)throw new s.ErrnoError(y0.EINVAL);return v}}},DA=async F=>{var n=await _(F);return new Uint8Array(n)},ae=(...F)=>s.createDataFile(...F),kx=F=>F,tx=0,w0=null,oe=F=>{if(tx--,i.monitorRunDependencies?.(tx),tx==0&&w0){var n=w0;w0=null,n()}},$x=F=>{tx++,i.monitorRunDependencies?.(tx)},GA=[],pA=async(F,n)=>{typeof Browser<"u"&&Browser.init();for(var o of GA)if(o.canHandle(n))return o.handle(F,n);return F},FA=async(F,n,o,v,E,d,j,S)=>{var I=n?Fx.resolve(o0.join2(F,n)):F,Z=kx(`cp ${I}`);$x(Z);try{var d0=o;typeof o=="string"&&(d0=await DA(o)),d0=await pA(d0,I),S?.(),d||ae(F,n,d0,v,E,j)}finally{oe(Z)}},gr=(F,n,o,v,E,d,j,S,I,Z)=>{FA(F,n,o,v,E,S,I,Z).then(d).catch(j)},s={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(F){ex(this,"name","ErrnoError"),this.errno=F}},FSStream:class{constructor(){ex(this,"shared",{})}get object(){return this.node}set object(F){this.node=F}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(F){this.shared.flags=F}get position(){return this.shared.position}set position(F){this.shared.position=F}},FSNode:class{constructor(F,n,o,v){ex(this,"node_ops",{}),ex(this,"stream_ops",{}),ex(this,"readMode",365),ex(this,"writeMode",146),ex(this,"mounted",null),F||(F=this),this.parent=F,this.mount=F.mount,this.id=s.nextInode++,this.name=n,this.mode=o,this.rdev=v,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(F){F?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(F){F?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return s.isDir(this.mode)}get isDevice(){return s.isChrdev(this.mode)}},lookupPath(F,n={}){if(!F)throw new s.ErrnoError(44);n.follow_mount??(n.follow_mount=!0),o0.isAbs(F)||(F=s.cwd()+"/"+F);x:for(var o=0;o<40;o++){for(var v=F.split("/").filter(Z=>!!Z),E=s.root,d="/",j=0;j<v.length;j++){var S=j===v.length-1;if(S&&n.parent)break;if(v[j]!=="."){if(v[j]===".."){if(d=o0.dirname(d),s.isRoot(E)){F=d+"/"+v.slice(j+1).join("/"),o--;continue x}else E=E.parent;continue}d=o0.join2(d,v[j]);try{E=s.lookupNode(E,v[j])}catch(Z){if(Z?.errno===44&&S&&n.noent_okay)return{path:d};throw Z}if(s.isMountpoint(E)&&(!S||n.follow_mount)&&(E=E.mounted.root),s.isLink(E.mode)&&(!S||n.follow)){if(!E.node_ops.readlink)throw new s.ErrnoError(52);var I=E.node_ops.readlink(E);o0.isAbs(I)||(I=o0.dirname(d)+"/"+I),F=I+"/"+v.slice(j+1).join("/");continue x}}}return{path:d,node:E}}throw new s.ErrnoError(32)},getPath(F){for(var n;;){if(s.isRoot(F)){var o=F.mount.mountpoint;return n?o[o.length-1]!=="/"?`${o}/${n}`:o+n:o}n=n?`${F.name}/${n}`:F.name,F=F.parent}},hashName(F,n){for(var o=0,v=0;v<n.length;v++)o=(o<<5)-o+n.charCodeAt(v)|0;return(F+o>>>0)%s.nameTable.length},hashAddNode(F){var n=s.hashName(F.parent.id,F.name);F.name_next=s.nameTable[n],s.nameTable[n]=F},hashRemoveNode(F){var n=s.hashName(F.parent.id,F.name);if(s.nameTable[n]===F)s.nameTable[n]=F.name_next;else for(var o=s.nameTable[n];o;){if(o.name_next===F){o.name_next=F.name_next;break}o=o.name_next}},lookupNode(F,n){var o=s.mayLookup(F);if(o)throw new s.ErrnoError(o);for(var v=s.hashName(F.id,n),E=s.nameTable[v];E;E=E.name_next){var d=E.name;if(E.parent.id===F.id&&d===n)return E}return s.lookup(F,n)},createNode(F,n,o,v){var E=new s.FSNode(F,n,o,v);return s.hashAddNode(E),E},destroyNode(F){s.hashRemoveNode(F)},isRoot(F){return F===F.parent},isMountpoint(F){return!!F.mounted},isFile(F){return(F&61440)===32768},isDir(F){return(F&61440)===16384},isLink(F){return(F&61440)===40960},isChrdev(F){return(F&61440)===8192},isBlkdev(F){return(F&61440)===24576},isFIFO(F){return(F&61440)===4096},isSocket(F){return(F&49152)===49152},flagsToPermissionString(F){var n=["r","w","rw"][F&3];return F&512&&(n+="w"),n},nodePermissions(F,n){return s.ignorePermissions?0:n.includes("r")&&!(F.mode&292)||n.includes("w")&&!(F.mode&146)||n.includes("x")&&!(F.mode&73)?2:0},mayLookup(F){if(!s.isDir(F.mode))return 54;var n=s.nodePermissions(F,"x");return n||(F.node_ops.lookup?0:2)},mayCreate(F,n){if(!s.isDir(F.mode))return 54;try{var o=s.lookupNode(F,n);return 20}catch{}return s.nodePermissions(F,"wx")},mayDelete(F,n,o){var v;try{v=s.lookupNode(F,n)}catch(d){return d.errno}var E=s.nodePermissions(F,"wx");if(E)return E;if(o){if(!s.isDir(v.mode))return 54;if(s.isRoot(v)||s.getPath(v)===s.cwd())return 10}else if(s.isDir(v.mode))return 31;return 0},mayOpen(F,n){if(!F)return 44;if(s.isLink(F.mode))return 32;var o=s.flagsToPermissionString(n);return s.isDir(F.mode)&&(o!=="r"||n&576)?31:s.nodePermissions(F,o)},checkOpExists(F,n){if(!F)throw new s.ErrnoError(n);return F},MAX_OPEN_FDS:4096,nextfd(){for(var F=0;F<=s.MAX_OPEN_FDS;F++)if(!s.streams[F])return F;throw new s.ErrnoError(33)},getStreamChecked(F){var n=s.getStream(F);if(!n)throw new s.ErrnoError(8);return n},getStream:F=>s.streams[F],createStream(F,n=-1){return F=Object.assign(new s.FSStream,F),n==-1&&(n=s.nextfd()),F.fd=n,s.streams[n]=F,F},closeStream(F){s.streams[F]=null},dupStream(F,n=-1){var o=s.createStream(F,n);return o.stream_ops?.dup?.(o),o},doSetAttr(F,n,o){var v=F?.stream_ops.setattr,E=v?F:n;v??(v=n.node_ops.setattr),s.checkOpExists(v,63);try{v(E,o)}catch(d){throw d instanceof RangeError?new s.ErrnoError(22):d}},chrdev_stream_ops:{open(F){var n=s.getDevice(F.node.rdev);F.stream_ops=n.stream_ops,F.stream_ops.open?.(F)},llseek(){throw new s.ErrnoError(70)}},major:F=>F>>8,minor:F=>F&255,makedev:(F,n)=>F<<8|n,registerDevice(F,n){s.devices[F]={stream_ops:n}},getDevice:F=>s.devices[F],getMounts(F){for(var n=[],o=[F];o.length;){var v=o.pop();n.push(v),o.push(...v.mounts)}return n},syncfs(F,n){typeof F=="function"&&(n=F,F=!1),s.syncFSRequests++,s.syncFSRequests>1&&N(`warning: ${s.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var o=s.getMounts(s.root.mount),v=0;function E(S){return s.syncFSRequests--,n(S)}function d(S){if(S)return d.errored?void 0:(d.errored=!0,E(S));++v>=o.length&&E(null)}for(var j of o)j.type.syncfs?j.type.syncfs(j,F,d):d(null)},mount(F,n,o){var v=o==="/",E=!o,d;if(v&&s.root)throw new s.ErrnoError(10);if(!v&&!E){var j=s.lookupPath(o,{follow_mount:!1});if(o=j.path,d=j.node,s.isMountpoint(d))throw new s.ErrnoError(10);if(!s.isDir(d.mode))throw new s.ErrnoError(54)}var S={type:F,opts:n,mountpoint:o,mounts:[]},I=F.mount(S);return I.mount=S,S.root=I,v?s.root=I:d&&(d.mounted=S,d.mount&&d.mount.mounts.push(S)),I},unmount(F){var n=s.lookupPath(F,{follow_mount:!1});if(!s.isMountpoint(n.node))throw new s.ErrnoError(28);var o=n.node,v=o.mounted,E=s.getMounts(v);for(var[d,j]of Object.entries(s.nameTable))for(;j;){var S=j.name_next;E.includes(j.mount)&&s.destroyNode(j),j=S}o.mounted=null;var I=o.mount.mounts.indexOf(v);o.mount.mounts.splice(I,1)},lookup(F,n){return F.node_ops.lookup(F,n)},mknod(F,n,o){var v=s.lookupPath(F,{parent:!0}),E=v.node,d=o0.basename(F);if(!d)throw new s.ErrnoError(28);if(d==="."||d==="..")throw new s.ErrnoError(20);var j=s.mayCreate(E,d);if(j)throw new s.ErrnoError(j);if(!E.node_ops.mknod)throw new s.ErrnoError(63);return E.node_ops.mknod(E,d,n,o)},statfs(F){return s.statfsNode(s.lookupPath(F,{follow:!0}).node)},statfsStream(F){return s.statfsNode(F.node)},statfsNode(F){var n={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:s.nextInode,ffree:s.nextInode-1,fsid:42,flags:2,namelen:255};return F.node_ops.statfs&&Object.assign(n,F.node_ops.statfs(F.mount.opts.root)),n},create(F,n=438){return n&=4095,n|=32768,s.mknod(F,n,0)},mkdir(F,n=511){return n&=1023,n|=16384,s.mknod(F,n,0)},mkdirTree(F,n){var o=F.split("/"),v="";for(var E of o)if(E){(v||o0.isAbs(F))&&(v+="/"),v+=E;try{s.mkdir(v,n)}catch(d){if(d.errno!=20)throw d}}},mkdev(F,n,o){return typeof o>"u"&&(o=n,n=438),n|=8192,s.mknod(F,n,o)},symlink(F,n){if(!Fx.resolve(F))throw new s.ErrnoError(44);var o=s.lookupPath(n,{parent:!0}),v=o.node;if(!v)throw new s.ErrnoError(44);var E=o0.basename(n),d=s.mayCreate(v,E);if(d)throw new s.ErrnoError(d);if(!v.node_ops.symlink)throw new s.ErrnoError(63);return v.node_ops.symlink(v,E,F)},rename(F,n){var o=o0.dirname(F),v=o0.dirname(n),E=o0.basename(F),d=o0.basename(n),j,S,I;if(j=s.lookupPath(F,{parent:!0}),S=j.node,j=s.lookupPath(n,{parent:!0}),I=j.node,!S||!I)throw new s.ErrnoError(44);if(S.mount!==I.mount)throw new s.ErrnoError(75);var Z=s.lookupNode(S,E),d0=Fx.relative(F,v);if(d0.charAt(0)!==".")throw new s.ErrnoError(28);if(d0=Fx.relative(n,o),d0.charAt(0)!==".")throw new s.ErrnoError(55);var g0;try{g0=s.lookupNode(I,d)}catch{}if(Z!==g0){var u0=s.isDir(Z.mode),E0=s.mayDelete(S,E,u0);if(E0)throw new s.ErrnoError(E0);if(E0=g0?s.mayDelete(I,d,u0):s.mayCreate(I,d),E0)throw new s.ErrnoError(E0);if(!S.node_ops.rename)throw new s.ErrnoError(63);if(s.isMountpoint(Z)||g0&&s.isMountpoint(g0))throw new s.ErrnoError(10);if(I!==S&&(E0=s.nodePermissions(S,"w"),E0))throw new s.ErrnoError(E0);s.hashRemoveNode(Z);try{S.node_ops.rename(Z,I,d),Z.parent=I}catch(B0){throw B0}finally{s.hashAddNode(Z)}}},rmdir(F){var n=s.lookupPath(F,{parent:!0}),o=n.node,v=o0.basename(F),E=s.lookupNode(o,v),d=s.mayDelete(o,v,!0);if(d)throw new s.ErrnoError(d);if(!o.node_ops.rmdir)throw new s.ErrnoError(63);if(s.isMountpoint(E))throw new s.ErrnoError(10);o.node_ops.rmdir(o,v),s.destroyNode(E)},readdir(F){var n=s.lookupPath(F,{follow:!0}),o=n.node,v=s.checkOpExists(o.node_ops.readdir,54);return v(o)},unlink(F){var n=s.lookupPath(F,{parent:!0}),o=n.node;if(!o)throw new s.ErrnoError(44);var v=o0.basename(F),E=s.lookupNode(o,v),d=s.mayDelete(o,v,!1);if(d)throw new s.ErrnoError(d);if(!o.node_ops.unlink)throw new s.ErrnoError(63);if(s.isMountpoint(E))throw new s.ErrnoError(10);o.node_ops.unlink(o,v),s.destroyNode(E)},readlink(F){var n=s.lookupPath(F),o=n.node;if(!o)throw new s.ErrnoError(44);if(!o.node_ops.readlink)throw new s.ErrnoError(28);return o.node_ops.readlink(o)},stat(F,n){var o=s.lookupPath(F,{follow:!n}),v=o.node,E=s.checkOpExists(v.node_ops.getattr,63);return E(v)},fstat(F){var n=s.getStreamChecked(F),o=n.node,v=n.stream_ops.getattr,E=v?n:o;return v??(v=o.node_ops.getattr),s.checkOpExists(v,63),v(E)},lstat(F){return s.stat(F,!0)},doChmod(F,n,o,v){s.doSetAttr(F,n,{mode:o&4095|n.mode&-4096,ctime:Date.now(),dontFollow:v})},chmod(F,n,o){var v;if(typeof F=="string"){var E=s.lookupPath(F,{follow:!o});v=E.node}else v=F;s.doChmod(null,v,n,o)},lchmod(F,n){s.chmod(F,n,!0)},fchmod(F,n){var o=s.getStreamChecked(F);s.doChmod(o,o.node,n,!1)},doChown(F,n,o){s.doSetAttr(F,n,{timestamp:Date.now(),dontFollow:o})},chown(F,n,o,v){var E;if(typeof F=="string"){var d=s.lookupPath(F,{follow:!v});E=d.node}else E=F;s.doChown(null,E,v)},lchown(F,n,o){s.chown(F,n,o,!0)},fchown(F,n,o){var v=s.getStreamChecked(F);s.doChown(v,v.node,!1)},doTruncate(F,n,o){if(s.isDir(n.mode))throw new s.ErrnoError(31);if(!s.isFile(n.mode))throw new s.ErrnoError(28);var v=s.nodePermissions(n,"w");if(v)throw new s.ErrnoError(v);s.doSetAttr(F,n,{size:o,timestamp:Date.now()})},truncate(F,n){if(n<0)throw new s.ErrnoError(28);var o;if(typeof F=="string"){var v=s.lookupPath(F,{follow:!0});o=v.node}else o=F;s.doTruncate(null,o,n)},ftruncate(F,n){var o=s.getStreamChecked(F);if(n<0||(o.flags&2097155)===0)throw new s.ErrnoError(28);s.doTruncate(o,o.node,n)},utime(F,n,o){var v=s.lookupPath(F,{follow:!0}),E=v.node,d=s.checkOpExists(E.node_ops.setattr,63);d(E,{atime:n,mtime:o})},open(F,n,o=438){if(F==="")throw new s.ErrnoError(44);n=kA(n),n&64?o=o&4095|32768:o=0;var v,E;if(typeof F=="object")v=F;else{E=F.endsWith("/");var d=s.lookupPath(F,{follow:!(n&131072),noent_okay:!0});v=d.node,F=d.path}var j=!1;if(n&64)if(v){if(n&128)throw new s.ErrnoError(20)}else{if(E)throw new s.ErrnoError(31);v=s.mknod(F,o|511,0),j=!0}if(!v)throw new s.ErrnoError(44);if(s.isChrdev(v.mode)&&(n&=-513),n&65536&&!s.isDir(v.mode))throw new s.ErrnoError(54);if(!j){var S=s.mayOpen(v,n);if(S)throw new s.ErrnoError(S)}n&512&&!j&&s.truncate(v,0),n&=-131713;var I=s.createStream({node:v,path:s.getPath(v),flags:n,seekable:!0,position:0,stream_ops:v.stream_ops,ungotten:[],error:!1});return I.stream_ops.open&&I.stream_ops.open(I),j&&s.chmod(v,o&511),I},close(F){if(s.isClosed(F))throw new s.ErrnoError(8);F.getdents&&(F.getdents=null);try{F.stream_ops.close&&F.stream_ops.close(F)}catch(n){throw n}finally{s.closeStream(F.fd)}F.fd=null},isClosed(F){return F.fd===null},llseek(F,n,o){if(s.isClosed(F))throw new s.ErrnoError(8);if(!F.seekable||!F.stream_ops.llseek)throw new s.ErrnoError(70);if(o!=0&&o!=1&&o!=2)throw new s.ErrnoError(28);return F.position=F.stream_ops.llseek(F,n,o),F.ungotten=[],F.position},read(F,n,o,v,E){if(v<0||E<0)throw new s.ErrnoError(28);if(s.isClosed(F))throw new s.ErrnoError(8);if((F.flags&2097155)===1)throw new s.ErrnoError(8);if(s.isDir(F.node.mode))throw new s.ErrnoError(31);if(!F.stream_ops.read)throw new s.ErrnoError(28);var d=typeof E<"u";if(!d)E=F.position;else if(!F.seekable)throw new s.ErrnoError(70);var j=F.stream_ops.read(F,n,o,v,E);return d||(F.position+=j),j},write(F,n,o,v,E,d){if(v<0||E<0)throw new s.ErrnoError(28);if(s.isClosed(F))throw new s.ErrnoError(8);if((F.flags&2097155)===0)throw new s.ErrnoError(8);if(s.isDir(F.node.mode))throw new s.ErrnoError(31);if(!F.stream_ops.write)throw new s.ErrnoError(28);F.seekable&&F.flags&1024&&s.llseek(F,0,2);var j=typeof E<"u";if(!j)E=F.position;else if(!F.seekable)throw new s.ErrnoError(70);var S=F.stream_ops.write(F,n,o,v,E,d);return j||(F.position+=S),S},mmap(F,n,o,v,E){if((v&2)!==0&&(E&2)===0&&(F.flags&2097155)!==2)throw new s.ErrnoError(2);if((F.flags&2097155)===1)throw new s.ErrnoError(2);if(!F.stream_ops.mmap)throw new s.ErrnoError(43);if(!n)throw new s.ErrnoError(28);return F.stream_ops.mmap(F,n,o,v,E)},msync(F,n,o,v,E){return F.stream_ops.msync?F.stream_ops.msync(F,n,o,v,E):0},ioctl(F,n,o){if(!F.stream_ops.ioctl)throw new s.ErrnoError(59);return F.stream_ops.ioctl(F,n,o)},readFile(F,n={}){n.flags=n.flags||0,n.encoding=n.encoding||"binary",n.encoding!=="utf8"&&n.encoding!=="binary"&&U(`Invalid encoding type "${n.encoding}"`);var o=s.open(F,n.flags),v=s.stat(F),E=v.size,d=new Uint8Array(E);return s.read(o,d,0,E,0),n.encoding==="utf8"&&(d=Px(d)),s.close(o),d},writeFile(F,n,o={}){o.flags=o.flags||577;var v=s.open(F,o.flags,o.mode);n=xA(n),s.write(v,n,0,n.byteLength,void 0,o.canOwn),s.close(v)},cwd:()=>s.currentPath,chdir(F){var n=s.lookupPath(F,{follow:!0});if(n.node===null)throw new s.ErrnoError(44);if(!s.isDir(n.node.mode))throw new s.ErrnoError(54);var o=s.nodePermissions(n.node,"x");if(o)throw new s.ErrnoError(o);s.currentPath=n.path},createDefaultDirectories(){s.mkdir("/tmp"),s.mkdir("/home"),s.mkdir("/home/web_user")},createDefaultDevices(){s.mkdir("/dev"),s.registerDevice(s.makedev(1,3),{read:()=>0,write:(v,E,d,j,S)=>j,llseek:()=>0}),s.mkdev("/dev/null",s.makedev(1,3)),V0.register(s.makedev(5,0),V0.default_tty_ops),V0.register(s.makedev(6,0),V0.default_tty1_ops),s.mkdev("/dev/tty",s.makedev(5,0)),s.mkdev("/dev/tty1",s.makedev(6,0));var F=new Uint8Array(1024),n=0,o=()=>(n===0&&(ie(F),n=F.byteLength),F[--n]);s.createDevice("/dev","random",o),s.createDevice("/dev","urandom",o),s.mkdir("/dev/shm"),s.mkdir("/dev/shm/tmp")},createSpecialDirectories(){s.mkdir("/proc");var F=s.mkdir("/proc/self");s.mkdir("/proc/self/fd"),s.mount({mount(){var n=s.createNode(F,"fd",16895,73);return n.stream_ops={llseek:K.stream_ops.llseek},n.node_ops={lookup(o,v){var E=+v,d=s.getStreamChecked(E),j={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>d.path},id:E+1};return j.parent=j,j},readdir(){return Array.from(s.streams.entries()).filter(([o,v])=>v).map(([o,v])=>o.toString())}},n}},{},"/proc/self/fd")},createStandardStreams(F,n,o){F?s.createDevice("/dev","stdin",F):s.symlink("/dev/tty","/dev/stdin"),n?s.createDevice("/dev","stdout",null,n):s.symlink("/dev/tty","/dev/stdout"),o?s.createDevice("/dev","stderr",null,o):s.symlink("/dev/tty1","/dev/stderr");var v=s.open("/dev/stdin",0),E=s.open("/dev/stdout",1),d=s.open("/dev/stderr",1)},staticInit(){s.nameTable=new Array(4096),s.mount(K,{},"/"),s.createDefaultDirectories(),s.createDefaultDevices(),s.createSpecialDirectories(),s.filesystems={MEMFS:K,PROXYFS:m0}},init(F,n,o){s.initialized=!0,F??(F=i.stdin),n??(n=i.stdout),o??(o=i.stderr),s.createStandardStreams(F,n,o)},quit(){s.initialized=!1;for(var F of s.streams)F&&s.close(F)},findObject(F,n){var o=s.analyzePath(F,n);return o.exists?o.object:null},analyzePath(F,n){try{var o=s.lookupPath(F,{follow:!n});F=o.path}catch{}var v={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var o=s.lookupPath(F,{parent:!0});v.parentExists=!0,v.parentPath=o.path,v.parentObject=o.node,v.name=o0.basename(F),o=s.lookupPath(F,{follow:!n}),v.exists=!0,v.path=o.path,v.object=o.node,v.name=o.node.name,v.isRoot=o.path==="/"}catch(E){v.error=E.errno}return v},createPath(F,n,o,v){F=typeof F=="string"?F:s.getPath(F);for(var E=n.split("/").reverse();E.length;){var d=E.pop();if(d){var j=o0.join2(F,d);try{s.mkdir(j)}catch(S){if(S.errno!=20)throw S}F=j}}return j},createFile(F,n,o,v,E){var d=o0.join2(typeof F=="string"?F:s.getPath(F),n),j=AA(v,E);return s.create(d,j)},createDataFile(F,n,o,v,E,d){var j=n;F&&(F=typeof F=="string"?F:s.getPath(F),j=n?o0.join2(F,n):F);var S=AA(v,E),I=s.create(j,S);if(o){o=xA(o),s.chmod(I,S|146);var Z=s.open(I,577);s.write(Z,o,0,o.length,0,d),s.close(Z),s.chmod(I,S)}},createDevice(F,n,o,v){var E,d=o0.join2(typeof F=="string"?F:s.getPath(F),n),j=AA(!!o,!!v);(E=s.createDevice).major??(E.major=64);var S=s.makedev(s.createDevice.major++,0);return s.registerDevice(S,{open(I){I.seekable=!1},close(I){v?.buffer?.length&&v(10)},read(I,Z,d0,g0,u0){for(var E0=0,B0=0;B0<g0;B0++){var M0;try{M0=o()}catch{throw new s.ErrnoError(29)}if(M0===void 0&&E0===0)throw new s.ErrnoError(6);if(M0==null)break;E0++,Z[d0+B0]=M0}return E0&&(I.node.atime=Date.now()),E0},write(I,Z,d0,g0,u0){for(var E0=0;E0<g0;E0++)try{v(Z[d0+E0])}catch{throw new s.ErrnoError(29)}return g0&&(I.node.mtime=I.node.ctime=Date.now()),E0}}),s.mkdev(d,j,S)},forceLoadFile(F){if(F.isDevice||F.isFolder||F.link||F.contents)return!0;if(globalThis.XMLHttpRequest)U("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{F.contents=$(F.url)}catch{throw new s.ErrnoError(29)}},createLazyFile(F,n,o,v,E){class d{constructor(){ex(this,"lengthKnown",!1),ex(this,"chunks",[])}get(u0){if(!(u0>this.length-1||u0<0)){var E0=u0%this.chunkSize,B0=u0/this.chunkSize|0;return this.getter(B0)[E0]}}setDataGetter(u0){this.getter=u0}cacheLength(){var u0=new XMLHttpRequest;u0.open("HEAD",o,!1),u0.send(null),u0.status>=200&&u0.status<300||u0.status===304||U("Couldn't load "+o+". Status: "+u0.status);var E0=Number(u0.getResponseHeader("Content-length")),B0,M0=(B0=u0.getResponseHeader("Accept-Ranges"))&&B0==="bytes",xx=(B0=u0.getResponseHeader("Content-Encoding"))&&B0==="gzip",Ex=1024*1024;M0||(Ex=E0);var Dx=(Ux,Ix)=>{Ux>Ix&&U("invalid range ("+Ux+", "+Ix+") or no bytes requested!"),Ix>E0-1&&U("only "+E0+" bytes available! programmer error!");var Bx=new XMLHttpRequest;return Bx.open("GET",o,!1),E0!==Ex&&Bx.setRequestHeader("Range","bytes="+Ux+"-"+Ix),Bx.responseType="arraybuffer",Bx.overrideMimeType&&Bx.overrideMimeType("text/plain; charset=x-user-defined"),Bx.send(null),Bx.status>=200&&Bx.status<300||Bx.status===304||U("Couldn't load "+o+". Status: "+Bx.status),Bx.response!==void 0?new Uint8Array(Bx.response||[]):dA(Bx.responseText||"",!0)},Nx=this;Nx.setDataGetter(Ux=>{var Ix=Ux*Ex,Bx=(Ux+1)*Ex-1;return Bx=Math.min(Bx,E0-1),typeof Nx.chunks[Ux]>"u"&&(Nx.chunks[Ux]=Dx(Ix,Bx)),typeof Nx.chunks[Ux]>"u"&&U("doXHR failed!"),Nx.chunks[Ux]}),(xx||!E0)&&(Ex=E0=1,E0=this.getter(0).length,Ex=E0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=E0,this._chunkSize=Ex,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){c||U("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var j=new d,S={isDevice:!1,contents:j}}else var S={isDevice:!1,url:o};var I=s.createFile(F,n,S,v,E);S.contents?I.contents=S.contents:S.url&&(I.contents=null,I.url=S.url),Object.defineProperties(I,{usedBytes:{get:function(){return this.contents.length}}});var Z={};for(let[g0,u0]of Object.entries(I.stream_ops))Z[g0]=(...E0)=>(s.forceLoadFile(I),u0(...E0));function d0(g0,u0,E0,B0,M0){var xx=g0.node.contents;if(M0>=xx.length)return 0;var Ex=Math.min(xx.length-M0,B0);if(xx.slice)for(var Dx=0;Dx<Ex;Dx++)u0[E0+Dx]=xx[M0+Dx];else for(var Dx=0;Dx<Ex;Dx++)u0[E0+Dx]=xx.get(M0+Dx);return Ex}return Z.read=(g0,u0,E0,B0,M0)=>(s.forceLoadFile(I),d0(g0,u0,E0,B0,M0)),Z.mmap=(g0,u0,E0,B0,M0)=>{s.forceLoadFile(I);var xx=uA(u0);if(!xx)throw new s.ErrnoError(48);return d0(g0,ox,xx,u0,E0),{ptr:xx,allocated:!0}},I.stream_ops=Z,I}},h0={currentUmask:18,calculateAt(F,n,o){if(o0.isAbs(n))return n;var v;if(F===-100)v=s.cwd();else{var E=h0.getStreamFromFD(F);v=E.path}if(n.length==0){if(!o)throw new s.ErrnoError(44);return v}return v+"/"+n},writeStat(F,n){$0[F>>2]=n.dev,$0[F+4>>2]=n.mode,$0[F+8>>2]=n.nlink,$0[F+12>>2]=n.uid,$0[F+16>>2]=n.gid,$0[F+20>>2]=n.rdev,G0[F+24>>3]=BigInt(n.size),H0[F+32>>2]=4096,H0[F+36>>2]=n.blocks;var o=n.atime.getTime(),v=n.mtime.getTime(),E=n.ctime.getTime();return G0[F+40>>3]=BigInt(Math.floor(o/1e3)),$0[F+48>>2]=o%1e3*1e3*1e3,G0[F+56>>3]=BigInt(Math.floor(v/1e3)),$0[F+64>>2]=v%1e3*1e3*1e3,G0[F+72>>3]=BigInt(Math.floor(E/1e3)),$0[F+80>>2]=E%1e3*1e3*1e3,G0[F+88>>3]=BigInt(n.ino),0},writeStatFs(F,n){$0[F+4>>2]=n.bsize,$0[F+60>>2]=n.bsize,G0[F+8>>3]=BigInt(n.blocks),G0[F+16>>3]=BigInt(n.bfree),G0[F+24>>3]=BigInt(n.bavail),G0[F+32>>3]=BigInt(n.files),G0[F+40>>3]=BigInt(n.ffree),$0[F+48>>2]=n.fsid,$0[F+64>>2]=n.flags,$0[F+56>>2]=n.namelen},doMsync(F,n,o,v,E){if(!s.isFile(n.node.mode))throw new s.ErrnoError(43);if(v&2)return 0;var d=OA.slice(F,F+o);s.msync(n,d,E,o,v)},getStreamFromFD(F){var n=s.getStreamChecked(F);return n},varargs:void 0,getStr(F){var n=lx(F);return n}};function ye(F,n,o){h0.varargs=o;try{var v=h0.getStreamFromFD(F);switch(n){case 0:{var E=zx();if(E<0)return-28;for(;s.streams[E];)E++;var d;return d=s.dupStream(v,E),d.fd}case 1:case 2:return 0;case 3:return v.flags;case 4:{var E=zx(),j=289792;return v.flags=v.flags&~j|E&j,0}case 12:{var E=Vx(),S=0;return Kx[E+S>>1]=2,0}case 13:case 14:return 0}return-28}catch(I){if(typeof s>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function yA(F,n,o){h0.varargs=o;try{var v=h0.getStreamFromFD(F);switch(n){case 21509:return v.tty?0:-59;case 21505:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tcgets){var E=v.tty.ops.ioctl_tcgets(v),d=Vx();H0[d>>2]=E.c_iflag||0,H0[d+4>>2]=E.c_oflag||0,H0[d+8>>2]=E.c_cflag||0,H0[d+12>>2]=E.c_lflag||0;for(var j=0;j<32;j++)ox[d+j+17]=E.c_cc[j]||0;return 0}return 0}case 21510:case 21511:case 21512:return v.tty?0:-59;case 21506:case 21507:case 21508:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tcsets){for(var d=Vx(),S=H0[d>>2],I=H0[d+4>>2],Z=H0[d+8>>2],d0=H0[d+12>>2],g0=[],j=0;j<32;j++)g0.push(ox[d+j+17]);return v.tty.ops.ioctl_tcsets(v.tty,n,{c_iflag:S,c_oflag:I,c_cflag:Z,c_lflag:d0,c_cc:g0})}return 0}case 21519:{if(!v.tty)return-59;var d=Vx();return H0[d>>2]=0,0}case 21520:return v.tty?-28:-59;case 21537:case 21531:{var d=Vx();return s.ioctl(v,n,d)}case 21523:{if(!v.tty)return-59;if(v.tty.ops.ioctl_tiocgwinsz){var u0=v.tty.ops.ioctl_tiocgwinsz(v.tty),d=Vx();Kx[d>>1]=u0[0],Kx[d+2>>1]=u0[1]}return 0}case 21524:return v.tty?0:-59;case 21515:return v.tty?0:-59;default:return-28}}catch(E0){if(typeof s>"u"||E0.name!=="ErrnoError")throw E0;return-E0.errno}}function bA(F,n,o,v){h0.varargs=v;try{n=h0.getStr(n),n=h0.calculateAt(F,n);var E=v?zx():0;return o&64&&(E&=~h0.currentUmask),s.open(n,o,E).fd}catch(d){if(typeof s>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}var kr=()=>2147483648,Fe=(F,n)=>Math.ceil(F/n)*n,Qe=F=>{var n=qe.buffer.byteLength,o=(F-n+65535)/65536|0;try{return qe.grow(o),n0(),1}catch{}},Ze=F=>{var n=OA.length;F>>>=0;var o=kr();if(F>o)return!1;for(var v=1;v<=4;v*=2){var E=n*(1+.2/v);E=Math.min(E,F+100663296);var d=Math.min(o,Fe(Math.max(F,E),65536)),j=Qe(d);if(j)return!0}return!1};function yr(F){try{var n=h0.getStreamFromFD(F);return s.close(n),0}catch(o){if(typeof s>"u"||o.name!=="ErrnoError")throw o;return o.errno}}var _r=(F,n,o,v)=>{for(var E=0,d=0;d<o;d++){var j=$0[n>>2],S=$0[n+4>>2];n+=8;var I=s.read(F,ox,j,S,v);if(I<0)return-1;if(E+=I,I<S)break;typeof v<"u"&&(v+=I)}return E};function wr(F,n,o,v){try{var E=h0.getStreamFromFD(F),d=_r(E,n,o);return $0[v>>2]=d,0}catch(j){if(typeof s>"u"||j.name!=="ErrnoError")throw j;return j.errno}}var ve=9007199254740992,xr=-9007199254740992,UA=F=>F<xr||F>ve?NaN:Number(F);function fe(F,n,o,v){n=UA(n);try{if(isNaN(n))return 22;var E=h0.getStreamFromFD(F);return s.llseek(E,n,o),G0[v>>3]=BigInt(E.position),E.getdents&&n===0&&o===0&&(E.getdents=null),0}catch(d){if(typeof s>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var Sr=(F,n,o,v)=>{for(var E=0,d=0;d<o;d++){var j=$0[n>>2],S=$0[n+4>>2];n+=8;var I=s.write(F,ox,j,S,v);if(I<0)return-1;if(E+=I,I<S)break;typeof v<"u"&&(v+=I)}return E};function Ar(F,n,o,v){try{var E=h0.getStreamFromFD(F),d=Sr(E,n,o);return $0[v>>2]=d,0}catch(j){if(typeof s>"u"||j.name!=="ErrnoError")throw j;return j.errno}}var er=F=>{var n=i["_"+F];return n},HA=(F,n)=>{ox.set(F,n)},le=(F,n,o)=>se(F,OA,n,o),_e=F=>ux(F),rr=F=>{var n=CA(F)+1,o=_e(n);return le(F,o,n),o},tr=(F,n,o,v,E)=>{var d={string:B0=>{var M0=0;return B0!=null&&B0!==0&&(M0=rr(B0)),M0},array:B0=>{var M0=_e(B0.length);return HA(B0,M0),M0}};function j(B0){return n==="string"?lx(B0):n==="boolean"?!!B0:B0}var S=er(F),I=[],Z=0;if(v)for(var d0=0;d0<v.length;d0++){var g0=d[o[d0]];g0?(Z===0&&(Z=ne()),I[d0]=g0(v[d0])):I[d0]=v[d0]}var u0=S(...I);function E0(B0){return Z!==0&&Ye(Z),j(B0)}return u0=E0(u0),u0},nr=(F,n,o,v)=>{var E=!o||o.every(j=>j==="number"||j==="boolean"),d=n!=="string";return d&&E&&!v?er(F):(...j)=>tr(F,n,o,j,v)},qr=(...F)=>s.createPath(...F),Tr=(...F)=>s.unlink(...F),ce=(...F)=>s.createLazyFile(...F),Pr=(...F)=>s.createDevice(...F);if(s.createPreloadedFile=gr,s.preloadFile=FA,s.staticInit(),i.noExitRuntime&&(Xe=i.noExitRuntime),i.preloadPlugins&&(GA=i.preloadPlugins),i.print&&(M=i.print),i.printErr&&(N=i.printErr),i.wasmBinary&&(z=i.wasmBinary),i.arguments&&(b=i.arguments),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();i.addRunDependency=$x,i.removeRunDependency=oe,i.ccall=tr,i.cwrap=nr,i.setValue=aA,i.getValue=gA,i.UTF8ToString=lx,i.stringToUTF8=le,i.lengthBytesUTF8=CA,i.FS_preloadFile=FA,i.FS_unlink=Tr,i.FS_createPath=qr,i.FS_createDevice=Pr,i.FS=s,i.FS_createDataFile=ae,i.FS_createLazyFile=ce,i.PROXYFS=m0;function $r(){return typeof i.__prDispatch=="function"?1:0}function ir(F,n,o,v){return i.__prDispatch(F,n,o,v)|0}function sr(F,n){return typeof i<"u"&&typeof i.__prDebugOut=="function"?(i.__prDebugOut(F,n),n):0}var JA,ar,KA,we,Ox,Nr,_A,zA,Se,yx,Ee,VA,f,B,p,h,w,P,J,Q,l0,k0,Z0,J0,O0,q0,cx,wx,Gx,Wx,Xx,WA,eA,vA,ux,Ir,wt,St,qe;function qt(F){JA=i._pr_set_limits=F.pr_set_limits,ar=i._pr_set_budget=F.pr_set_budget,KA=i._pr_close=F.pr_close,we=i._free=F.free,Ox=i._pr_reset_run_state=F.pr_reset_run_state,Nr=i._pr_open=F.pr_open,_A=i._pr_num_natives=F.pr_num_natives,zA=i._pr_native_name=F.pr_native_name,Se=i._pr_register_all=F.pr_register_all,yx=i._pr_num_publics=F.pr_num_publics,Ee=i._pr_public_name=F.pr_public_name,VA=i._pr_find_public=F.pr_find_public,f=i._pr_exec=F.pr_exec,B=i._pr_last_error=F.pr_last_error,p=i._pr_last_cip=F.pr_last_cip,h=i._pr_last_frm=F.pr_last_frm,w=i._pr_get_budget_used=F.pr_get_budget_used,P=i._pr_raise_error=F.pr_raise_error,J=i._pr_verify_addr=F.pr_verify_addr,Q=i._pr_addr=F.pr_addr,l0=i._pr_data_size=F.pr_data_size,k0=i._pr_heap_alloc=F.pr_heap_alloc,Z0=i._pr_read_cell=F.pr_read_cell,J0=i._pr_write_cell=F.pr_write_cell,O0=i._pr_read_cells=F.pr_read_cells,q0=i._pr_write_cells=F.pr_write_cells,cx=i._pr_read_packed=F.pr_read_packed,wx=i._pr_write_packed=F.pr_write_packed,Gx=i._pr_read_cstring=F.pr_read_cstring,Wx=i._malloc=F.malloc,Xx=i._pr_get_virtual_us=F.pr_get_virtual_us,WA=i._pr_set_virtual_us=F.pr_set_virtual_us,eA=i._pr_set_rand_seed=F.pr_set_rand_seed,vA=F._emscripten_stack_restore,ux=F._emscripten_stack_alloc,Ir=F.emscripten_stack_get_current,wt=qe=F.memory,St=F.__indirect_function_table}var tt={__assert_fail:BA,__syscall_fcntl64:ye,__syscall_ioctl:yA,__syscall_openat:bA,emscripten_resize_heap:Ze,fd_close:yr,fd_read:wr,fd_seek:fe,fd_write:Ar,pr_debug_out:sr,pr_js_dispatch:ir,pr_js_has_dispatch:$r};function or(){if(tx>0){w0=or;return}if(r0(),tx>0){w0=or;return}function F(){i.calledRun=!0,!F0&&(x0(),Y?.(i),i.onRuntimeInitialized?.(),f0())}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),F()},1)):F()}var XA;return XA=await iA(),or(),V?a=i:a=new Promise((F,n)=>{Y=F,H=n}),a}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),CF={};fB(CF,{createPawnCC:()=>DB,createPawnDbg:()=>pB,createPawnRun:()=>bB});dF.exports=lB(CF);var CB=rs(cB(),1),dB=rs(EB(),1),uB=rs(BB(),1),DB=CB.default,pB=dB.default,bB=uB.default});var Br=Co((Jj,zv)=>{"use strict";var TB=Object.create,Jt=Object.defineProperty,PB=Object.getOwnPropertyDescriptor,A8=Object.getOwnPropertyNames,$B=Object.getPrototypeOf,NB=Object.prototype.hasOwnProperty,IB=(x,A,e)=>A in x?Jt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,MB=(x,A)=>function(){try{return A||(0,x[A8(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},RB=(x,A)=>{for(var e in A)Jt(x,e,{get:A[e],enumerable:!0})},e8=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of A8(A))!NB.call(x,t)&&t!==e&&Jt(x,t,{get:()=>A[t],enumerable:!(r=PB(A,t))||r.enumerable});return x},LB=(x,A,e)=>(e=x!=null?TB($B(x)):{},e8(A||!x||!x.__esModule?Jt(e,"default",{value:x,enumerable:!0}):e,x)),OB=x=>e8(Jt({},"__esModule",{value:!0}),x),i0=(x,A,e)=>IB(x,typeof A!="symbol"?A+"":A,e),GB=MB({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var a;(function(){function C(a0){a0=a0.split("-")[0];for(var D0=a0.split(".").slice(0,3);D0.length<3;)D0.push("00");return D0=D0.map((S0,vx,sx)=>S0.padStart(2,"0")),D0.join("")}var D=a0=>[a0/1e4|0,(a0/100|0)%100,a0%100].join("."),y=2147483647,L=typeof process<"u"&&process.versions?.node?C(process.versions.node):y;if(L<180300)throw new Error(`This emscripten-generated code requires node v${D(180300)} (detected v${D(L)})`);var G=typeof navigator<"u"&&navigator.userAgent;if(G){var e0=G.includes("Safari/")&&!G.includes("Chrome/")&&G.match(/Version\/(\d+\.?\d*\.?\d*)/)?C(G.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):y;if(e0<15e4)throw new Error(`This emscripten-generated code requires Safari v${D(15e4)} (detected v${e0})`);var A0=G.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):y;if(A0<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${A0})`);var t0=G.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):y;if(t0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${t0})`)}})();var i=t,l=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=!l&&!u&&!c,m=[],g="./this.program",q=(C,D)=>{throw D};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var _="",$,T;if(u){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var M=require("fs");_=__dirname+"/",T=D=>{D=O(D)?new URL(D):D;var y=M.readFileSync(D);return k(Buffer.isBuffer(y)),y},$=async(D,y=!0)=>{D=O(D)?new URL(D):D;var L=M.readFileSync(D,y?void 0:"utf8");return k(y?Buffer.isBuffer(L):typeof L=="string"),L},process.argv.length>1&&(g=process.argv[1].replace(/\\/g,"/")),m=process.argv.slice(2),q=(D,y)=>{throw process.exitCode=D,y}}else if(!b)if(l||c){try{_=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");c&&(T=C=>{var D=new XMLHttpRequest;return D.open("GET",C,!1),D.responseType="arraybuffer",D.send(null),new Uint8Array(D.response)}),$=async C=>{if(O(C))return new Promise((y,L)=>{var G=new XMLHttpRequest;G.open("GET",C,!0),G.responseType="arraybuffer",G.onload=()=>{if(G.status==200||G.status==0&&G.response){y(G.response);return}L(G.status)},G.onerror=L,G.send(null)});var D=await fetch(C,{credentials:"same-origin"});if(D.ok)return D.arrayBuffer();throw new Error(D.status+" : "+D.url)}}else throw new Error("environment detection error");var N=console.log.bind(console),z=console.error.bind(console);k(!b,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var F0;globalThis.WebAssembly||z("no native wasm support detected");var R=!1;function k(C,D){C||H0("Assertion failed"+(D?": "+D:""))}var O=C=>C.startsWith("file://");function W(){var C=Mi();k((C&3)==0),C==0&&(C+=4),P0[C>>2]=34821223,P0[C+4>>2]=2310721022,P0[0]=1668509029}function Y(){if(!R){var C=Mi();C==0&&(C+=4);var D=P0[C>>2],y=P0[C+4>>2];(D!=34821223||y!=2310721022)&&H0(`Stack overflow! Stack cookie has been overwritten at ${Fx(C)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Fx(y)} ${Fx(D)}`),P0[0]!=1668509029&&H0("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class V extends H{}var n0=!0;(()=>{var C=new Int16Array(1),D=new Int8Array(C.buffer);C[0]=25459,(D[0]!==115||D[1]!==99)&&H0("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function r0(C){Object.getOwnPropertyDescriptor(i,C)||Object.defineProperty(i,C,{configurable:!0,set(){H0(`Attempt to set \`Module.${C}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function x0(C){return()=>k(!1,`call to '${C}' via reference taken before Wasm module initialization`)}function f0(C){Object.getOwnPropertyDescriptor(i,C)&&H0(`\`Module.${C}\` was supplied but \`${C}\` not included in INCOMING_MODULE_JS_API`)}function U(C){return C==="FS_createPath"||C==="FS_createDataFile"||C==="FS_createPreloadedFile"||C==="FS_preloadFile"||C==="FS_unlink"||C==="addRunDependency"||C==="FS_createLazyFile"||C==="FS_createDevice"||C==="removeRunDependency"}function v0(C){c0(C)}function c0(C){Object.getOwnPropertyDescriptor(i,C)||Object.defineProperty(i,C,{configurable:!0,get(){var D=`'${C}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(C)&&(D+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),H0(D)}})}function p0(C){for(var D=0,y=C.length,L=new Uint8Array(y),G;D<y;++D)G=C.charCodeAt(D),L[D]=~G>>8&G;return L}var b0,I0,L0=!1;function dx(){var C=cn.buffer;aA=new Int8Array(C),hA=new Int16Array(C),i.HEAPU8=lx=new Uint8Array(C),fx=new Uint16Array(C),gA=new Int32Array(C),P0=new Uint32Array(C),Ye=new Float32Array(C),ne=new Float64Array(C),Xe=new BigInt64Array(C),Px=new BigUint64Array(C)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function iA(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)jr(i.preRun.shift());r0("preRun"),BA(o0)}function LA(){k(!L0),L0=!0,Y(),nt.__wasm_call_ctors()}function Kx(){if(Y(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)Vx(i.postRun.shift());r0("postRun"),BA(zx)}function H0(C){i.onAbort?.(C),C=`Aborted(${C})`,z(C),R=!0;var D=new WebAssembly.RuntimeError(C);throw I0?.(D),D}function G0(){H0("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var ox={init:G0,createDataFile:G0,createPreloadedFile:G0,createLazyFile:G0,open:G0,mkdev:G0,registerDevice:G0,analyzePath:G0,ErrnoError:G0};function W0(C,D){return(...y)=>{k(L0,`native function \`${C}\` called before runtime initialization`);var L=nt[C];return k(L,`exported native function \`${C}\` not found`),k(y.length<=D,`native function \`${C}\` called with ${y.length} args but expects ${D}`),L(...y)}}var K0;function Q0(){return p0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
1961
+ \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\xC1\xC6\0\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xFB\xC6\0\v\f\0A\x87\xC7\0\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\xB5\xC7\0\v\0A\xC1\xC7\0\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xEF\xC7\0\v\0A\xFB\xC7\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\xB2\xC8\0\v\0\0\0\0\0\0\0\0\0 \0A\xE3\xC8\0\v\0A\xEF\xC8\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\x9D\xC9\0\v\0A\xA9\xC9\0\v'\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\0A\xD2\xC9\0\v\0\0\0\0p\x99\0\x91\xF4E%,g\0\0@i`)}function p0(F){return F}async function b0(F){return F}async function I0(F,n){try{var o=await b0(F),f=await WebAssembly.instantiate(o,n);return f}catch(E){N(`failed to asynchronously prepare wasm: ${E}`),U(E)}}async function L0(F,n,o){return I0(n,o)}function dx(){var F={env:tt,wasi_snapshot_preview1:tt};return F}async function iA(){function F(d,j){return XA=d.exports,Tt(XA),n0(),XA}function n(d){return F(d.instance)}var o=dx();if(i.instantiateWasm)return new Promise((d,j)=>{i.instantiateWasm(o,(S,I)=>{d(F(S,I))})});v0??(v0=c0());var f=await L0(z,v0,o),E=n(f);return E}class LA{constructor(n){ex(this,"name","ExitStatus"),this.message=`Program terminated with exit(${n})`,this.status=n}}var Kx,H0,G0,ox,W0,K0,Q0,N0,br,OA,We=F=>{for(;F.length>0;)F.shift()(i)},C0=[],mr=F=>C0.push(F),sA=[],gA=F=>sA.push(F);function kA(F,n="i8"){switch(n.endsWith("*")&&(n="*"),n){case"i1":return ox[F];case"i8":return ox[F];case"i16":return Kx[F>>1];case"i32":return H0[F>>2];case"i64":return G0[F>>3];case"float":return W0[F>>2];case"double":return K0[F>>3];case"*":return N0[F>>2];default:U(`invalid type for getValue: ${n}`)}}var Xe=!0;function aA(F,n,o="i8"){switch(o.endsWith("*")&&(o="*"),o){case"i1":ox[F]=n;break;case"i8":ox[F]=n;break;case"i16":Kx[F>>1]=n;break;case"i32":H0[F>>2]=n;break;case"i64":G0[F>>3]=BigInt(n);break;case"float":W0[F>>2]=n;break;case"double":K0[F>>3]=n;break;case"*":N0[F>>2]=n;break;default:U(`invalid type for setValue: ${o}`)}}var Ye=F=>vA(F),se=()=>Ir(),fx=globalThis.TextDecoder&&new TextDecoder,P0=(F,n,o,f)=>{var E=n+o;if(f)return E;for(;F[n]&&!(n>=E);)++n;return n},Px=(F,n=0,o,f)=>{var E=P0(F,n,o,f);if(E-n>16&&F.buffer&&fx)return fx.decode(F.subarray(n,E));for(var d="";n<E;){var j=F[n++];if(!(j&128)){d+=String.fromCharCode(j);continue}var S=F[n++]&63;if((j&224)==192){d+=String.fromCharCode((j&31)<<6|S);continue}var I=F[n++]&63;if((j&240)==224?j=(j&15)<<12|S<<6|I:j=(j&7)<<18|S<<12|I<<6|F[n++]&63,j<65536)d+=String.fromCharCode(j);else{var Z=j-65536;d+=String.fromCharCode(55296|Z>>10,56320|Z&1023)}}return d},lx=(F,n,o)=>F?Px(OA,F,n,o):"",BA=(F,n,o,f)=>U(`Assertion failed: ${lx(F)}, at: `+[n?lx(n):"unknown filename",o,f?lx(f):"unknown function"]),zx=()=>{var F=H0[+h0.varargs>>2];return h0.varargs+=4,F},Vx=zx,o0={isAbs:F=>F.charAt(0)==="/",splitPath:F=>{var n=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return n.exec(F).slice(1)},normalizeArray:(F,n)=>{for(var o=0,f=F.length-1;f>=0;f--){var E=F[f];E==="."?F.splice(f,1):E===".."?(F.splice(f,1),o++):o&&(F.splice(f,1),o--)}if(n)for(;o;o--)F.unshift("..");return F},normalize:F=>{var n=o0.isAbs(F),o=F.slice(-1)==="/";return F=o0.normalizeArray(F.split("/").filter(f=>!!f),!n).join("/"),!F&&!n&&(F="."),F&&o&&(F+="/"),(n?"/":"")+F},dirname:F=>{var n=o0.splitPath(F),o=n[0],f=n[1];return!o&&!f?".":(f&&(f=f.slice(0,-1)),o+f)},basename:F=>F&&F.match(/([^\/]+|\/)\/*$/)[1],join:(...F)=>o0.normalize(F.join("/")),join2:(F,n)=>o0.normalize(F+"/"+n)},jr=()=>{if(u){var F=require("crypto");return n=>F.randomFillSync(n)}return n=>(crypto.getRandomValues(n),0)},ae=F=>(ae=jr())(F),Fx={resolve:(...F)=>{for(var n="",o=!1,f=F.length-1;f>=-1&&!o;f--){var E=f>=0?F[f]:a.cwd();if(typeof E!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!E)return"";n=E+"/"+n,o=o0.isAbs(E)}return n=o0.normalizeArray(n.split("/").filter(d=>!!d),!o).join("/"),(o?"/":"")+n||"."},relative:(F,n)=>{F=Fx.resolve(F).slice(1),n=Fx.resolve(n).slice(1);function o(Z){for(var d0=0;d0<Z.length&&Z[d0]==="";d0++);for(var g0=Z.length-1;g0>=0&&Z[g0]==="";g0--);return d0>g0?[]:Z.slice(d0,g0-d0+1)}for(var f=o(F.split("/")),E=o(n.split("/")),d=Math.min(f.length,E.length),j=d,S=0;S<d;S++)if(f[S]!==E[S]){j=S;break}for(var I=[],S=j;S<f.length;S++)I.push("..");return I=I.concat(E.slice(j)),I.join("/")}},Lx=[],CA=F=>{for(var n=0,o=0;o<F.length;++o){var f=F.charCodeAt(o);f<=127?n++:f<=2047?n+=2:f>=55296&&f<=57343?(n+=4,++o):n+=3}return n},oe=(F,n,o,f)=>{if(!(f>0))return 0;for(var E=o,d=o+f-1,j=0;j<F.length;++j){var S=F.codePointAt(j);if(S<=127){if(o>=d)break;n[o++]=S}else if(S<=2047){if(o+1>=d)break;n[o++]=192|S>>6,n[o++]=128|S&63}else if(S<=65535){if(o+2>=d)break;n[o++]=224|S>>12,n[o++]=128|S>>6&63,n[o++]=128|S&63}else{if(o+3>=d)break;n[o++]=240|S>>18,n[o++]=128|S>>12&63,n[o++]=128|S>>6&63,n[o++]=128|S&63,j++}}return n[o]=0,o-E},dA=(F,n,o)=>{var f=o>0?o:CA(F)+1,E=new Array(f),d=oe(F,E,0,E.length);return n&&(E.length=d),E},hr=()=>{if(!Lx.length){var F=null;if(u){var n=256,o=Buffer.alloc(n),f=0,E=process.stdin.fd;try{f=T.readSync(E,o,0,n)}catch(d){if(d.toString().includes("EOF"))f=0;else throw d}f>0&&(F=o.slice(0,f).toString("utf-8"))}else globalThis.window?.prompt&&(F=window.prompt("Input: "),F!==null&&(F+=`
1962
+ `));if(!F)return null;Lx=dA(F,!0)}return Lx.shift()},V0={ttys:[],init(){},shutdown(){},register(F,n){V0.ttys[F]={input:[],output:[],ops:n},a.registerDevice(F,V0.stream_ops)},stream_ops:{open(F){var n=V0.ttys[F.node.rdev];if(!n)throw new a.ErrnoError(43);F.tty=n,F.seekable=!1},close(F){F.tty.ops.fsync(F.tty)},fsync(F){F.tty.ops.fsync(F.tty)},read(F,n,o,f,E){if(!F.tty||!F.tty.ops.get_char)throw new a.ErrnoError(60);for(var d=0,j=0;j<f;j++){var S;try{S=F.tty.ops.get_char(F.tty)}catch{throw new a.ErrnoError(29)}if(S===void 0&&d===0)throw new a.ErrnoError(6);if(S==null)break;d++,n[o+j]=S}return d&&(F.node.atime=Date.now()),d},write(F,n,o,f,E){if(!F.tty||!F.tty.ops.put_char)throw new a.ErrnoError(60);try{for(var d=0;d<f;d++)F.tty.ops.put_char(F.tty,n[o+d])}catch{throw new a.ErrnoError(29)}return f&&(F.node.mtime=F.node.ctime=Date.now()),d}},default_tty_ops:{get_char(F){return hr()},put_char(F,n){n===null||n===10?(M(Px(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(M(Px(F.output)),F.output=[])},ioctl_tcgets(F){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(F,n,o){return 0},ioctl_tiocgwinsz(F){return[24,80]}},default_tty1_ops:{put_char(F,n){n===null||n===10?(N(Px(F.output)),F.output=[]):n!=0&&F.output.push(n)},fsync(F){F.output?.length>0&&(N(Px(F.output)),F.output=[])}}},uA=F=>{U()},K={ops_table:null,mount(F){return K.createNode(null,"/",16895,0)},createNode(F,n,o,f){if(a.isBlkdev(o)||a.isFIFO(o))throw new a.ErrnoError(63);K.ops_table||(K.ops_table={dir:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,lookup:K.node_ops.lookup,mknod:K.node_ops.mknod,rename:K.node_ops.rename,unlink:K.node_ops.unlink,rmdir:K.node_ops.rmdir,readdir:K.node_ops.readdir,symlink:K.node_ops.symlink},stream:{llseek:K.stream_ops.llseek}},file:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:{llseek:K.stream_ops.llseek,read:K.stream_ops.read,write:K.stream_ops.write,mmap:K.stream_ops.mmap,msync:K.stream_ops.msync}},link:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr,readlink:K.node_ops.readlink},stream:{}},chrdev:{node:{getattr:K.node_ops.getattr,setattr:K.node_ops.setattr},stream:a.chrdev_stream_ops}});var E=a.createNode(F,n,o,f);return a.isDir(E.mode)?(E.node_ops=K.ops_table.dir.node,E.stream_ops=K.ops_table.dir.stream,E.contents={}):a.isFile(E.mode)?(E.node_ops=K.ops_table.file.node,E.stream_ops=K.ops_table.file.stream,E.usedBytes=0,E.contents=K.emptyFileContents??(K.emptyFileContents=new Uint8Array(0))):a.isLink(E.mode)?(E.node_ops=K.ops_table.link.node,E.stream_ops=K.ops_table.link.stream):a.isChrdev(E.mode)&&(E.node_ops=K.ops_table.chrdev.node,E.stream_ops=K.ops_table.chrdev.stream),E.atime=E.mtime=E.ctime=Date.now(),F&&(F.contents[n]=E,F.atime=F.mtime=F.ctime=E.atime),E},getFileDataAsTypedArray(F){return F.contents.subarray(0,F.usedBytes)},expandFileStorage(F,n){var o=F.contents.length;if(!(o>=n)){var f=1024*1024;n=Math.max(n,o*(o<f?2:1.125)>>>0),o&&(n=Math.max(n,256));var E=K.getFileDataAsTypedArray(F);F.contents=new Uint8Array(n),F.contents.set(E)}},resizeFileStorage(F,n){if(F.usedBytes!=n){var o=F.contents;F.contents=new Uint8Array(n),F.contents.set(o.subarray(0,Math.min(n,F.usedBytes))),F.usedBytes=n}},node_ops:{getattr(F){var n={};return n.dev=a.isChrdev(F.mode)?F.id:1,n.ino=F.id,n.mode=F.mode,n.nlink=1,n.uid=0,n.gid=0,n.rdev=F.rdev,a.isDir(F.mode)?n.size=4096:a.isFile(F.mode)?n.size=F.usedBytes:a.isLink(F.mode)?n.size=F.link.length:n.size=0,n.atime=new Date(F.atime),n.mtime=new Date(F.mtime),n.ctime=new Date(F.ctime),n.blksize=4096,n.blocks=Math.ceil(n.size/n.blksize),n},setattr(F,n){for(let o of["mode","atime","mtime","ctime"])n[o]!=null&&(F[o]=n[o]);n.size!==void 0&&K.resizeFileStorage(F,n.size)},lookup(F,n){throw K.doesNotExistError||(K.doesNotExistError=new a.ErrnoError(44),K.doesNotExistError.stack="<generic error, no stack>"),K.doesNotExistError},mknod(F,n,o,f){return K.createNode(F,n,o,f)},rename(F,n,o){var f;try{f=a.lookupNode(n,o)}catch{}if(f){if(a.isDir(F.mode))for(var E in f.contents)throw new a.ErrnoError(55);a.hashRemoveNode(f)}delete F.parent.contents[F.name],n.contents[o]=F,F.name=o,n.ctime=n.mtime=F.parent.ctime=F.parent.mtime=Date.now()},unlink(F,n){delete F.contents[n],F.ctime=F.mtime=Date.now()},rmdir(F,n){var o=a.lookupNode(F,n);for(var f in o.contents)throw new a.ErrnoError(55);delete F.contents[n],F.ctime=F.mtime=Date.now()},readdir(F){return[".","..",...Object.keys(F.contents)]},symlink(F,n,o){var f=K.createNode(F,n,41471,0);return f.link=o,f},readlink(F){if(!a.isLink(F.mode))throw new a.ErrnoError(28);return F.link}},stream_ops:{read(F,n,o,f,E){var d=F.node.contents;if(E>=F.node.usedBytes)return 0;var j=Math.min(F.node.usedBytes-E,f);return n.set(d.subarray(E,E+j),o),j},write(F,n,o,f,E,d){if(n.buffer===ox.buffer&&(d=!1),!f)return 0;var j=F.node;return j.mtime=j.ctime=Date.now(),d?(j.contents=n.subarray(o,o+f),j.usedBytes=f):j.usedBytes===0&&E===0?(j.contents=n.slice(o,o+f),j.usedBytes=f):(K.expandFileStorage(j,E+f),j.contents.set(n.subarray(o,o+f),E),j.usedBytes=Math.max(j.usedBytes,E+f)),f},llseek(F,n,o){var f=n;if(o===1?f+=F.position:o===2&&a.isFile(F.node.mode)&&(f+=F.node.usedBytes),f<0)throw new a.ErrnoError(28);return f},mmap(F,n,o,f,E){if(!a.isFile(F.node.mode))throw new a.ErrnoError(43);var d,j,S=F.node.contents;if(!(E&2)&&S.buffer===ox.buffer)j=!1,d=S.byteOffset;else{if(j=!0,d=uA(n),!d)throw new a.ErrnoError(48);S&&((o>0||o+n<S.length)&&(S.subarray?S=S.subarray(o,o+n):S=Array.prototype.slice.call(S,o,o+n)),ox.set(S,d))}return{ptr:d,allocated:j}},msync(F,n,o,f,E){return K.stream_ops.write(F,n,0,f,o,!1),0}}},yA=F=>{if(typeof F!="string")return F;var n={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},o=n[F];if(typeof o>"u")throw new Error(`Unknown file open mode: ${F}`);return o},xA=F=>(typeof F=="string"&&(F=dA(F,!0)),F.subarray||(F=new Uint8Array(F)),F),AA=(F,n)=>{var o=0;return F&&(o|=365),n&&(o|=146),o},y0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},m0={mount(F){return m0.createNode(null,"/",F.opts.fs.lstat(F.opts.root).mode,0)},createNode(F,n,o,f){if(!a.isDir(o)&&!a.isFile(o)&&!a.isLink(o))throw new a.ErrnoError(y0.EINVAL);var E=a.createNode(F,n,o);return E.node_ops=m0.node_ops,E.stream_ops=m0.stream_ops,E},realPath(F){for(var n=[];F.parent!==F;)n.push(F.name),F=F.parent;return n.push(F.mount.opts.root),n.reverse(),o0.join(...n)},node_ops:{getattr(F){var n=m0.realPath(F),o;try{o=F.mount.opts.fs.lstat(n)}catch(f){throw f.code?new a.ErrnoError(y0[f.code]):f}return{dev:o.dev,ino:o.ino,mode:o.mode,nlink:o.nlink,uid:o.uid,gid:o.gid,rdev:o.rdev,size:o.size,atime:o.atime,mtime:o.mtime,ctime:o.ctime,blksize:o.blksize,blocks:o.blocks}},setattr(F,n){var o=m0.realPath(F);try{if(n.mode!==void 0&&(F.mount.opts.fs.chmod(o,n.mode),F.mode=n.mode),n.atime||n.mtime){var f=new Date(n.atime||n.mtime),E=new Date(n.mtime||n.atime);F.mount.opts.fs.utime(o,f,E)}n.size!==void 0&&F.mount.opts.fs.truncate(o,n.size)}catch(d){throw d.code?new a.ErrnoError(y0[d.code]):d}},lookup(F,n){try{var o=o0.join2(m0.realPath(F),n),f=F.mount.opts.fs.lstat(o).mode,E=m0.createNode(F,n,f);return E}catch(d){throw d.code?new a.ErrnoError(y0[d.code]):d}},mknod(F,n,o,f){var E=m0.createNode(F,n,o,f),d=m0.realPath(E);try{a.isDir(E.mode)?E.mount.opts.fs.mkdir(d,E.mode):E.mount.opts.fs.writeFile(d,"",{mode:E.mode})}catch(j){throw j.code?new a.ErrnoError(y0[j.code]):j}return E},rename(F,n,o){var f=m0.realPath(F),E=o0.join2(m0.realPath(n),o);try{F.mount.opts.fs.rename(f,E),F.name=o}catch(d){throw d.code?new a.ErrnoError(y0[d.code]):d}},unlink(F,n){var o=o0.join2(m0.realPath(F),n);try{F.mount.opts.fs.unlink(o)}catch(f){throw f.code?new a.ErrnoError(y0[f.code]):f}},rmdir(F,n){var o=o0.join2(m0.realPath(F),n);try{F.mount.opts.fs.rmdir(o)}catch(f){throw f.code?new a.ErrnoError(y0[f.code]):f}},readdir(F){var n=m0.realPath(F);try{return F.mount.opts.fs.readdir(n)}catch(o){throw o.code?new a.ErrnoError(y0[o.code]):o}},symlink(F,n,o){var f=o0.join2(m0.realPath(F),n);try{F.mount.opts.fs.symlink(o,f)}catch(E){throw E.code?new a.ErrnoError(y0[E.code]):E}},readlink(F){var n=m0.realPath(F);try{return F.mount.opts.fs.readlink(n)}catch(o){throw o.code?new a.ErrnoError(y0[o.code]):o}}},stream_ops:{open(F){var n=m0.realPath(F.node);try{F.nfd=F.node.mount.opts.fs.open(n,F.flags)}catch(o){throw o.code?new a.ErrnoError(y0[o.code]):o}},close(F){try{F.node.mount.opts.fs.close(F.nfd)}catch(n){throw n.code?new a.ErrnoError(y0[n.code]):n}},read(F,n,o,f,E){try{return F.node.mount.opts.fs.read(F.nfd,n,o,f,E)}catch(d){throw d.code?new a.ErrnoError(y0[d.code]):d}},write(F,n,o,f,E){try{return F.node.mount.opts.fs.write(F.nfd,n,o,f,E)}catch(d){throw d.code?new a.ErrnoError(y0[d.code]):d}},llseek(F,n,o){var f=n;if(o===1)f+=F.position;else if(o===2&&a.isFile(F.node.mode))try{var E=F.node.node_ops.getattr(F.node);f+=E.size}catch(d){throw new a.ErrnoError(y0[d.code])}if(f<0)throw new a.ErrnoError(y0.EINVAL);return f}}},DA=async F=>{var n=await _(F);return new Uint8Array(n)},Fe=(...F)=>a.createDataFile(...F),kx=F=>F,tx=0,w0=null,ve=F=>{if(tx--,i.monitorRunDependencies?.(tx),tx==0&&w0){var n=w0;w0=null,n()}},$x=F=>{tx++,i.monitorRunDependencies?.(tx)},GA=[],pA=async(F,n)=>{typeof Browser<"u"&&Browser.init();for(var o of GA)if(o.canHandle(n))return o.handle(F,n);return F},FA=async(F,n,o,f,E,d,j,S)=>{var I=n?Fx.resolve(o0.join2(F,n)):F,Z=kx(`cp ${I}`);$x(Z);try{var d0=o;typeof o=="string"&&(d0=await DA(o)),d0=await pA(d0,I),S?.(),d||Fe(F,n,d0,f,E,j)}finally{ve(Z)}},gr=(F,n,o,f,E,d,j,S,I,Z)=>{FA(F,n,o,f,E,S,I,Z).then(d).catch(j)},a={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(F){ex(this,"name","ErrnoError"),this.errno=F}},FSStream:class{constructor(){ex(this,"shared",{})}get object(){return this.node}set object(F){this.node=F}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(F){this.shared.flags=F}get position(){return this.shared.position}set position(F){this.shared.position=F}},FSNode:class{constructor(F,n,o,f){ex(this,"node_ops",{}),ex(this,"stream_ops",{}),ex(this,"readMode",365),ex(this,"writeMode",146),ex(this,"mounted",null),F||(F=this),this.parent=F,this.mount=F.mount,this.id=a.nextInode++,this.name=n,this.mode=o,this.rdev=f,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(F){F?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(F){F?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return a.isDir(this.mode)}get isDevice(){return a.isChrdev(this.mode)}},lookupPath(F,n={}){if(!F)throw new a.ErrnoError(44);n.follow_mount??(n.follow_mount=!0),o0.isAbs(F)||(F=a.cwd()+"/"+F);x:for(var o=0;o<40;o++){for(var f=F.split("/").filter(Z=>!!Z),E=a.root,d="/",j=0;j<f.length;j++){var S=j===f.length-1;if(S&&n.parent)break;if(f[j]!=="."){if(f[j]===".."){if(d=o0.dirname(d),a.isRoot(E)){F=d+"/"+f.slice(j+1).join("/"),o--;continue x}else E=E.parent;continue}d=o0.join2(d,f[j]);try{E=a.lookupNode(E,f[j])}catch(Z){if(Z?.errno===44&&S&&n.noent_okay)return{path:d};throw Z}if(a.isMountpoint(E)&&(!S||n.follow_mount)&&(E=E.mounted.root),a.isLink(E.mode)&&(!S||n.follow)){if(!E.node_ops.readlink)throw new a.ErrnoError(52);var I=E.node_ops.readlink(E);o0.isAbs(I)||(I=o0.dirname(d)+"/"+I),F=I+"/"+f.slice(j+1).join("/");continue x}}}return{path:d,node:E}}throw new a.ErrnoError(32)},getPath(F){for(var n;;){if(a.isRoot(F)){var o=F.mount.mountpoint;return n?o[o.length-1]!=="/"?`${o}/${n}`:o+n:o}n=n?`${F.name}/${n}`:F.name,F=F.parent}},hashName(F,n){for(var o=0,f=0;f<n.length;f++)o=(o<<5)-o+n.charCodeAt(f)|0;return(F+o>>>0)%a.nameTable.length},hashAddNode(F){var n=a.hashName(F.parent.id,F.name);F.name_next=a.nameTable[n],a.nameTable[n]=F},hashRemoveNode(F){var n=a.hashName(F.parent.id,F.name);if(a.nameTable[n]===F)a.nameTable[n]=F.name_next;else for(var o=a.nameTable[n];o;){if(o.name_next===F){o.name_next=F.name_next;break}o=o.name_next}},lookupNode(F,n){var o=a.mayLookup(F);if(o)throw new a.ErrnoError(o);for(var f=a.hashName(F.id,n),E=a.nameTable[f];E;E=E.name_next){var d=E.name;if(E.parent.id===F.id&&d===n)return E}return a.lookup(F,n)},createNode(F,n,o,f){var E=new a.FSNode(F,n,o,f);return a.hashAddNode(E),E},destroyNode(F){a.hashRemoveNode(F)},isRoot(F){return F===F.parent},isMountpoint(F){return!!F.mounted},isFile(F){return(F&61440)===32768},isDir(F){return(F&61440)===16384},isLink(F){return(F&61440)===40960},isChrdev(F){return(F&61440)===8192},isBlkdev(F){return(F&61440)===24576},isFIFO(F){return(F&61440)===4096},isSocket(F){return(F&49152)===49152},flagsToPermissionString(F){var n=["r","w","rw"][F&3];return F&512&&(n+="w"),n},nodePermissions(F,n){return a.ignorePermissions?0:n.includes("r")&&!(F.mode&292)||n.includes("w")&&!(F.mode&146)||n.includes("x")&&!(F.mode&73)?2:0},mayLookup(F){if(!a.isDir(F.mode))return 54;var n=a.nodePermissions(F,"x");return n||(F.node_ops.lookup?0:2)},mayCreate(F,n){if(!a.isDir(F.mode))return 54;try{var o=a.lookupNode(F,n);return 20}catch{}return a.nodePermissions(F,"wx")},mayDelete(F,n,o){var f;try{f=a.lookupNode(F,n)}catch(d){return d.errno}var E=a.nodePermissions(F,"wx");if(E)return E;if(o){if(!a.isDir(f.mode))return 54;if(a.isRoot(f)||a.getPath(f)===a.cwd())return 10}else if(a.isDir(f.mode))return 31;return 0},mayOpen(F,n){if(!F)return 44;if(a.isLink(F.mode))return 32;var o=a.flagsToPermissionString(n);return a.isDir(F.mode)&&(o!=="r"||n&576)?31:a.nodePermissions(F,o)},checkOpExists(F,n){if(!F)throw new a.ErrnoError(n);return F},MAX_OPEN_FDS:4096,nextfd(){for(var F=0;F<=a.MAX_OPEN_FDS;F++)if(!a.streams[F])return F;throw new a.ErrnoError(33)},getStreamChecked(F){var n=a.getStream(F);if(!n)throw new a.ErrnoError(8);return n},getStream:F=>a.streams[F],createStream(F,n=-1){return F=Object.assign(new a.FSStream,F),n==-1&&(n=a.nextfd()),F.fd=n,a.streams[n]=F,F},closeStream(F){a.streams[F]=null},dupStream(F,n=-1){var o=a.createStream(F,n);return o.stream_ops?.dup?.(o),o},doSetAttr(F,n,o){var f=F?.stream_ops.setattr,E=f?F:n;f??(f=n.node_ops.setattr),a.checkOpExists(f,63);try{f(E,o)}catch(d){throw d instanceof RangeError?new a.ErrnoError(22):d}},chrdev_stream_ops:{open(F){var n=a.getDevice(F.node.rdev);F.stream_ops=n.stream_ops,F.stream_ops.open?.(F)},llseek(){throw new a.ErrnoError(70)}},major:F=>F>>8,minor:F=>F&255,makedev:(F,n)=>F<<8|n,registerDevice(F,n){a.devices[F]={stream_ops:n}},getDevice:F=>a.devices[F],getMounts(F){for(var n=[],o=[F];o.length;){var f=o.pop();n.push(f),o.push(...f.mounts)}return n},syncfs(F,n){typeof F=="function"&&(n=F,F=!1),a.syncFSRequests++,a.syncFSRequests>1&&N(`warning: ${a.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var o=a.getMounts(a.root.mount),f=0;function E(S){return a.syncFSRequests--,n(S)}function d(S){if(S)return d.errored?void 0:(d.errored=!0,E(S));++f>=o.length&&E(null)}for(var j of o)j.type.syncfs?j.type.syncfs(j,F,d):d(null)},mount(F,n,o){var f=o==="/",E=!o,d;if(f&&a.root)throw new a.ErrnoError(10);if(!f&&!E){var j=a.lookupPath(o,{follow_mount:!1});if(o=j.path,d=j.node,a.isMountpoint(d))throw new a.ErrnoError(10);if(!a.isDir(d.mode))throw new a.ErrnoError(54)}var S={type:F,opts:n,mountpoint:o,mounts:[]},I=F.mount(S);return I.mount=S,S.root=I,f?a.root=I:d&&(d.mounted=S,d.mount&&d.mount.mounts.push(S)),I},unmount(F){var n=a.lookupPath(F,{follow_mount:!1});if(!a.isMountpoint(n.node))throw new a.ErrnoError(28);var o=n.node,f=o.mounted,E=a.getMounts(f);for(var[d,j]of Object.entries(a.nameTable))for(;j;){var S=j.name_next;E.includes(j.mount)&&a.destroyNode(j),j=S}o.mounted=null;var I=o.mount.mounts.indexOf(f);o.mount.mounts.splice(I,1)},lookup(F,n){return F.node_ops.lookup(F,n)},mknod(F,n,o){var f=a.lookupPath(F,{parent:!0}),E=f.node,d=o0.basename(F);if(!d)throw new a.ErrnoError(28);if(d==="."||d==="..")throw new a.ErrnoError(20);var j=a.mayCreate(E,d);if(j)throw new a.ErrnoError(j);if(!E.node_ops.mknod)throw new a.ErrnoError(63);return E.node_ops.mknod(E,d,n,o)},statfs(F){return a.statfsNode(a.lookupPath(F,{follow:!0}).node)},statfsStream(F){return a.statfsNode(F.node)},statfsNode(F){var n={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:a.nextInode,ffree:a.nextInode-1,fsid:42,flags:2,namelen:255};return F.node_ops.statfs&&Object.assign(n,F.node_ops.statfs(F.mount.opts.root)),n},create(F,n=438){return n&=4095,n|=32768,a.mknod(F,n,0)},mkdir(F,n=511){return n&=1023,n|=16384,a.mknod(F,n,0)},mkdirTree(F,n){var o=F.split("/"),f="";for(var E of o)if(E){(f||o0.isAbs(F))&&(f+="/"),f+=E;try{a.mkdir(f,n)}catch(d){if(d.errno!=20)throw d}}},mkdev(F,n,o){return typeof o>"u"&&(o=n,n=438),n|=8192,a.mknod(F,n,o)},symlink(F,n){if(!Fx.resolve(F))throw new a.ErrnoError(44);var o=a.lookupPath(n,{parent:!0}),f=o.node;if(!f)throw new a.ErrnoError(44);var E=o0.basename(n),d=a.mayCreate(f,E);if(d)throw new a.ErrnoError(d);if(!f.node_ops.symlink)throw new a.ErrnoError(63);return f.node_ops.symlink(f,E,F)},rename(F,n){var o=o0.dirname(F),f=o0.dirname(n),E=o0.basename(F),d=o0.basename(n),j,S,I;if(j=a.lookupPath(F,{parent:!0}),S=j.node,j=a.lookupPath(n,{parent:!0}),I=j.node,!S||!I)throw new a.ErrnoError(44);if(S.mount!==I.mount)throw new a.ErrnoError(75);var Z=a.lookupNode(S,E),d0=Fx.relative(F,f);if(d0.charAt(0)!==".")throw new a.ErrnoError(28);if(d0=Fx.relative(n,o),d0.charAt(0)!==".")throw new a.ErrnoError(55);var g0;try{g0=a.lookupNode(I,d)}catch{}if(Z!==g0){var u0=a.isDir(Z.mode),E0=a.mayDelete(S,E,u0);if(E0)throw new a.ErrnoError(E0);if(E0=g0?a.mayDelete(I,d,u0):a.mayCreate(I,d),E0)throw new a.ErrnoError(E0);if(!S.node_ops.rename)throw new a.ErrnoError(63);if(a.isMountpoint(Z)||g0&&a.isMountpoint(g0))throw new a.ErrnoError(10);if(I!==S&&(E0=a.nodePermissions(S,"w"),E0))throw new a.ErrnoError(E0);a.hashRemoveNode(Z);try{S.node_ops.rename(Z,I,d),Z.parent=I}catch(B0){throw B0}finally{a.hashAddNode(Z)}}},rmdir(F){var n=a.lookupPath(F,{parent:!0}),o=n.node,f=o0.basename(F),E=a.lookupNode(o,f),d=a.mayDelete(o,f,!0);if(d)throw new a.ErrnoError(d);if(!o.node_ops.rmdir)throw new a.ErrnoError(63);if(a.isMountpoint(E))throw new a.ErrnoError(10);o.node_ops.rmdir(o,f),a.destroyNode(E)},readdir(F){var n=a.lookupPath(F,{follow:!0}),o=n.node,f=a.checkOpExists(o.node_ops.readdir,54);return f(o)},unlink(F){var n=a.lookupPath(F,{parent:!0}),o=n.node;if(!o)throw new a.ErrnoError(44);var f=o0.basename(F),E=a.lookupNode(o,f),d=a.mayDelete(o,f,!1);if(d)throw new a.ErrnoError(d);if(!o.node_ops.unlink)throw new a.ErrnoError(63);if(a.isMountpoint(E))throw new a.ErrnoError(10);o.node_ops.unlink(o,f),a.destroyNode(E)},readlink(F){var n=a.lookupPath(F),o=n.node;if(!o)throw new a.ErrnoError(44);if(!o.node_ops.readlink)throw new a.ErrnoError(28);return o.node_ops.readlink(o)},stat(F,n){var o=a.lookupPath(F,{follow:!n}),f=o.node,E=a.checkOpExists(f.node_ops.getattr,63);return E(f)},fstat(F){var n=a.getStreamChecked(F),o=n.node,f=n.stream_ops.getattr,E=f?n:o;return f??(f=o.node_ops.getattr),a.checkOpExists(f,63),f(E)},lstat(F){return a.stat(F,!0)},doChmod(F,n,o,f){a.doSetAttr(F,n,{mode:o&4095|n.mode&-4096,ctime:Date.now(),dontFollow:f})},chmod(F,n,o){var f;if(typeof F=="string"){var E=a.lookupPath(F,{follow:!o});f=E.node}else f=F;a.doChmod(null,f,n,o)},lchmod(F,n){a.chmod(F,n,!0)},fchmod(F,n){var o=a.getStreamChecked(F);a.doChmod(o,o.node,n,!1)},doChown(F,n,o){a.doSetAttr(F,n,{timestamp:Date.now(),dontFollow:o})},chown(F,n,o,f){var E;if(typeof F=="string"){var d=a.lookupPath(F,{follow:!f});E=d.node}else E=F;a.doChown(null,E,f)},lchown(F,n,o){a.chown(F,n,o,!0)},fchown(F,n,o){var f=a.getStreamChecked(F);a.doChown(f,f.node,!1)},doTruncate(F,n,o){if(a.isDir(n.mode))throw new a.ErrnoError(31);if(!a.isFile(n.mode))throw new a.ErrnoError(28);var f=a.nodePermissions(n,"w");if(f)throw new a.ErrnoError(f);a.doSetAttr(F,n,{size:o,timestamp:Date.now()})},truncate(F,n){if(n<0)throw new a.ErrnoError(28);var o;if(typeof F=="string"){var f=a.lookupPath(F,{follow:!0});o=f.node}else o=F;a.doTruncate(null,o,n)},ftruncate(F,n){var o=a.getStreamChecked(F);if(n<0||(o.flags&2097155)===0)throw new a.ErrnoError(28);a.doTruncate(o,o.node,n)},utime(F,n,o){var f=a.lookupPath(F,{follow:!0}),E=f.node,d=a.checkOpExists(E.node_ops.setattr,63);d(E,{atime:n,mtime:o})},open(F,n,o=438){if(F==="")throw new a.ErrnoError(44);n=yA(n),n&64?o=o&4095|32768:o=0;var f,E;if(typeof F=="object")f=F;else{E=F.endsWith("/");var d=a.lookupPath(F,{follow:!(n&131072),noent_okay:!0});f=d.node,F=d.path}var j=!1;if(n&64)if(f){if(n&128)throw new a.ErrnoError(20)}else{if(E)throw new a.ErrnoError(31);f=a.mknod(F,o|511,0),j=!0}if(!f)throw new a.ErrnoError(44);if(a.isChrdev(f.mode)&&(n&=-513),n&65536&&!a.isDir(f.mode))throw new a.ErrnoError(54);if(!j){var S=a.mayOpen(f,n);if(S)throw new a.ErrnoError(S)}n&512&&!j&&a.truncate(f,0),n&=-131713;var I=a.createStream({node:f,path:a.getPath(f),flags:n,seekable:!0,position:0,stream_ops:f.stream_ops,ungotten:[],error:!1});return I.stream_ops.open&&I.stream_ops.open(I),j&&a.chmod(f,o&511),I},close(F){if(a.isClosed(F))throw new a.ErrnoError(8);F.getdents&&(F.getdents=null);try{F.stream_ops.close&&F.stream_ops.close(F)}catch(n){throw n}finally{a.closeStream(F.fd)}F.fd=null},isClosed(F){return F.fd===null},llseek(F,n,o){if(a.isClosed(F))throw new a.ErrnoError(8);if(!F.seekable||!F.stream_ops.llseek)throw new a.ErrnoError(70);if(o!=0&&o!=1&&o!=2)throw new a.ErrnoError(28);return F.position=F.stream_ops.llseek(F,n,o),F.ungotten=[],F.position},read(F,n,o,f,E){if(f<0||E<0)throw new a.ErrnoError(28);if(a.isClosed(F))throw new a.ErrnoError(8);if((F.flags&2097155)===1)throw new a.ErrnoError(8);if(a.isDir(F.node.mode))throw new a.ErrnoError(31);if(!F.stream_ops.read)throw new a.ErrnoError(28);var d=typeof E<"u";if(!d)E=F.position;else if(!F.seekable)throw new a.ErrnoError(70);var j=F.stream_ops.read(F,n,o,f,E);return d||(F.position+=j),j},write(F,n,o,f,E,d){if(f<0||E<0)throw new a.ErrnoError(28);if(a.isClosed(F))throw new a.ErrnoError(8);if((F.flags&2097155)===0)throw new a.ErrnoError(8);if(a.isDir(F.node.mode))throw new a.ErrnoError(31);if(!F.stream_ops.write)throw new a.ErrnoError(28);F.seekable&&F.flags&1024&&a.llseek(F,0,2);var j=typeof E<"u";if(!j)E=F.position;else if(!F.seekable)throw new a.ErrnoError(70);var S=F.stream_ops.write(F,n,o,f,E,d);return j||(F.position+=S),S},mmap(F,n,o,f,E){if((f&2)!==0&&(E&2)===0&&(F.flags&2097155)!==2)throw new a.ErrnoError(2);if((F.flags&2097155)===1)throw new a.ErrnoError(2);if(!F.stream_ops.mmap)throw new a.ErrnoError(43);if(!n)throw new a.ErrnoError(28);return F.stream_ops.mmap(F,n,o,f,E)},msync(F,n,o,f,E){return F.stream_ops.msync?F.stream_ops.msync(F,n,o,f,E):0},ioctl(F,n,o){if(!F.stream_ops.ioctl)throw new a.ErrnoError(59);return F.stream_ops.ioctl(F,n,o)},readFile(F,n={}){n.flags=n.flags||0,n.encoding=n.encoding||"binary",n.encoding!=="utf8"&&n.encoding!=="binary"&&U(`Invalid encoding type "${n.encoding}"`);var o=a.open(F,n.flags),f=a.stat(F),E=f.size,d=new Uint8Array(E);return a.read(o,d,0,E,0),n.encoding==="utf8"&&(d=Px(d)),a.close(o),d},writeFile(F,n,o={}){o.flags=o.flags||577;var f=a.open(F,o.flags,o.mode);n=xA(n),a.write(f,n,0,n.byteLength,void 0,o.canOwn),a.close(f)},cwd:()=>a.currentPath,chdir(F){var n=a.lookupPath(F,{follow:!0});if(n.node===null)throw new a.ErrnoError(44);if(!a.isDir(n.node.mode))throw new a.ErrnoError(54);var o=a.nodePermissions(n.node,"x");if(o)throw new a.ErrnoError(o);a.currentPath=n.path},createDefaultDirectories(){a.mkdir("/tmp"),a.mkdir("/home"),a.mkdir("/home/web_user")},createDefaultDevices(){a.mkdir("/dev"),a.registerDevice(a.makedev(1,3),{read:()=>0,write:(f,E,d,j,S)=>j,llseek:()=>0}),a.mkdev("/dev/null",a.makedev(1,3)),V0.register(a.makedev(5,0),V0.default_tty_ops),V0.register(a.makedev(6,0),V0.default_tty1_ops),a.mkdev("/dev/tty",a.makedev(5,0)),a.mkdev("/dev/tty1",a.makedev(6,0));var F=new Uint8Array(1024),n=0,o=()=>(n===0&&(ae(F),n=F.byteLength),F[--n]);a.createDevice("/dev","random",o),a.createDevice("/dev","urandom",o),a.mkdir("/dev/shm"),a.mkdir("/dev/shm/tmp")},createSpecialDirectories(){a.mkdir("/proc");var F=a.mkdir("/proc/self");a.mkdir("/proc/self/fd"),a.mount({mount(){var n=a.createNode(F,"fd",16895,73);return n.stream_ops={llseek:K.stream_ops.llseek},n.node_ops={lookup(o,f){var E=+f,d=a.getStreamChecked(E),j={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>d.path},id:E+1};return j.parent=j,j},readdir(){return Array.from(a.streams.entries()).filter(([o,f])=>f).map(([o,f])=>o.toString())}},n}},{},"/proc/self/fd")},createStandardStreams(F,n,o){F?a.createDevice("/dev","stdin",F):a.symlink("/dev/tty","/dev/stdin"),n?a.createDevice("/dev","stdout",null,n):a.symlink("/dev/tty","/dev/stdout"),o?a.createDevice("/dev","stderr",null,o):a.symlink("/dev/tty1","/dev/stderr");var f=a.open("/dev/stdin",0),E=a.open("/dev/stdout",1),d=a.open("/dev/stderr",1)},staticInit(){a.nameTable=new Array(4096),a.mount(K,{},"/"),a.createDefaultDirectories(),a.createDefaultDevices(),a.createSpecialDirectories(),a.filesystems={MEMFS:K,PROXYFS:m0}},init(F,n,o){a.initialized=!0,F??(F=i.stdin),n??(n=i.stdout),o??(o=i.stderr),a.createStandardStreams(F,n,o)},quit(){a.initialized=!1;for(var F of a.streams)F&&a.close(F)},findObject(F,n){var o=a.analyzePath(F,n);return o.exists?o.object:null},analyzePath(F,n){try{var o=a.lookupPath(F,{follow:!n});F=o.path}catch{}var f={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var o=a.lookupPath(F,{parent:!0});f.parentExists=!0,f.parentPath=o.path,f.parentObject=o.node,f.name=o0.basename(F),o=a.lookupPath(F,{follow:!n}),f.exists=!0,f.path=o.path,f.object=o.node,f.name=o.node.name,f.isRoot=o.path==="/"}catch(E){f.error=E.errno}return f},createPath(F,n,o,f){F=typeof F=="string"?F:a.getPath(F);for(var E=n.split("/").reverse();E.length;){var d=E.pop();if(d){var j=o0.join2(F,d);try{a.mkdir(j)}catch(S){if(S.errno!=20)throw S}F=j}}return j},createFile(F,n,o,f,E){var d=o0.join2(typeof F=="string"?F:a.getPath(F),n),j=AA(f,E);return a.create(d,j)},createDataFile(F,n,o,f,E,d){var j=n;F&&(F=typeof F=="string"?F:a.getPath(F),j=n?o0.join2(F,n):F);var S=AA(f,E),I=a.create(j,S);if(o){o=xA(o),a.chmod(I,S|146);var Z=a.open(I,577);a.write(Z,o,0,o.length,0,d),a.close(Z),a.chmod(I,S)}},createDevice(F,n,o,f){var E,d=o0.join2(typeof F=="string"?F:a.getPath(F),n),j=AA(!!o,!!f);(E=a.createDevice).major??(E.major=64);var S=a.makedev(a.createDevice.major++,0);return a.registerDevice(S,{open(I){I.seekable=!1},close(I){f?.buffer?.length&&f(10)},read(I,Z,d0,g0,u0){for(var E0=0,B0=0;B0<g0;B0++){var M0;try{M0=o()}catch{throw new a.ErrnoError(29)}if(M0===void 0&&E0===0)throw new a.ErrnoError(6);if(M0==null)break;E0++,Z[d0+B0]=M0}return E0&&(I.node.atime=Date.now()),E0},write(I,Z,d0,g0,u0){for(var E0=0;E0<g0;E0++)try{f(Z[d0+E0])}catch{throw new a.ErrnoError(29)}return g0&&(I.node.mtime=I.node.ctime=Date.now()),E0}}),a.mkdev(d,j,S)},forceLoadFile(F){if(F.isDevice||F.isFolder||F.link||F.contents)return!0;if(globalThis.XMLHttpRequest)U("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{F.contents=$(F.url)}catch{throw new a.ErrnoError(29)}},createLazyFile(F,n,o,f,E){class d{constructor(){ex(this,"lengthKnown",!1),ex(this,"chunks",[])}get(u0){if(!(u0>this.length-1||u0<0)){var E0=u0%this.chunkSize,B0=u0/this.chunkSize|0;return this.getter(B0)[E0]}}setDataGetter(u0){this.getter=u0}cacheLength(){var u0=new XMLHttpRequest;u0.open("HEAD",o,!1),u0.send(null),u0.status>=200&&u0.status<300||u0.status===304||U("Couldn't load "+o+". Status: "+u0.status);var E0=Number(u0.getResponseHeader("Content-length")),B0,M0=(B0=u0.getResponseHeader("Accept-Ranges"))&&B0==="bytes",xx=(B0=u0.getResponseHeader("Content-Encoding"))&&B0==="gzip",Ex=1024*1024;M0||(Ex=E0);var Dx=(Ux,Ix)=>{Ux>Ix&&U("invalid range ("+Ux+", "+Ix+") or no bytes requested!"),Ix>E0-1&&U("only "+E0+" bytes available! programmer error!");var Bx=new XMLHttpRequest;return Bx.open("GET",o,!1),E0!==Ex&&Bx.setRequestHeader("Range","bytes="+Ux+"-"+Ix),Bx.responseType="arraybuffer",Bx.overrideMimeType&&Bx.overrideMimeType("text/plain; charset=x-user-defined"),Bx.send(null),Bx.status>=200&&Bx.status<300||Bx.status===304||U("Couldn't load "+o+". Status: "+Bx.status),Bx.response!==void 0?new Uint8Array(Bx.response||[]):dA(Bx.responseText||"",!0)},Nx=this;Nx.setDataGetter(Ux=>{var Ix=Ux*Ex,Bx=(Ux+1)*Ex-1;return Bx=Math.min(Bx,E0-1),typeof Nx.chunks[Ux]>"u"&&(Nx.chunks[Ux]=Dx(Ix,Bx)),typeof Nx.chunks[Ux]>"u"&&U("doXHR failed!"),Nx.chunks[Ux]}),(xx||!E0)&&(Ex=E0=1,E0=this.getter(0).length,Ex=E0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=E0,this._chunkSize=Ex,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){c||U("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var j=new d,S={isDevice:!1,contents:j}}else var S={isDevice:!1,url:o};var I=a.createFile(F,n,S,f,E);S.contents?I.contents=S.contents:S.url&&(I.contents=null,I.url=S.url),Object.defineProperties(I,{usedBytes:{get:function(){return this.contents.length}}});var Z={};for(let[g0,u0]of Object.entries(I.stream_ops))Z[g0]=(...E0)=>(a.forceLoadFile(I),u0(...E0));function d0(g0,u0,E0,B0,M0){var xx=g0.node.contents;if(M0>=xx.length)return 0;var Ex=Math.min(xx.length-M0,B0);if(xx.slice)for(var Dx=0;Dx<Ex;Dx++)u0[E0+Dx]=xx[M0+Dx];else for(var Dx=0;Dx<Ex;Dx++)u0[E0+Dx]=xx.get(M0+Dx);return Ex}return Z.read=(g0,u0,E0,B0,M0)=>(a.forceLoadFile(I),d0(g0,u0,E0,B0,M0)),Z.mmap=(g0,u0,E0,B0,M0)=>{a.forceLoadFile(I);var xx=uA(u0);if(!xx)throw new a.ErrnoError(48);return d0(g0,ox,xx,u0,E0),{ptr:xx,allocated:!0}},I.stream_ops=Z,I}},h0={currentUmask:18,calculateAt(F,n,o){if(o0.isAbs(n))return n;var f;if(F===-100)f=a.cwd();else{var E=h0.getStreamFromFD(F);f=E.path}if(n.length==0){if(!o)throw new a.ErrnoError(44);return f}return f+"/"+n},writeStat(F,n){N0[F>>2]=n.dev,N0[F+4>>2]=n.mode,N0[F+8>>2]=n.nlink,N0[F+12>>2]=n.uid,N0[F+16>>2]=n.gid,N0[F+20>>2]=n.rdev,G0[F+24>>3]=BigInt(n.size),H0[F+32>>2]=4096,H0[F+36>>2]=n.blocks;var o=n.atime.getTime(),f=n.mtime.getTime(),E=n.ctime.getTime();return G0[F+40>>3]=BigInt(Math.floor(o/1e3)),N0[F+48>>2]=o%1e3*1e3*1e3,G0[F+56>>3]=BigInt(Math.floor(f/1e3)),N0[F+64>>2]=f%1e3*1e3*1e3,G0[F+72>>3]=BigInt(Math.floor(E/1e3)),N0[F+80>>2]=E%1e3*1e3*1e3,G0[F+88>>3]=BigInt(n.ino),0},writeStatFs(F,n){N0[F+4>>2]=n.bsize,N0[F+60>>2]=n.bsize,G0[F+8>>3]=BigInt(n.blocks),G0[F+16>>3]=BigInt(n.bfree),G0[F+24>>3]=BigInt(n.bavail),G0[F+32>>3]=BigInt(n.files),G0[F+40>>3]=BigInt(n.ffree),N0[F+48>>2]=n.fsid,N0[F+64>>2]=n.flags,N0[F+56>>2]=n.namelen},doMsync(F,n,o,f,E){if(!a.isFile(n.node.mode))throw new a.ErrnoError(43);if(f&2)return 0;var d=OA.slice(F,F+o);a.msync(n,d,E,o,f)},getStreamFromFD(F){var n=a.getStreamChecked(F);return n},varargs:void 0,getStr(F){var n=lx(F);return n}};function we(F,n,o){h0.varargs=o;try{var f=h0.getStreamFromFD(F);switch(n){case 0:{var E=zx();if(E<0)return-28;for(;a.streams[E];)E++;var d;return d=a.dupStream(f,E),d.fd}case 1:case 2:return 0;case 3:return f.flags;case 4:{var E=zx(),j=289792;return f.flags=f.flags&~j|E&j,0}case 12:{var E=Vx(),S=0;return Kx[E+S>>1]=2,0}case 13:case 14:return 0}return-28}catch(I){if(typeof a>"u"||I.name!=="ErrnoError")throw I;return-I.errno}}function _A(F,n,o){h0.varargs=o;try{var f=h0.getStreamFromFD(F);switch(n){case 21509:return f.tty?0:-59;case 21505:{if(!f.tty)return-59;if(f.tty.ops.ioctl_tcgets){var E=f.tty.ops.ioctl_tcgets(f),d=Vx();H0[d>>2]=E.c_iflag||0,H0[d+4>>2]=E.c_oflag||0,H0[d+8>>2]=E.c_cflag||0,H0[d+12>>2]=E.c_lflag||0;for(var j=0;j<32;j++)ox[d+j+17]=E.c_cc[j]||0;return 0}return 0}case 21510:case 21511:case 21512:return f.tty?0:-59;case 21506:case 21507:case 21508:{if(!f.tty)return-59;if(f.tty.ops.ioctl_tcsets){for(var d=Vx(),S=H0[d>>2],I=H0[d+4>>2],Z=H0[d+8>>2],d0=H0[d+12>>2],g0=[],j=0;j<32;j++)g0.push(ox[d+j+17]);return f.tty.ops.ioctl_tcsets(f.tty,n,{c_iflag:S,c_oflag:I,c_cflag:Z,c_lflag:d0,c_cc:g0})}return 0}case 21519:{if(!f.tty)return-59;var d=Vx();return H0[d>>2]=0,0}case 21520:return f.tty?-28:-59;case 21537:case 21531:{var d=Vx();return a.ioctl(f,n,d)}case 21523:{if(!f.tty)return-59;if(f.tty.ops.ioctl_tiocgwinsz){var u0=f.tty.ops.ioctl_tiocgwinsz(f.tty),d=Vx();Kx[d>>1]=u0[0],Kx[d+2>>1]=u0[1]}return 0}case 21524:return f.tty?0:-59;case 21515:return f.tty?0:-59;default:return-28}}catch(E0){if(typeof a>"u"||E0.name!=="ErrnoError")throw E0;return-E0.errno}}function bA(F,n,o,f){h0.varargs=f;try{n=h0.getStr(n),n=h0.calculateAt(F,n);var E=f?zx():0;return o&64&&(E&=~h0.currentUmask),a.open(n,o,E).fd}catch(d){if(typeof a>"u"||d.name!=="ErrnoError")throw d;return-d.errno}}var kr=()=>2147483648,fe=(F,n)=>Math.ceil(F/n)*n,Qe=F=>{var n=Pe.buffer.byteLength,o=(F-n+65535)/65536|0;try{return Pe.grow(o),n0(),1}catch{}},Ze=F=>{var n=OA.length;F>>>=0;var o=kr();if(F>o)return!1;for(var f=1;f<=4;f*=2){var E=n*(1+.2/f);E=Math.min(E,F+100663296);var d=Math.min(o,fe(Math.max(F,E),65536)),j=Qe(d);if(j)return!0}return!1};function yr(F){try{var n=h0.getStreamFromFD(F);return a.close(n),0}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return o.errno}}var _r=(F,n,o,f)=>{for(var E=0,d=0;d<o;d++){var j=N0[n>>2],S=N0[n+4>>2];n+=8;var I=a.read(F,ox,j,S,f);if(I<0)return-1;if(E+=I,I<S)break;typeof f<"u"&&(f+=I)}return E};function wr(F,n,o,f){try{var E=h0.getStreamFromFD(F),d=_r(E,n,o);return N0[f>>2]=d,0}catch(j){if(typeof a>"u"||j.name!=="ErrnoError")throw j;return j.errno}}var le=9007199254740992,xr=-9007199254740992,UA=F=>F<xr||F>le?NaN:Number(F);function ce(F,n,o,f){n=UA(n);try{if(isNaN(n))return 22;var E=h0.getStreamFromFD(F);return a.llseek(E,n,o),G0[f>>3]=BigInt(E.position),E.getdents&&n===0&&o===0&&(E.getdents=null),0}catch(d){if(typeof a>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var Sr=(F,n,o,f)=>{for(var E=0,d=0;d<o;d++){var j=N0[n>>2],S=N0[n+4>>2];n+=8;var I=a.write(F,ox,j,S,f);if(I<0)return-1;if(E+=I,I<S)break;typeof f<"u"&&(f+=I)}return E};function Ar(F,n,o,f){try{var E=h0.getStreamFromFD(F),d=Sr(E,n,o);return N0[f>>2]=d,0}catch(j){if(typeof a>"u"||j.name!=="ErrnoError")throw j;return j.errno}}var er=F=>{var n=i["_"+F];return n},HA=(F,n)=>{ox.set(F,n)},Ee=(F,n,o)=>oe(F,OA,n,o),Se=F=>ux(F),rr=F=>{var n=CA(F)+1,o=Se(n);return Ee(F,o,n),o},tr=(F,n,o,f,E)=>{var d={string:B0=>{var M0=0;return B0!=null&&B0!==0&&(M0=rr(B0)),M0},array:B0=>{var M0=Se(B0.length);return HA(B0,M0),M0}};function j(B0){return n==="string"?lx(B0):n==="boolean"?!!B0:B0}var S=er(F),I=[],Z=0;if(f)for(var d0=0;d0<f.length;d0++){var g0=d[o[d0]];g0?(Z===0&&(Z=se()),I[d0]=g0(f[d0])):I[d0]=f[d0]}var u0=S(...I);function E0(B0){return Z!==0&&Ye(Z),j(B0)}return u0=E0(u0),u0},nr=(F,n,o,f)=>{var E=!o||o.every(j=>j==="number"||j==="boolean"),d=n!=="string";return d&&E&&!f?er(F):(...j)=>tr(F,n,o,j,f)},qr=(...F)=>a.createPath(...F),Tr=(...F)=>a.unlink(...F),Be=(...F)=>a.createLazyFile(...F),Pr=(...F)=>a.createDevice(...F);if(a.createPreloadedFile=gr,a.preloadFile=FA,a.staticInit(),i.noExitRuntime&&(Xe=i.noExitRuntime),i.preloadPlugins&&(GA=i.preloadPlugins),i.print&&(M=i.print),i.printErr&&(N=i.printErr),i.wasmBinary&&(z=i.wasmBinary),i.arguments&&(b=i.arguments),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();i.addRunDependency=$x,i.removeRunDependency=ve,i.ccall=tr,i.cwrap=nr,i.setValue=aA,i.getValue=kA,i.UTF8ToString=lx,i.stringToUTF8=Ee,i.lengthBytesUTF8=CA,i.FS_preloadFile=FA,i.FS_unlink=Tr,i.FS_createPath=qr,i.FS_createDevice=Pr,i.FS=a,i.FS_createDataFile=Fe,i.FS_createLazyFile=Be,i.PROXYFS=m0;function $r(){return typeof i.__prDispatch=="function"?1:0}function ir(F,n,o,f){return i.__prDispatch(F,n,o,f)|0}function sr(F,n){return typeof i<"u"&&typeof i.__prDebugOut=="function"?(i.__prDebugOut(F,n),n):0}var JA,ar,KA,qe,Ox,Nr,wA,zA,Te,yx,Ce,VA,l,B,p,h,w,P,J,Q,l0,k0,Z0,J0,O0,q0,cx,wx,Gx,Wx,Xx,WA,eA,vA,ux,Ir,St,qt,Pe;function Tt(F){JA=i._pr_set_limits=F.pr_set_limits,ar=i._pr_set_budget=F.pr_set_budget,KA=i._pr_close=F.pr_close,qe=i._free=F.free,Ox=i._pr_reset_run_state=F.pr_reset_run_state,Nr=i._pr_open=F.pr_open,wA=i._pr_num_natives=F.pr_num_natives,zA=i._pr_native_name=F.pr_native_name,Te=i._pr_register_all=F.pr_register_all,yx=i._pr_num_publics=F.pr_num_publics,Ce=i._pr_public_name=F.pr_public_name,VA=i._pr_find_public=F.pr_find_public,l=i._pr_exec=F.pr_exec,B=i._pr_last_error=F.pr_last_error,p=i._pr_last_cip=F.pr_last_cip,h=i._pr_last_frm=F.pr_last_frm,w=i._pr_get_budget_used=F.pr_get_budget_used,P=i._pr_raise_error=F.pr_raise_error,J=i._pr_verify_addr=F.pr_verify_addr,Q=i._pr_addr=F.pr_addr,l0=i._pr_data_size=F.pr_data_size,k0=i._pr_heap_alloc=F.pr_heap_alloc,Z0=i._pr_read_cell=F.pr_read_cell,J0=i._pr_write_cell=F.pr_write_cell,O0=i._pr_read_cells=F.pr_read_cells,q0=i._pr_write_cells=F.pr_write_cells,cx=i._pr_read_packed=F.pr_read_packed,wx=i._pr_write_packed=F.pr_write_packed,Gx=i._pr_read_cstring=F.pr_read_cstring,Wx=i._malloc=F.malloc,Xx=i._pr_get_virtual_us=F.pr_get_virtual_us,WA=i._pr_set_virtual_us=F.pr_set_virtual_us,eA=i._pr_set_rand_seed=F.pr_set_rand_seed,vA=F._emscripten_stack_restore,ux=F._emscripten_stack_alloc,Ir=F.emscripten_stack_get_current,St=Pe=F.memory,qt=F.__indirect_function_table}var tt={__assert_fail:BA,__syscall_fcntl64:we,__syscall_ioctl:_A,__syscall_openat:bA,emscripten_resize_heap:Ze,fd_close:yr,fd_read:wr,fd_seek:ce,fd_write:Ar,pr_debug_out:sr,pr_js_dispatch:ir,pr_js_has_dispatch:$r};function or(){if(tx>0){w0=or;return}if(r0(),tx>0){w0=or;return}function F(){i.calledRun=!0,!F0&&(x0(),Y?.(i),i.onRuntimeInitialized?.(),f0())}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),F()},1)):F()}var XA;return XA=await iA(),or(),W?s=i:s=new Promise((F,n)=>{Y=F,H=n}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),gF={};$B(gF,{createPawnCC:()=>UB,createPawnDbg:()=>HB,createPawnRun:()=>JB});kF.exports=NB(gF);var LB=ns(IB(),1),OB=ns(MB(),1),GB=ns(RB(),1),UB=LB.default,HB=OB.default,JB=GB.default});var Br=Do((Dh,ef)=>{"use strict";var eC=Object.create,zt=Object.defineProperty,rC=Object.getOwnPropertyDescriptor,F8=Object.getOwnPropertyNames,tC=Object.getPrototypeOf,nC=Object.prototype.hasOwnProperty,iC=(x,A,e)=>A in x?zt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,sC=(x,A)=>function(){try{return A||(0,x[F8(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},aC=(x,A)=>{for(var e in A)zt(x,e,{get:A[e],enumerable:!0})},v8=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of F8(A))!nC.call(x,t)&&t!==e&&zt(x,t,{get:()=>A[t],enumerable:!(r=rC(A,t))||r.enumerable});return x},oC=(x,A,e)=>(e=x!=null?eC(tC(x)):{},v8(A||!x||!x.__esModule?zt(e,"default",{value:x,enumerable:!0}):e,x)),FC=x=>v8(zt({},"__esModule",{value:!0}),x),i0=(x,A,e)=>iC(x,typeof A!="symbol"?A+"":A,e),vC=sC({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s;(function(){function C(a0){a0=a0.split("-")[0];for(var D0=a0.split(".").slice(0,3);D0.length<3;)D0.push("00");return D0=D0.map((S0,vx,sx)=>S0.padStart(2,"0")),D0.join("")}var D=a0=>[a0/1e4|0,(a0/100|0)%100,a0%100].join("."),y=2147483647,R=typeof process<"u"&&process.versions?.node?C(process.versions.node):y;if(R<180300)throw new Error(`This emscripten-generated code requires node v${D(180300)} (detected v${D(R)})`);var G=typeof navigator<"u"&&navigator.userAgent;if(G){var e0=G.includes("Safari/")&&!G.includes("Chrome/")&&G.match(/Version\/(\d+\.?\d*\.?\d*)/)?C(G.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):y;if(e0<15e4)throw new Error(`This emscripten-generated code requires Safari v${D(15e4)} (detected v${e0})`);var A0=G.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):y;if(A0<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${A0})`);var t0=G.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(G.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):y;if(t0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${t0})`)}})();var i=t,v=!!globalThis.window,c=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",b=!v&&!u&&!c,m=[],g="./this.program",q=(C,D)=>{throw D};typeof __filename<"u"?r=__filename:c&&(r=self.location.href);var _="",$,T;if(u){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var M=require("fs");_=__dirname+"/",T=D=>{D=O(D)?new URL(D):D;var y=M.readFileSync(D);return k(Buffer.isBuffer(y)),y},$=async(D,y=!0)=>{D=O(D)?new URL(D):D;var R=M.readFileSync(D,y?void 0:"utf8");return k(y?Buffer.isBuffer(R):typeof R=="string"),R},process.argv.length>1&&(g=process.argv[1].replace(/\\/g,"/")),m=process.argv.slice(2),q=(D,y)=>{throw process.exitCode=D,y}}else if(!b)if(v||c){try{_=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");c&&(T=C=>{var D=new XMLHttpRequest;return D.open("GET",C,!1),D.responseType="arraybuffer",D.send(null),new Uint8Array(D.response)}),$=async C=>{if(O(C))return new Promise((y,R)=>{var G=new XMLHttpRequest;G.open("GET",C,!0),G.responseType="arraybuffer",G.onload=()=>{if(G.status==200||G.status==0&&G.response){y(G.response);return}R(G.status)},G.onerror=R,G.send(null)});var D=await fetch(C,{credentials:"same-origin"});if(D.ok)return D.arrayBuffer();throw new Error(D.status+" : "+D.url)}}else throw new Error("environment detection error");var N=console.log.bind(console),z=console.error.bind(console);k(!b,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var F0;globalThis.WebAssembly||z("no native wasm support detected");var L=!1;function k(C,D){C||H0("Assertion failed"+(D?": "+D:""))}var O=C=>C.startsWith("file://");function V(){var C=Li();k((C&3)==0),C==0&&(C+=4),P0[C>>2]=34821223,P0[C+4>>2]=2310721022,P0[0]=1668509029}function Y(){if(!L){var C=Li();C==0&&(C+=4);var D=P0[C>>2],y=P0[C+4>>2];(D!=34821223||y!=2310721022)&&H0(`Stack overflow! Stack cookie has been overwritten at ${Fx(C)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Fx(y)} ${Fx(D)}`),P0[0]!=1668509029&&H0("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class W extends H{}var n0=!0;(()=>{var C=new Int16Array(1),D=new Int8Array(C.buffer);C[0]=25459,(D[0]!==115||D[1]!==99)&&H0("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function r0(C){Object.getOwnPropertyDescriptor(i,C)||Object.defineProperty(i,C,{configurable:!0,set(){H0(`Attempt to set \`Module.${C}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function x0(C){return()=>k(!1,`call to '${C}' via reference taken before Wasm module initialization`)}function f0(C){Object.getOwnPropertyDescriptor(i,C)&&H0(`\`Module.${C}\` was supplied but \`${C}\` not included in INCOMING_MODULE_JS_API`)}function U(C){return C==="FS_createPath"||C==="FS_createDataFile"||C==="FS_createPreloadedFile"||C==="FS_preloadFile"||C==="FS_unlink"||C==="addRunDependency"||C==="FS_createLazyFile"||C==="FS_createDevice"||C==="removeRunDependency"}function v0(C){c0(C)}function c0(C){Object.getOwnPropertyDescriptor(i,C)||Object.defineProperty(i,C,{configurable:!0,get(){var D=`'${C}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(C)&&(D+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),H0(D)}})}function p0(C){for(var D=0,y=C.length,R=new Uint8Array(y),G;D<y;++D)G=C.charCodeAt(D),R[D]=~G>>8&G;return R}var b0,I0,L0=!1;function dx(){var C=Bn.buffer;aA=new Int8Array(C),gA=new Int16Array(C),i.HEAPU8=lx=new Uint8Array(C),fx=new Uint16Array(C),kA=new Int32Array(C),P0=new Uint32Array(C),Ye=new Float32Array(C),se=new Float64Array(C),Xe=new BigInt64Array(C),Px=new BigUint64Array(C)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function iA(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)jr(i.preRun.shift());r0("preRun"),BA(o0)}function LA(){k(!L0),L0=!0,Y(),nt.__wasm_call_ctors()}function Kx(){if(Y(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)Vx(i.postRun.shift());r0("postRun"),BA(zx)}function H0(C){i.onAbort?.(C),C=`Aborted(${C})`,z(C),L=!0;var D=new WebAssembly.RuntimeError(C);throw I0?.(D),D}function G0(){H0("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var ox={init:G0,createDataFile:G0,createPreloadedFile:G0,createLazyFile:G0,open:G0,mkdev:G0,registerDevice:G0,analyzePath:G0,ErrnoError:G0};function W0(C,D){return(...y)=>{k(L0,`native function \`${C}\` called before runtime initialization`);var R=nt[C];return k(R,`exported native function \`${C}\` not found`),k(y.length<=D,`native function \`${C}\` called with ${y.length} args but expects ${D}`),R(...y)}}var K0;function Q0(){return p0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
1963
1963
  \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F|\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F~\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`|\x7F|\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\xA7\x07env_emval_new_cstring\0env_emval_get_property\0env\r_emval_decref\0\0env_emval_create_invoker\0env\r_emval_incref\0\0env\r_emval_invoke\0env_emval_run_destructors\0\0env_emval_get_module_property\0env_embind_register_value_object\0\venv#_embind_register_value_object_field\0\renv_embind_finalize_value_object\0\0env_embind_register_class\0env"_embind_register_class_constructor\0\venv_embind_register_class_property\0\renv_embind_register_function\0env\v__cxa_throw\0env_embind_register_void\0env_embind_register_bool\0\x07env_embind_register_integer\0
1964
1964
  env_embind_register_bigint\0env_embind_register_float\0env\x1B_embind_register_std_string\0env_embind_register_std_wstring\0env_embind_register_emval\0\0env_embind_register_memory_view\0wasi_snapshot_preview1
1965
1965
  random_get\0env _abort_js\0wasi_snapshot_preview1\bfd_write\0 wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xB6\xB4 \0\b\0\0\0\b\b\0\b\0 \0\0\b\0\b\0\0 \x07  \x07
@@ -2607,51 +2607,51 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
2607
2607
  \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\x9C\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\x9C\v\f\0A\xD7\x9C\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\x9D\v\0A\x91\x9D\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\x9D\v\0A\xCB\x9D\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\x9E\v\0\0\0\0\0\0\0\0\0 \0A\xB3\x9E\v\0A\xBF\x9E\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\x9E\v\0A\xF9\x9E\v\xAF\b\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\x90\\\0\0\fR\0\0\xB0O\0\0\xF8R\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\fR\0\0\xE0O\0\0\xA4O\0\0N10__cxxabiv117__class_type_infoE\0\0\0\fR\0\0P\0\0\xA4O\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\fR\0\0@P\0\0P\0\0N10__cxxabiv119__pointer_type_infoE\0\fR\0\0pP\0\0\xA4O\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\fR\0\0\xA4P\0\0P\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0\xF0P\0\0G\0\0\0H\0\0\0I\0\0\0J\0\0\0K\0\0\0\fR\0\0\xFCP\0\0\xA4O\0\0N10__cxxabiv123__fundamental_type_infoE\0\xDCP\0\0,Q\0\0v\0Dn\0\0\0\0\xDCP\0\0<Q\0\0b\0\0\0\xDCP\0\0HQ\0\0c\0\0\0\xDCP\0\0TQ\0\0h\0\0\0\xDCP\0\0\`Q\0\0a\0\0\0\xDCP\0\0lQ\0\0s\0\0\0\xDCP\0\0xQ\0\0t\0\0\0\xDCP\0\0\x84Q\0\0i\0\0\0\xDCP\0\0\x90Q\0\0j\0\0\0\xDCP\0\0\x9CQ\0\0l\0\0\0\xDCP\0\0\xA8Q\0\0m\0\0\0\xDCP\0\0\xB4Q\0\0x\0\0\0\xDCP\0\0\xC0Q\0\0y\0\0\0\xDCP\0\0\xCCQ\0\0f\0\0\0\xDCP\0\0\xD8Q\0\0d\0\0\0\0\0\0\0\xD4O\0\0G\0\0\0L\0\0\0I\0\0\0J\0\0\0M\0\0\0N\0\0\0O\0\0\0P\0\0\0\0\0\0\0,R\0\0G\0\0\0Q\0\0\0I\0\0\0J\0\0\0M\0\0\0R\0\0\0S\0\0\0T\0\0\0\fR\0\x008R\0\0\xD4O\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\x004P\0\0G\0\0\0U\0\0\0I\0\0\0J\0\0\0V\0\0\0\xE4Q\0\0\x84R\0\0St9exception\0\0\0\0\0\0\0\0\xA8R\0\x009\0\0\0W\0\0\0X\0\0\0\fR\0\0\xB4R\0\0|R\0\0St11logic_error\0\0\0\0\0\xD8R\0\x009\0\0\0Y\0\0\0X\0\0\0\fR\0\0\xE4R\0\0\xA8R\0\0St12length_error\0\0\0\0\xE4Q\0\0\0S\0\0St9type_info\0\0\0\0\0\0\xA0N\0\xEB\xA7~ u\x86\xFA\0\xB9,\xFD\xB7\x8Az\xBC\0\xCC\xA2\0=I\xD7\0\b\0\x93\b\x8F*_\xB7\xFAX\xD9\xFD\xCA\xBD\xE1\xCD\xDC@x\0}ga\xEC\0\xE5
2608
2608
  \xD4\0\xCC>Ov\x98\xAF\0\0D\0\xAE\0\xAE\`\0\xFAw!\xEB+\0\`A\x92\0\xA9\xA3nN\0A\xD8\xA7\v\f\0\0\0\0\0\0\0\0*\0A\xF8\xA7\v'9H\0A\x8E\xA8\v\x92\0A\xA2\xA8\v\x8D8R\`S\0\0\xCA\0\0\0\0\0\0\0\0\xBB\xDB\xEB\x07+\x07;\x07P\x07Success\0Illegal byte sequence\0Domain error\0Result not representable\0Not a tty\0Permission denied\0Operation not permitted\0No such file or directory\0No such process\0File exists\0Value too large for defined data type\0No space left on device\0Out of memory\0Resource busy\0Interrupted system call\0Resource temporarily unavailable\0Invalid seek\0Cross-device link\0Read-only file system\0Directory not empty\0Connection reset by peer\0Operation timed out\0Connection refused\0Host is down\0Host is unreachable\0Address in use\0Broken pipe\0I/O error\0No such device or address\0Block device required\0No such device\0Not a directory\0Is a directory\0Text file busy\0Exec format error\0Invalid argument\0Argument list too long\0Symbolic link loop\0Filename too long\0Too many open files in system\0No file descriptors available\0Bad file descriptor\0No child process\0Bad address\0File too large\0Too many links\0No locks available\0Resource deadlock would occur\0State not recoverable\0Owner died\0Operation canceled\0Function not implemented\0No message of desired type\0Identifier removed\0Device not a stream\0No data available\0Device timeout\0Out of streams resources\0Link has been severed\0Protocol error\0Bad message\0File descriptor in bad state\0Not a socket\0Destination address required\0Message too large\0Protocol wrong type for socket\0Protocol not available\0Protocol not supported\0Socket type not supported\0Not supported\0Protocol family not supported\0Address family not supported by protocol\0Address not available\0Network is down\0Network unreachable\0Connection reset by network\0Connection aborted\0No buffer space available\0Socket is connected\0Socket not connected\0Cannot send after socket shutdown\0Operation already in progress\0Operation in progress\0Stale file handle\0Remote I/O error\0Quota exceeded\0No medium found\0Wrong medium type\0Multihop attempted\0Required key not available\0Key has expired\0Key has been revoked\0Key was rejected by service\0A\xB0\xB7\vI\0\0\0 F\0\0 K\0\0\0\0\0\0\0\0\0\xA0J\0\0\xA0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 L\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\x84\xB8\v@\0A\x9C\xB8\vA\0\0\0B\0\0\0u\0\0\0\0A\xB4\xB8\v\0A\xC4\xB8\v\xFF\xFF\xFF\xFF
2609
2609
  \0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
2610
- A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function $0(C){return C}async function br(C){return C}async function OA(C,D){try{var y=await br(C),L=await WebAssembly.instantiate(y,D);return L}catch(G){z(`failed to asynchronously prepare wasm: ${G}`),O(C)&&z(`warning: Loading from a file URI (${C}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),H0(G)}}async function We(C,D,y){return OA(D,y)}function C0(){var C={env:fo,wasi_snapshot_preview1:fo};return C}async function mr(){function C(A0,t0){return nt=A0.exports,Sc(nt),dx(),nt}var D=i;function y(A0){return k(i===D,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),D=null,C(A0.instance)}var L=C0();if(i.instantiateWasm)return new Promise((A0,t0)=>{try{i.instantiateWasm(L,(a0,D0)=>{A0(C(a0,D0))})}catch(a0){z(`Module.instantiateWasm callback failed with error: ${a0}`),t0(a0)}});K0??(K0=Q0());var G=await We(F0,K0,L),e0=y(G);return e0}class sA{constructor(D){i0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${D})`,this.status=D}}var hA,gA,Xe,aA,Ye,ne,fx,P0,Px,lx,BA=C=>{for(;C.length>0;)C.shift()(i)},zx=[],Vx=C=>zx.push(C),o0=[],jr=C=>o0.push(C),ie=!0;function Fx(C){return k(typeof C=="number",`ptrToString expects a number, got ${typeof C}`),C>>>=0,"0x"+C.toString(16).padStart(8,"0")}var Lx=C=>{Lx.shown||(Lx.shown={}),Lx.shown[C]||(Lx.shown[C]=1,u&&(C="warning: "+C),z(C))};class CA{constructor(D){this.excPtr=D,this.ptr=D-24}set_type(D){P0[this.ptr+4>>2]=D}get_type(){return P0[this.ptr+4>>2]}set_destructor(D){P0[this.ptr+8>>2]=D}get_destructor(){return P0[this.ptr+8>>2]}set_caught(D){D=D?1:0,aA[this.ptr+12]=D}get_caught(){return aA[this.ptr+12]!=0}set_rethrown(D){D=D?1:0,aA[this.ptr+13]=D}get_rethrown(){return aA[this.ptr+13]!=0}init(D,y){this.set_adjusted_ptr(0),this.set_type(D),this.set_destructor(y)}set_adjusted_ptr(D){P0[this.ptr+16>>2]=D}get_adjusted_ptr(){return P0[this.ptr+16>>2]}}var se=0,dA=(C,D,y)=>{var L=new CA(C);L.init(D,y),se++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},hr=()=>H0("native code called abort()"),V0={},uA=C=>{for(;C.length;){var D=C.pop(),y=C.pop();y(D)}};function K(C){return this.fromWireType(P0[C>>2])}var kA={},xA={},AA={},y0=class extends Error{constructor(D){super(D),this.name="InternalError"}},m0=C=>{throw new y0(C)},DA=(C,D,y)=>{C.forEach(t0=>AA[t0]=D);function L(t0){var a0=y(t0);a0.length!==C.length&&m0("Mismatched type converter count");for(var D0=0;D0<C.length;++D0)$x(C[D0],a0[D0])}var G=new Array(D.length),e0=[],A0=0;for(let[t0,a0]of D.entries())xA.hasOwnProperty(a0)?G[t0]=xA[a0]:(e0.push(a0),kA.hasOwnProperty(a0)||(kA[a0]=[]),kA[a0].push(()=>{G[t0]=xA[a0],++A0,A0===e0.length&&L(G)}));e0.length===0&&L(G)},ae=C=>{var D=V0[C];delete V0[C];var y=D.rawConstructor,L=D.rawDestructor,G=D.fields,e0=G.map(A0=>A0.getterReturnType).concat(G.map(A0=>A0.setterArgumentType));DA([C],e0,A0=>{var t0={};for(var[a0,D0]of G.entries()){let S0=A0[a0],vx=D0.getter,sx=D0.getterContext,Cx=A0[a0+G.length],rA=D0.setter,Rx=D0.setterContext;t0[D0.fieldName]={read:wA=>S0.fromWireType(vx(sx,wA)),write:(wA,Be)=>{var YA=[];rA(Rx,wA,Cx.toWireType(YA,Be)),uA(YA)},optional:S0.optional}}return[{name:D.name,fromWireType:S0=>{var vx={};for(var sx in t0)vx[sx]=t0[sx].read(S0);return L(S0),vx},toWireType:(S0,vx)=>{for(var sx in t0)if(!(sx in vx)&&!t0[sx].optional)throw new TypeError(`Missing field: "${sx}"`);var Cx=y();for(sx in t0)t0[sx].write(Cx,vx[sx]);return S0!==null&&S0.push(L,Cx),Cx},readValueFromPointer:K,destructorFunction:L}]})},kx=C=>{for(var D="";;){var y=lx[C++];if(!y)return D;D+=String.fromCharCode(y)}},tx=class extends Error{constructor(D){super(D),this.name="BindingError"}},w0=C=>{throw new tx(C)};function oe(C,D,y={}){var L=D.name;if(C||w0(`type "${L}" must have a positive integer typeid pointer`),xA.hasOwnProperty(C)){if(y.ignoreDuplicateRegistrations)return;w0(`Cannot register type '${L}' twice`)}if(xA[C]=D,delete AA[C],kA.hasOwnProperty(C)){var G=kA[C];delete kA[C],G.forEach(e0=>e0())}}function $x(C,D,y={}){return oe(C,D,y)}var GA=(C,D,y)=>{switch(D){case 1:return y?L=>aA[L]:L=>lx[L];case 2:return y?L=>hA[L>>1]:L=>fx[L>>1];case 4:return y?L=>gA[L>>2]:L=>P0[L>>2];case 8:return y?L=>Xe[L>>3]:L=>Px[L>>3];default:throw new TypeError(`invalid integer width (${D}): ${C}`)}},pA=C=>{if(C===null)return"null";var D=typeof C;return D==="object"||D==="array"||D==="function"?C.toString():""+C},FA=(C,D,y,L)=>{if(D<y||D>L)throw new TypeError(`Passing a number "${pA(D)}" from JS side to C/C++ side to an argument of type "${C}", which is outside the valid range [${y}, ${L}]!`)},gr=(C,D,y,L,G)=>{D=kx(D);let e0=L===0n,A0=t0=>t0;if(e0){let t0=y*8;A0=a0=>BigInt.asUintN(t0,a0),G=A0(G)}$x(C,{name:D,fromWireType:A0,toWireType:(t0,a0)=>{if(typeof a0=="number")a0=BigInt(a0);else if(typeof a0!="bigint")throw new TypeError(`Cannot convert "${pA(a0)}" to ${D}`);return FA(D,a0,L,G),a0},readValueFromPointer:GA(D,y,!e0),destructorFunction:null})},s=(C,D,y,L)=>{D=kx(D),$x(C,{name:D,fromWireType:function(G){return!!G},toWireType:function(G,e0){return e0?y:L},readValueFromPointer:function(G){return this.fromWireType(lx[G])},destructorFunction:null})},h0=C=>({count:C.count,deleteScheduled:C.deleteScheduled,preservePointerOnDelete:C.preservePointerOnDelete,ptr:C.ptr,ptrType:C.ptrType,smartPtr:C.smartPtr,smartPtrType:C.smartPtrType}),ye=C=>{function D(y){return y.$$.ptrType.registeredClass.name}w0(D(C)+" instance already deleted")},yA=!1,bA=C=>{},kr=C=>{C.smartPtr?C.smartPtrType.rawDestructor(C.smartPtr):C.ptrType.registeredClass.rawDestructor(C.ptr)},Fe=C=>{C.count.value-=1;var D=C.count.value===0;D&&kr(C)},Qe=(C,D,y)=>{if(D===y)return C;if(y.baseClass===void 0)return null;var L=Qe(C,D,y.baseClass);return L===null?null:y.downcast(L)},Ze={},yr={},_r=(C,D)=>{for(D===void 0&&w0("ptr should not be undefined");C.baseClass;)D=C.upcast(D),C=C.baseClass;return D},wr=(C,D)=>(D=_r(C,D),yr[D]),ve=(C,D)=>{(!D.ptrType||!D.ptr)&&m0("makeClassHandle requires ptr and ptrType");var y=!!D.smartPtrType,L=!!D.smartPtr;return y!==L&&m0("Both smartPtrType and smartPtr must be specified"),D.count={value:1},UA(Object.create(C,{$$:{value:D,writable:!0}}))};function xr(C){var D=this.getPointee(C);if(!D)return this.destructor(C),null;var y=wr(this.registeredClass,D);if(y!==void 0){if(y.$$.count.value===0)return y.$$.ptr=D,y.$$.smartPtr=C,y.clone();var L=y.clone();return this.destructor(C),L}function G(){return this.isSmartPointer?ve(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:D,smartPtrType:this,smartPtr:C}):ve(this.registeredClass.instancePrototype,{ptrType:this,ptr:C})}var e0=this.registeredClass.getActualType(D),A0=Ze[e0];if(!A0)return G.call(this);var t0;this.isConst?t0=A0.constPointerType:t0=A0.pointerType;var a0=Qe(D,this.registeredClass,t0.registeredClass);return a0===null?G.call(this):this.isSmartPointer?ve(t0.registeredClass.instancePrototype,{ptrType:t0,ptr:a0,smartPtrType:this,smartPtr:C}):ve(t0.registeredClass.instancePrototype,{ptrType:t0,ptr:a0})}var UA=C=>globalThis.FinalizationRegistry?(yA=new FinalizationRegistry(D=>{console.warn(D.leakWarning),Fe(D.$$)}),UA=D=>{var y=D.$$,L=!!y.smartPtr;if(L){var G={$$:y},e0=y.ptrType.registeredClass,A0=new Error(`Embind found a leaked C++ instance ${e0.name} <${Fx(y.ptr)}>.
2610
+ A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function N0(C){return C}async function br(C){return C}async function OA(C,D){try{var y=await br(C),R=await WebAssembly.instantiate(y,D);return R}catch(G){z(`failed to asynchronously prepare wasm: ${G}`),O(C)&&z(`warning: Loading from a file URI (${C}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),H0(G)}}async function We(C,D,y){return OA(D,y)}function C0(){var C={env:co,wasi_snapshot_preview1:co};return C}async function mr(){function C(A0,t0){return nt=A0.exports,Lc(nt),dx(),nt}var D=i;function y(A0){return k(i===D,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),D=null,C(A0.instance)}var R=C0();if(i.instantiateWasm)return new Promise((A0,t0)=>{try{i.instantiateWasm(R,(a0,D0)=>{A0(C(a0,D0))})}catch(a0){z(`Module.instantiateWasm callback failed with error: ${a0}`),t0(a0)}});K0??(K0=Q0());var G=await We(F0,K0,R),e0=y(G);return e0}class sA{constructor(D){i0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${D})`,this.status=D}}var gA,kA,Xe,aA,Ye,se,fx,P0,Px,lx,BA=C=>{for(;C.length>0;)C.shift()(i)},zx=[],Vx=C=>zx.push(C),o0=[],jr=C=>o0.push(C),ae=!0;function Fx(C){return k(typeof C=="number",`ptrToString expects a number, got ${typeof C}`),C>>>=0,"0x"+C.toString(16).padStart(8,"0")}var Lx=C=>{Lx.shown||(Lx.shown={}),Lx.shown[C]||(Lx.shown[C]=1,u&&(C="warning: "+C),z(C))};class CA{constructor(D){this.excPtr=D,this.ptr=D-24}set_type(D){P0[this.ptr+4>>2]=D}get_type(){return P0[this.ptr+4>>2]}set_destructor(D){P0[this.ptr+8>>2]=D}get_destructor(){return P0[this.ptr+8>>2]}set_caught(D){D=D?1:0,aA[this.ptr+12]=D}get_caught(){return aA[this.ptr+12]!=0}set_rethrown(D){D=D?1:0,aA[this.ptr+13]=D}get_rethrown(){return aA[this.ptr+13]!=0}init(D,y){this.set_adjusted_ptr(0),this.set_type(D),this.set_destructor(y)}set_adjusted_ptr(D){P0[this.ptr+16>>2]=D}get_adjusted_ptr(){return P0[this.ptr+16>>2]}}var oe=0,dA=(C,D,y)=>{var R=new CA(C);R.init(D,y),oe++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},hr=()=>H0("native code called abort()"),V0={},uA=C=>{for(;C.length;){var D=C.pop(),y=C.pop();y(D)}};function K(C){return this.fromWireType(P0[C>>2])}var yA={},xA={},AA={},y0=class extends Error{constructor(D){super(D),this.name="InternalError"}},m0=C=>{throw new y0(C)},DA=(C,D,y)=>{C.forEach(t0=>AA[t0]=D);function R(t0){var a0=y(t0);a0.length!==C.length&&m0("Mismatched type converter count");for(var D0=0;D0<C.length;++D0)$x(C[D0],a0[D0])}var G=new Array(D.length),e0=[],A0=0;for(let[t0,a0]of D.entries())xA.hasOwnProperty(a0)?G[t0]=xA[a0]:(e0.push(a0),yA.hasOwnProperty(a0)||(yA[a0]=[]),yA[a0].push(()=>{G[t0]=xA[a0],++A0,A0===e0.length&&R(G)}));e0.length===0&&R(G)},Fe=C=>{var D=V0[C];delete V0[C];var y=D.rawConstructor,R=D.rawDestructor,G=D.fields,e0=G.map(A0=>A0.getterReturnType).concat(G.map(A0=>A0.setterArgumentType));DA([C],e0,A0=>{var t0={};for(var[a0,D0]of G.entries()){let S0=A0[a0],vx=D0.getter,sx=D0.getterContext,Cx=A0[a0+G.length],rA=D0.setter,Rx=D0.setterContext;t0[D0.fieldName]={read:SA=>S0.fromWireType(vx(sx,SA)),write:(SA,de)=>{var YA=[];rA(Rx,SA,Cx.toWireType(YA,de)),uA(YA)},optional:S0.optional}}return[{name:D.name,fromWireType:S0=>{var vx={};for(var sx in t0)vx[sx]=t0[sx].read(S0);return R(S0),vx},toWireType:(S0,vx)=>{for(var sx in t0)if(!(sx in vx)&&!t0[sx].optional)throw new TypeError(`Missing field: "${sx}"`);var Cx=y();for(sx in t0)t0[sx].write(Cx,vx[sx]);return S0!==null&&S0.push(R,Cx),Cx},readValueFromPointer:K,destructorFunction:R}]})},kx=C=>{for(var D="";;){var y=lx[C++];if(!y)return D;D+=String.fromCharCode(y)}},tx=class extends Error{constructor(D){super(D),this.name="BindingError"}},w0=C=>{throw new tx(C)};function ve(C,D,y={}){var R=D.name;if(C||w0(`type "${R}" must have a positive integer typeid pointer`),xA.hasOwnProperty(C)){if(y.ignoreDuplicateRegistrations)return;w0(`Cannot register type '${R}' twice`)}if(xA[C]=D,delete AA[C],yA.hasOwnProperty(C)){var G=yA[C];delete yA[C],G.forEach(e0=>e0())}}function $x(C,D,y={}){return ve(C,D,y)}var GA=(C,D,y)=>{switch(D){case 1:return y?R=>aA[R]:R=>lx[R];case 2:return y?R=>gA[R>>1]:R=>fx[R>>1];case 4:return y?R=>kA[R>>2]:R=>P0[R>>2];case 8:return y?R=>Xe[R>>3]:R=>Px[R>>3];default:throw new TypeError(`invalid integer width (${D}): ${C}`)}},pA=C=>{if(C===null)return"null";var D=typeof C;return D==="object"||D==="array"||D==="function"?C.toString():""+C},FA=(C,D,y,R)=>{if(D<y||D>R)throw new TypeError(`Passing a number "${pA(D)}" from JS side to C/C++ side to an argument of type "${C}", which is outside the valid range [${y}, ${R}]!`)},gr=(C,D,y,R,G)=>{D=kx(D);let e0=R===0n,A0=t0=>t0;if(e0){let t0=y*8;A0=a0=>BigInt.asUintN(t0,a0),G=A0(G)}$x(C,{name:D,fromWireType:A0,toWireType:(t0,a0)=>{if(typeof a0=="number")a0=BigInt(a0);else if(typeof a0!="bigint")throw new TypeError(`Cannot convert "${pA(a0)}" to ${D}`);return FA(D,a0,R,G),a0},readValueFromPointer:GA(D,y,!e0),destructorFunction:null})},a=(C,D,y,R)=>{D=kx(D),$x(C,{name:D,fromWireType:function(G){return!!G},toWireType:function(G,e0){return e0?y:R},readValueFromPointer:function(G){return this.fromWireType(lx[G])},destructorFunction:null})},h0=C=>({count:C.count,deleteScheduled:C.deleteScheduled,preservePointerOnDelete:C.preservePointerOnDelete,ptr:C.ptr,ptrType:C.ptrType,smartPtr:C.smartPtr,smartPtrType:C.smartPtrType}),we=C=>{function D(y){return y.$$.ptrType.registeredClass.name}w0(D(C)+" instance already deleted")},_A=!1,bA=C=>{},kr=C=>{C.smartPtr?C.smartPtrType.rawDestructor(C.smartPtr):C.ptrType.registeredClass.rawDestructor(C.ptr)},fe=C=>{C.count.value-=1;var D=C.count.value===0;D&&kr(C)},Qe=(C,D,y)=>{if(D===y)return C;if(y.baseClass===void 0)return null;var R=Qe(C,D,y.baseClass);return R===null?null:y.downcast(R)},Ze={},yr={},_r=(C,D)=>{for(D===void 0&&w0("ptr should not be undefined");C.baseClass;)D=C.upcast(D),C=C.baseClass;return D},wr=(C,D)=>(D=_r(C,D),yr[D]),le=(C,D)=>{(!D.ptrType||!D.ptr)&&m0("makeClassHandle requires ptr and ptrType");var y=!!D.smartPtrType,R=!!D.smartPtr;return y!==R&&m0("Both smartPtrType and smartPtr must be specified"),D.count={value:1},UA(Object.create(C,{$$:{value:D,writable:!0}}))};function xr(C){var D=this.getPointee(C);if(!D)return this.destructor(C),null;var y=wr(this.registeredClass,D);if(y!==void 0){if(y.$$.count.value===0)return y.$$.ptr=D,y.$$.smartPtr=C,y.clone();var R=y.clone();return this.destructor(C),R}function G(){return this.isSmartPointer?le(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:D,smartPtrType:this,smartPtr:C}):le(this.registeredClass.instancePrototype,{ptrType:this,ptr:C})}var e0=this.registeredClass.getActualType(D),A0=Ze[e0];if(!A0)return G.call(this);var t0;this.isConst?t0=A0.constPointerType:t0=A0.pointerType;var a0=Qe(D,this.registeredClass,t0.registeredClass);return a0===null?G.call(this):this.isSmartPointer?le(t0.registeredClass.instancePrototype,{ptrType:t0,ptr:a0,smartPtrType:this,smartPtr:C}):le(t0.registeredClass.instancePrototype,{ptrType:t0,ptr:a0})}var UA=C=>globalThis.FinalizationRegistry?(_A=new FinalizationRegistry(D=>{console.warn(D.leakWarning),fe(D.$$)}),UA=D=>{var y=D.$$,R=!!y.smartPtr;if(R){var G={$$:y},e0=y.ptrType.registeredClass,A0=new Error(`Embind found a leaked C++ instance ${e0.name} <${Fx(y.ptr)}>.
2611
2611
  We'll free it automatically in this case, but this functionality is not reliable across various environments.
2612
2612
  Make sure to invoke .delete() manually once you're done with the instance instead.
2613
- Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(A0,xr),G.leakWarning=A0.stack.replace(/^Error: /,""),yA.register(D,G,D)}return D},bA=D=>yA.unregister(D),UA(C)):(UA=D=>D,C),fe=[],Sr=()=>{for(;fe.length;){var C=fe.pop();C.$$.deleteScheduled=!1,C.delete()}},Ar,er=()=>{let C=HA.prototype;Object.assign(C,{isAliasOf(y){if(!(this instanceof HA)||!(y instanceof HA))return!1;var L=this.$$.ptrType.registeredClass,G=this.$$.ptr;y.$$=y.$$;for(var e0=y.$$.ptrType.registeredClass,A0=y.$$.ptr;L.baseClass;)G=L.upcast(G),L=L.baseClass;for(;e0.baseClass;)A0=e0.upcast(A0),e0=e0.baseClass;return L===e0&&G===A0},clone(){if(this.$$.ptr||ye(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var y=UA(Object.create(Object.getPrototypeOf(this),{$$:{value:h0(this.$$)}}));return y.$$.count.value+=1,y.$$.deleteScheduled=!1,y},delete(){this.$$.ptr||ye(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&w0("Object already scheduled for deletion"),bA(this),Fe(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||ye(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&w0("Object already scheduled for deletion"),fe.push(this),fe.length===1&&Ar&&Ar(Sr),this.$$.deleteScheduled=!0,this}});let D=Symbol.dispose;D&&(C[D]=C.delete)};function HA(){}var le=(C,D)=>Object.defineProperty(D,"name",{value:C}),_e=(C,D,y)=>{if(C[D].overloadTable===void 0){var L=C[D];C[D]=function(...G){return C[D].overloadTable.hasOwnProperty(G.length)||w0(`Function '${y}' called with an invalid number of arguments (${G.length}) - expects one of (${C[D].overloadTable})!`),C[D].overloadTable[G.length].apply(this,G)},C[D].overloadTable=[],C[D].overloadTable[L.argCount]=L}},rr=(C,D,y)=>{i.hasOwnProperty(C)?((y===void 0||i[C].overloadTable!==void 0&&i[C].overloadTable[y]!==void 0)&&w0(`Cannot register public name '${C}' twice`),_e(i,C,C),i[C].overloadTable.hasOwnProperty(y)&&w0(`Cannot register multiple overloads of a function with the same number of arguments (${y})!`),i[C].overloadTable[y]=D):(i[C]=D,i[C].argCount=y)},tr=48,nr=57,qr=C=>{k(typeof C=="string"),C=C.replace(/[^a-zA-Z0-9_]/g,"$");var D=C.charCodeAt(0);return D>=tr&&D<=nr?`_${C}`:C};function Tr(C,D,y,L,G,e0,A0,t0){this.name=C,this.constructor=D,this.instancePrototype=y,this.rawDestructor=L,this.baseClass=G,this.getActualType=e0,this.upcast=A0,this.downcast=t0,this.pureVirtualFunctions=[]}var ce=(C,D,y)=>{for(;D!==y;)D.upcast||w0(`Expected null or instance of ${y.name}, got an instance of ${D.name}`),C=D.upcast(C),D=D.baseClass;return C};function Pr(C,D){if(D===null)return this.isReference&&w0(`null is not a valid ${this.name}`),0;D.$$||w0(`Cannot pass "${pA(D)}" as a ${this.name}`),D.$$.ptr||w0(`Cannot pass deleted object as a pointer of type ${this.name}`);var y=D.$$.ptrType.registeredClass,L=ce(D.$$.ptr,y,this.registeredClass);return L}function $r(C,D){var y;if(D===null)return this.isReference&&w0(`null is not a valid ${this.name}`),this.isSmartPointer?(y=this.rawConstructor(),C!==null&&C.push(this.rawDestructor,y),y):0;(!D||!D.$$)&&w0(`Cannot pass "${pA(D)}" as a ${this.name}`),D.$$.ptr||w0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&D.$$.ptrType.isConst&&w0(`Cannot convert argument of type ${D.$$.smartPtrType?D.$$.smartPtrType.name:D.$$.ptrType.name} to parameter type ${this.name}`);var L=D.$$.ptrType.registeredClass;if(y=ce(D.$$.ptr,L,this.registeredClass),this.isSmartPointer)switch(D.$$.smartPtr===void 0&&w0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:D.$$.smartPtrType===this?y=D.$$.smartPtr:w0(`Cannot convert argument of type ${D.$$.smartPtrType?D.$$.smartPtrType.name:D.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:y=D.$$.smartPtr;break;case 2:if(D.$$.smartPtrType===this)y=D.$$.smartPtr;else{var G=D.clone();y=this.rawShare(y,k0.toHandle(()=>G.delete())),C!==null&&C.push(this.rawDestructor,y)}break;default:w0("Unsupported sharing policy")}return y}function ir(C,D){if(D===null)return this.isReference&&w0(`null is not a valid ${this.name}`),0;D.$$||w0(`Cannot pass "${pA(D)}" as a ${this.name}`),D.$$.ptr||w0(`Cannot pass deleted object as a pointer of type ${this.name}`),D.$$.ptrType.isConst&&w0(`Cannot convert argument of type ${D.$$.ptrType.name} to parameter type ${this.name}`);var y=D.$$.ptrType.registeredClass,L=ce(D.$$.ptr,y,this.registeredClass);return L}var sr=()=>{Object.assign(JA.prototype,{getPointee(C){return this.rawGetPointee&&(C=this.rawGetPointee(C)),C},destructor(C){this.rawDestructor?.(C)},readValueFromPointer:K,fromWireType:xr})};function JA(C,D,y,L,G,e0,A0,t0,a0,D0,S0){this.name=C,this.registeredClass=D,this.isReference=y,this.isConst=L,this.isSmartPointer=G,this.pointeeType=e0,this.sharingPolicy=A0,this.rawGetPointee=t0,this.rawConstructor=a0,this.rawShare=D0,this.rawDestructor=S0,!G&&D.baseClass===void 0?L?(this.toWireType=Pr,this.destructorFunction=null):(this.toWireType=ir,this.destructorFunction=null):this.toWireType=$r}var ar=(C,D,y)=>{i.hasOwnProperty(C)||m0("Replacing nonexistent public symbol"),i[C].overloadTable!==void 0&&y!==void 0?i[C].overloadTable[y]=D:(i[C]=D,i[C].argCount=y)},KA=[],we=C=>{var D=KA[C];return D||(KA[C]=D=Rr.get(C)),k(Rr.get(C)==D,"table mirror is out of date"),D},Ox=(C,D,y=!1)=>{k(!y,"async bindings are only supported with JSPI"),C=kx(C);function L(){var e0=we(D);return e0}var G=L();return typeof G!="function"&&w0(`unknown function pointer with signature ${C}: ${D}`),G};class Nr extends Error{}var _A=C=>{var D=oo(C),y=kx(D);return Te(D),y},zA=(C,D)=>{var y=[],L={};function G(e0){if(!L[e0]&&!xA[e0]){if(AA[e0]){AA[e0].forEach(G);return}y.push(e0),L[e0]=!0}}throw D.forEach(G),new Nr(`${C}: `+y.map(_A).join([", "]))},Se=(C,D,y,L,G,e0,A0,t0,a0,D0,S0,vx,sx)=>{S0=kx(S0),e0=Ox(G,e0),t0&&(t0=Ox(A0,t0)),D0&&(D0=Ox(a0,D0)),sx=Ox(vx,sx);var Cx=qr(S0);rr(Cx,function(){zA(`Cannot construct ${S0} due to unbound types`,[L])}),DA([C,D,y],L?[L]:[],rA=>{var Rx;rA=rA[0];var wA,Be;L?(wA=rA.registeredClass,Be=wA.instancePrototype):Be=HA.prototype;var YA=le(S0,function(...Ri){if(Object.getPrototypeOf(this)!==it)throw new tx(`Use 'new' to construct ${S0}`);if(Ce.constructor_body===void 0)throw new tx(`${S0} has no accessible constructor`);var Bo=Ce.constructor_body[Ri.length];if(Bo===void 0)throw new tx(`Tried to invoke ctor of ${S0} with invalid number of parameters (${Ri.length}) - expected (${Object.keys(Ce.constructor_body).toString()}) parameters instead!`);return Bo.apply(this,Ri)}),it=Object.create(Be,{constructor:{value:YA}});YA.prototype=it;var Ce=new Tr(S0,YA,it,sx,wA,e0,t0,D0);Ce.baseClass&&((Rx=Ce.baseClass).__derivedClasses??(Rx.__derivedClasses=[]),Ce.baseClass.__derivedClasses.push(Ce));var Pc=new JA(S0,Ce,!0,!1,!1),co=new JA(S0+"*",Ce,!1,!1,!1),Eo=new JA(S0+" const*",Ce,!1,!0,!1);return Ze[C]={pointerType:co,constPointerType:Eo},ar(Cx,YA),[Pc,co,Eo]})},yx=(C,D)=>{for(var y=[],L=0;L<C;L++)y.push(P0[D+L*4>>2]);return y};function Ee(C){for(var D=1;D<C.length;++D)if(C[D]!==null&&C[D].destructorFunction===void 0)return!0;return!1}function VA(C,D,y,L,G){if(C<D||C>y){var e0=D==y?D:`${D} to ${y}`;G(`function ${L} called with ${C} arguments, expected ${e0}`)}}function f(C,D,y,L){var G=Ee(C),e0=C.length-2,A0=[],t0=["fn"];D&&t0.push("thisWired");for(var a0=0;a0<e0;++a0)A0.push(`arg${a0}`),t0.push(`arg${a0}Wired`);A0=A0.join(","),t0=t0.join(",");var D0=`return function (${A0}) {
2613
+ Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(A0,xr),G.leakWarning=A0.stack.replace(/^Error: /,""),_A.register(D,G,D)}return D},bA=D=>_A.unregister(D),UA(C)):(UA=D=>D,C),ce=[],Sr=()=>{for(;ce.length;){var C=ce.pop();C.$$.deleteScheduled=!1,C.delete()}},Ar,er=()=>{let C=HA.prototype;Object.assign(C,{isAliasOf(y){if(!(this instanceof HA)||!(y instanceof HA))return!1;var R=this.$$.ptrType.registeredClass,G=this.$$.ptr;y.$$=y.$$;for(var e0=y.$$.ptrType.registeredClass,A0=y.$$.ptr;R.baseClass;)G=R.upcast(G),R=R.baseClass;for(;e0.baseClass;)A0=e0.upcast(A0),e0=e0.baseClass;return R===e0&&G===A0},clone(){if(this.$$.ptr||we(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var y=UA(Object.create(Object.getPrototypeOf(this),{$$:{value:h0(this.$$)}}));return y.$$.count.value+=1,y.$$.deleteScheduled=!1,y},delete(){this.$$.ptr||we(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&w0("Object already scheduled for deletion"),bA(this),fe(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||we(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&w0("Object already scheduled for deletion"),ce.push(this),ce.length===1&&Ar&&Ar(Sr),this.$$.deleteScheduled=!0,this}});let D=Symbol.dispose;D&&(C[D]=C.delete)};function HA(){}var Ee=(C,D)=>Object.defineProperty(D,"name",{value:C}),Se=(C,D,y)=>{if(C[D].overloadTable===void 0){var R=C[D];C[D]=function(...G){return C[D].overloadTable.hasOwnProperty(G.length)||w0(`Function '${y}' called with an invalid number of arguments (${G.length}) - expects one of (${C[D].overloadTable})!`),C[D].overloadTable[G.length].apply(this,G)},C[D].overloadTable=[],C[D].overloadTable[R.argCount]=R}},rr=(C,D,y)=>{i.hasOwnProperty(C)?((y===void 0||i[C].overloadTable!==void 0&&i[C].overloadTable[y]!==void 0)&&w0(`Cannot register public name '${C}' twice`),Se(i,C,C),i[C].overloadTable.hasOwnProperty(y)&&w0(`Cannot register multiple overloads of a function with the same number of arguments (${y})!`),i[C].overloadTable[y]=D):(i[C]=D,i[C].argCount=y)},tr=48,nr=57,qr=C=>{k(typeof C=="string"),C=C.replace(/[^a-zA-Z0-9_]/g,"$");var D=C.charCodeAt(0);return D>=tr&&D<=nr?`_${C}`:C};function Tr(C,D,y,R,G,e0,A0,t0){this.name=C,this.constructor=D,this.instancePrototype=y,this.rawDestructor=R,this.baseClass=G,this.getActualType=e0,this.upcast=A0,this.downcast=t0,this.pureVirtualFunctions=[]}var Be=(C,D,y)=>{for(;D!==y;)D.upcast||w0(`Expected null or instance of ${y.name}, got an instance of ${D.name}`),C=D.upcast(C),D=D.baseClass;return C};function Pr(C,D){if(D===null)return this.isReference&&w0(`null is not a valid ${this.name}`),0;D.$$||w0(`Cannot pass "${pA(D)}" as a ${this.name}`),D.$$.ptr||w0(`Cannot pass deleted object as a pointer of type ${this.name}`);var y=D.$$.ptrType.registeredClass,R=Be(D.$$.ptr,y,this.registeredClass);return R}function $r(C,D){var y;if(D===null)return this.isReference&&w0(`null is not a valid ${this.name}`),this.isSmartPointer?(y=this.rawConstructor(),C!==null&&C.push(this.rawDestructor,y),y):0;(!D||!D.$$)&&w0(`Cannot pass "${pA(D)}" as a ${this.name}`),D.$$.ptr||w0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&D.$$.ptrType.isConst&&w0(`Cannot convert argument of type ${D.$$.smartPtrType?D.$$.smartPtrType.name:D.$$.ptrType.name} to parameter type ${this.name}`);var R=D.$$.ptrType.registeredClass;if(y=Be(D.$$.ptr,R,this.registeredClass),this.isSmartPointer)switch(D.$$.smartPtr===void 0&&w0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:D.$$.smartPtrType===this?y=D.$$.smartPtr:w0(`Cannot convert argument of type ${D.$$.smartPtrType?D.$$.smartPtrType.name:D.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:y=D.$$.smartPtr;break;case 2:if(D.$$.smartPtrType===this)y=D.$$.smartPtr;else{var G=D.clone();y=this.rawShare(y,k0.toHandle(()=>G.delete())),C!==null&&C.push(this.rawDestructor,y)}break;default:w0("Unsupported sharing policy")}return y}function ir(C,D){if(D===null)return this.isReference&&w0(`null is not a valid ${this.name}`),0;D.$$||w0(`Cannot pass "${pA(D)}" as a ${this.name}`),D.$$.ptr||w0(`Cannot pass deleted object as a pointer of type ${this.name}`),D.$$.ptrType.isConst&&w0(`Cannot convert argument of type ${D.$$.ptrType.name} to parameter type ${this.name}`);var y=D.$$.ptrType.registeredClass,R=Be(D.$$.ptr,y,this.registeredClass);return R}var sr=()=>{Object.assign(JA.prototype,{getPointee(C){return this.rawGetPointee&&(C=this.rawGetPointee(C)),C},destructor(C){this.rawDestructor?.(C)},readValueFromPointer:K,fromWireType:xr})};function JA(C,D,y,R,G,e0,A0,t0,a0,D0,S0){this.name=C,this.registeredClass=D,this.isReference=y,this.isConst=R,this.isSmartPointer=G,this.pointeeType=e0,this.sharingPolicy=A0,this.rawGetPointee=t0,this.rawConstructor=a0,this.rawShare=D0,this.rawDestructor=S0,!G&&D.baseClass===void 0?R?(this.toWireType=Pr,this.destructorFunction=null):(this.toWireType=ir,this.destructorFunction=null):this.toWireType=$r}var ar=(C,D,y)=>{i.hasOwnProperty(C)||m0("Replacing nonexistent public symbol"),i[C].overloadTable!==void 0&&y!==void 0?i[C].overloadTable[y]=D:(i[C]=D,i[C].argCount=y)},KA=[],qe=C=>{var D=KA[C];return D||(KA[C]=D=Rr.get(C)),k(Rr.get(C)==D,"table mirror is out of date"),D},Ox=(C,D,y=!1)=>{k(!y,"async bindings are only supported with JSPI"),C=kx(C);function R(){var e0=qe(D);return e0}var G=R();return typeof G!="function"&&w0(`unknown function pointer with signature ${C}: ${D}`),G};class Nr extends Error{}var wA=C=>{var D=vo(C),y=kx(D);return $e(D),y},zA=(C,D)=>{var y=[],R={};function G(e0){if(!R[e0]&&!xA[e0]){if(AA[e0]){AA[e0].forEach(G);return}y.push(e0),R[e0]=!0}}throw D.forEach(G),new Nr(`${C}: `+y.map(wA).join([", "]))},Te=(C,D,y,R,G,e0,A0,t0,a0,D0,S0,vx,sx)=>{S0=kx(S0),e0=Ox(G,e0),t0&&(t0=Ox(A0,t0)),D0&&(D0=Ox(a0,D0)),sx=Ox(vx,sx);var Cx=qr(S0);rr(Cx,function(){zA(`Cannot construct ${S0} due to unbound types`,[R])}),DA([C,D,y],R?[R]:[],rA=>{var Rx;rA=rA[0];var SA,de;R?(SA=rA.registeredClass,de=SA.instancePrototype):de=HA.prototype;var YA=Ee(S0,function(...Oi){if(Object.getPrototypeOf(this)!==it)throw new tx(`Use 'new' to construct ${S0}`);if(ue.constructor_body===void 0)throw new tx(`${S0} has no accessible constructor`);var uo=ue.constructor_body[Oi.length];if(uo===void 0)throw new tx(`Tried to invoke ctor of ${S0} with invalid number of parameters (${Oi.length}) - expected (${Object.keys(ue.constructor_body).toString()}) parameters instead!`);return uo.apply(this,Oi)}),it=Object.create(de,{constructor:{value:YA}});YA.prototype=it;var ue=new Tr(S0,YA,it,sx,SA,e0,t0,D0);ue.baseClass&&((Rx=ue.baseClass).__derivedClasses??(Rx.__derivedClasses=[]),ue.baseClass.__derivedClasses.push(ue));var Uc=new JA(S0,ue,!0,!1,!1),Bo=new JA(S0+"*",ue,!1,!1,!1),Co=new JA(S0+" const*",ue,!1,!0,!1);return Ze[C]={pointerType:Bo,constPointerType:Co},ar(Cx,YA),[Uc,Bo,Co]})},yx=(C,D)=>{for(var y=[],R=0;R<C;R++)y.push(P0[D+R*4>>2]);return y};function Ce(C){for(var D=1;D<C.length;++D)if(C[D]!==null&&C[D].destructorFunction===void 0)return!0;return!1}function VA(C,D,y,R,G){if(C<D||C>y){var e0=D==y?D:`${D} to ${y}`;G(`function ${R} called with ${C} arguments, expected ${e0}`)}}function l(C,D,y,R){var G=Ce(C),e0=C.length-2,A0=[],t0=["fn"];D&&t0.push("thisWired");for(var a0=0;a0<e0;++a0)A0.push(`arg${a0}`),t0.push(`arg${a0}Wired`);A0=A0.join(","),t0=t0.join(",");var D0=`return function (${A0}) {
2614
2614
  `;D0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
2615
2615
  `,G&&(D0+=`var destructors = [];
2616
2616
  `);var S0=G?"destructors":"null",vx=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];D&&(D0+=`var thisWired = toClassParamWire(${S0}, this);
2617
2617
  `);for(var a0=0;a0<e0;++a0){var sx=`toArg${a0}Wire`;D0+=`var arg${a0}Wired = ${sx}(${S0}, arg${a0});
2618
- `,vx.push(sx)}if(D0+=(y||L?"var rv = ":"")+`invoker(${t0});
2618
+ `,vx.push(sx)}if(D0+=(y||R?"var rv = ":"")+`invoker(${t0});
2619
2619
  `,G)D0+=`runDestructors(destructors);
2620
2620
  `;else for(var a0=D?1:2;a0<C.length;++a0){var Cx=a0===1?"thisWired":"arg"+(a0-2)+"Wired";C[a0].destructorFunction!==null&&(D0+=`${Cx}_dtor(${Cx});
2621
2621
  `,vx.push(`${Cx}_dtor`))}return y&&(D0+=`var ret = fromRetWire(rv);
2622
2622
  return ret;
2623
2623
  `),D0+=`}
2624
2624
  `,vx.push("checkArgCount","minArgs","maxArgs"),D0=`if (arguments.length !== ${vx.length}){ throw new Error(humanName + "Expected ${vx.length} closure arguments " + arguments.length + " given."); }
2625
- ${D0}`,new Function(vx,D0)}function B(C){for(var D=C.length-2,y=C.length-1;y>=2&&C[y].optional;--y)D--;return D}function p(C,D,y,L,G,e0){var A0=D.length;A0<2&&w0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!e0,"async bindings are only supported with JSPI");for(var t0=D[1]!==null&&y!==null,a0=Ee(D),D0=!D[0].isVoid,S0=A0-2,vx=B(D),sx=D[0],Cx=D[1],rA=[C,w0,L,G,uA,sx.fromWireType.bind(sx),Cx?.toWireType.bind(Cx)],Rx=2;Rx<A0;++Rx){var wA=D[Rx];rA.push(wA.toWireType.bind(wA))}if(!a0)for(var Rx=t0?1:2;Rx<D.length;++Rx)D[Rx].destructorFunction!==null&&rA.push(D[Rx].destructorFunction);rA.push(VA,vx,S0);var YA=f(D,t0,D0,e0)(...rA);return le(C,YA)}var h=(C,D,y,L,G,e0)=>{k(D>0);var A0=yx(D,y);G=Ox(L,G),DA([],[C],t0=>{t0=t0[0];var a0=`constructor ${t0.name}`;if(t0.registeredClass.constructor_body===void 0&&(t0.registeredClass.constructor_body=[]),t0.registeredClass.constructor_body[D-1]!==void 0)throw new tx(`Cannot register multiple constructors with identical number of parameters (${D-1}) for class '${t0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return t0.registeredClass.constructor_body[D-1]=()=>{zA(`Cannot construct ${t0.name} due to unbound types`,A0)},DA([],A0,D0=>(D0.splice(1,0,null),t0.registeredClass.constructor_body[D-1]=p(a0,D0,null,G,e0),[])),[]})},w=(C,D,y)=>(C instanceof Object||w0(`${y} with invalid "this": ${C}`),C instanceof D.registeredClass.constructor||w0(`${y} incompatible with "this" of type ${C.constructor.name}`),C.$$.ptr||w0(`cannot call emscripten binding method ${y} on deleted object`),ce(C.$$.ptr,C.$$.ptrType.registeredClass,D.registeredClass)),P=(C,D,y,L,G,e0,A0,t0,a0,D0)=>{D=kx(D),G=Ox(L,G),DA([],[C],S0=>{S0=S0[0];var vx=`${S0.name}.${D}`,sx={get(){zA(`Cannot access ${vx} due to unbound types`,[y,A0])},enumerable:!0,configurable:!0};return a0?sx.set=()=>zA(`Cannot access ${vx} due to unbound types`,[y,A0]):sx.set=Cx=>w0(vx+" is a read-only property"),Object.defineProperty(S0.registeredClass.instancePrototype,D,sx),DA([],a0?[y,A0]:[y],Cx=>{var rA=Cx[0],Rx={get(){var Be=w(this,S0,vx+" getter");return rA.fromWireType(G(e0,Be))},enumerable:!0};if(a0){a0=Ox(t0,a0);var wA=Cx[1];Rx.set=function(Be){var YA=w(this,S0,vx+" setter"),it=[];a0(D0,YA,wA.toWireType(it,Be)),uA(it)}}return Object.defineProperty(S0.registeredClass.instancePrototype,D,Rx),[]}),[]})},J=[],Q=[0,1,,1,null,1,!0,1,!1,1],l0=C=>{if(C>9&&--Q[C+1]===0){k(Q[C]!==void 0,"decref for unallocated handle");var D=Q[C];Q[C]=void 0,J.push(C)}},k0={toValue:C=>(C||w0(`Cannot use deleted val. handle = ${C}`),k(C===2||Q[C]!==void 0&&C%2===0,`invalid handle: ${C}`),Q[C]),toHandle:C=>{switch(C){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let D=J.pop()||Q.length;return Q[D]=C,Q[D+1]=1,D}}}},Z0={name:"emscripten::val",fromWireType:C=>{var D=k0.toValue(C);return l0(C),D},toWireType:(C,D)=>k0.toHandle(D),readValueFromPointer:K,destructorFunction:null},J0=C=>$x(C,Z0),O0=(C,D)=>{switch(D){case 4:return function(y){return this.fromWireType(Ye[y>>2])};case 8:return function(y){return this.fromWireType(ne[y>>3])};default:throw new TypeError(`invalid float width (${D}): ${C}`)}},q0=(C,D,y)=>{D=kx(D),$x(C,{name:D,fromWireType:L=>L,toWireType:(L,G)=>{if(typeof G!="number"&&typeof G!="boolean")throw new TypeError(`Cannot convert ${pA(G)} to ${D}`);return G},readValueFromPointer:O0(D,y),destructorFunction:null})},cx=C=>{C=C.trim();let D=C.indexOf("(");return D===-1?C:(k(C.endsWith(")"),"Parentheses for argument names should match."),C.slice(0,D))},wx=(C,D,y,L,G,e0,A0,t0)=>{var a0=yx(D,y);C=kx(C),C=cx(C),G=Ox(L,G,A0),rr(C,function(){zA(`Cannot call ${C} due to unbound types`,a0)},D-1),DA([],a0,D0=>{var S0=[D0[0],null].concat(D0.slice(1));return ar(C,p(C,S0,null,G,e0,A0),D-1),[]})},Gx=(C,D,y,L,G)=>{D=kx(D);let e0=L===0,A0=a0=>a0;if(e0){var t0=32-8*y;A0=a0=>a0<<t0>>>t0,G=A0(G)}$x(C,{name:D,fromWireType:A0,toWireType:(a0,D0)=>{if(typeof D0!="number"&&typeof D0!="boolean")throw new TypeError(`Cannot convert "${pA(D0)}" to ${D}`);return FA(D,D0,L,G),D0},readValueFromPointer:GA(D,y,L!==0),destructorFunction:null})},Wx=(C,D,y)=>{var L=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],G=L[D];function e0(A0){var t0=P0[A0>>2],a0=P0[A0+4>>2];return new G(aA.buffer,a0,t0)}y=kx(y),$x(C,{name:y,fromWireType:e0,readValueFromPointer:e0},{ignoreDuplicateRegistrations:!0})},Xx=(C,D,y,L)=>{if(k(typeof C=="string",`stringToUTF8Array expects a string (got ${typeof C})`),!(L>0))return 0;for(var G=y,e0=y+L-1,A0=0;A0<C.length;++A0){var t0=C.codePointAt(A0);if(t0<=127){if(y>=e0)break;D[y++]=t0}else if(t0<=2047){if(y+1>=e0)break;D[y++]=192|t0>>6,D[y++]=128|t0&63}else if(t0<=65535){if(y+2>=e0)break;D[y++]=224|t0>>12,D[y++]=128|t0>>6&63,D[y++]=128|t0&63}else{if(y+3>=e0)break;t0>1114111&&Lx(`Invalid Unicode code point ${Fx(t0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),D[y++]=240|t0>>18,D[y++]=128|t0>>12&63,D[y++]=128|t0>>6&63,D[y++]=128|t0&63,A0++}}return D[y]=0,y-G},WA=(C,D,y)=>(k(typeof y=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Xx(C,lx,D,y)),eA=C=>{for(var D=0,y=0;y<C.length;++y){var L=C.charCodeAt(y);L<=127?D++:L<=2047?D+=2:L>=55296&&L<=57343?(D+=4,++y):D+=3}return D},vA=globalThis.TextDecoder&&new TextDecoder,ux=(C,D,y,L)=>{var G=D+y;if(L)return G;for(;C[D]&&!(D>=G);)++D;return D},Ir=(C,D=0,y,L)=>{var G=ux(C,D,y,L);if(G-D>16&&C.buffer&&vA)return vA.decode(C.subarray(D,G));for(var e0="";D<G;){var A0=C[D++];if(!(A0&128)){e0+=String.fromCharCode(A0);continue}var t0=C[D++]&63;if((A0&224)==192){e0+=String.fromCharCode((A0&31)<<6|t0);continue}var a0=C[D++]&63;if((A0&240)==224?A0=(A0&15)<<12|t0<<6|a0:((A0&248)!=240&&Lx(`Invalid UTF-8 leading byte ${Fx(A0)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),A0=(A0&7)<<18|t0<<12|a0<<6|C[D++]&63),A0<65536)e0+=String.fromCharCode(A0);else{var D0=A0-65536;e0+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return e0},wt=(C,D,y)=>(k(typeof C=="number",`UTF8ToString expects a number (got ${typeof C})`),C?Ir(lx,C,D,y):""),St=(C,D)=>{D=kx(D);var y=!0;$x(C,{name:D,fromWireType(L){var G=P0[L>>2],e0=L+4,A0;if(y)A0=wt(e0,G,!0);else{A0="";for(var t0=0;t0<G;++t0)A0+=String.fromCharCode(lx[e0+t0])}return Te(L),A0},toWireType(L,G){G instanceof ArrayBuffer&&(G=new Uint8Array(G));var e0,A0=typeof G=="string";A0||ArrayBuffer.isView(G)&&G.BYTES_PER_ELEMENT==1||w0("Cannot pass non-string to std::string"),y&&A0?e0=eA(G):e0=G.length;var t0=Ii(4+e0+1),a0=t0+4;if(P0[t0>>2]=e0,A0)if(y)WA(G,a0,e0+1);else for(var D0=0;D0<e0;++D0){var S0=G.charCodeAt(D0);S0>255&&(Te(t0),w0("String has UTF-16 code units that do not fit in 8 bits")),lx[a0+D0]=S0}else lx.set(G,a0);return L!==null&&L.push(Te,t0),t0},readValueFromPointer:K,destructorFunction(L){Te(L)}})},qe=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,qt=(C,D,y)=>{k(C%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var L=C>>1,G=ux(fx,L,D/2,y);if(G-L>16&&qe)return qe.decode(fx.subarray(L,G));for(var e0="",A0=L;A0<G;++A0){var t0=fx[A0];e0+=String.fromCharCode(t0)}return e0},tt=(C,D,y)=>{if(k(D%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof y=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<2)return 0;y-=2;for(var L=D,G=y<C.length*2?y/2:C.length,e0=0;e0<G;++e0){var A0=C.charCodeAt(e0);hA[D>>1]=A0,D+=2}return hA[D>>1]=0,D-L},or=C=>C.length*2,XA=(C,D,y)=>{k(C%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var L="",G=C>>2,e0=0;!(e0>=D/4);e0++){var A0=P0[G+e0];if(!A0&&!y)break;L+=String.fromCodePoint(A0)}return L},F=(C,D,y)=>{if(k(D%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof y=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<4)return 0;for(var L=D,G=L+y-4,e0=0;e0<C.length;++e0){var A0=C.codePointAt(e0);if(A0>65535&&e0++,gA[D>>2]=A0,D+=4,D+4>G)break}return gA[D>>2]=0,D-L},n=C=>{for(var D=0,y=0;y<C.length;++y){var L=C.codePointAt(y);L>65535&&y++,D+=4}return D},o=(C,D,y)=>{y=kx(y);var L,G,e0;D===2?(L=qt,G=tt,e0=or):(k(D===4,"only 2-byte and 4-byte strings are currently supported"),L=XA,G=F,e0=n),$x(C,{name:y,fromWireType:A0=>{var t0=P0[A0>>2],a0=L(A0+4,t0*D,!0);return Te(A0),a0},toWireType:(A0,t0)=>{typeof t0!="string"&&w0(`Cannot pass non-string to C++ string type ${y}`);var a0=e0(t0),D0=Ii(4+a0+D);return P0[D0>>2]=a0/D,G(t0,D0+4,a0+D),A0!==null&&A0.push(Te,D0),D0},readValueFromPointer:K,destructorFunction(A0){Te(A0)}})},v=(C,D,y,L,G,e0)=>{V0[C]={name:kx(D),rawConstructor:Ox(y,L),rawDestructor:Ox(G,e0),fields:[]}},E=(C,D,y,L,G,e0,A0,t0,a0,D0)=>{V0[C].fields.push({fieldName:kx(D),getterReturnType:y,getter:Ox(L,G),getterContext:e0,setterArgumentType:A0,setter:Ox(t0,a0),setterContext:D0})},d=(C,D)=>{D=kx(D),$x(C,{isVoid:!0,name:D,fromWireType:()=>{},toWireType:(y,L)=>{}})},j=[],S=C=>{var D=j.length;return j.push(C),D},I=(C,D)=>{var y=xA[C];return y===void 0&&w0(`${D} has unknown type ${_A(C)}`),y},Z=(C,D)=>{for(var y=new Array(C),L=0;L<C;++L)y[L]=I(P0[D+L*4>>2],`parameter ${L}`);return y},d0=(C,D,y)=>{var L=[],G=C(L,y);return L.length&&(P0[D>>2]=k0.toHandle(L)),G},g0={},u0=C=>{var D=g0[C];return D===void 0?kx(C):D},E0=(C,D,y)=>{var L=8,[G,...e0]=Z(C,D),A0=G.toWireType.bind(G),t0=e0.map(Cx=>Cx.readValueFromPointer.bind(Cx));C--;var a0={toValue:k0.toValue},D0=t0.map((Cx,rA)=>{var Rx=`argFromPtr${rA}`;return a0[Rx]=Cx,`${Rx}(args${rA?"+"+rA*L:""})`}),S0;switch(y){case 0:S0="toValue(handle)";break;case 2:S0="new (toValue(handle))";break;case 3:S0="";break;case 1:a0.getStringOrSymbol=u0,S0="toValue(handle)[getStringOrSymbol(methodName)]";break}S0+=`(${D0})`,G.isVoid||(a0.toReturnWire=A0,a0.emval_returnValue=d0,S0=`return emval_returnValue(toReturnWire, destructorsRef, ${S0})`),S0=`return function (handle, methodName, destructorsRef, args) {
2625
+ ${D0}`,new Function(vx,D0)}function B(C){for(var D=C.length-2,y=C.length-1;y>=2&&C[y].optional;--y)D--;return D}function p(C,D,y,R,G,e0){var A0=D.length;A0<2&&w0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!e0,"async bindings are only supported with JSPI");for(var t0=D[1]!==null&&y!==null,a0=Ce(D),D0=!D[0].isVoid,S0=A0-2,vx=B(D),sx=D[0],Cx=D[1],rA=[C,w0,R,G,uA,sx.fromWireType.bind(sx),Cx?.toWireType.bind(Cx)],Rx=2;Rx<A0;++Rx){var SA=D[Rx];rA.push(SA.toWireType.bind(SA))}if(!a0)for(var Rx=t0?1:2;Rx<D.length;++Rx)D[Rx].destructorFunction!==null&&rA.push(D[Rx].destructorFunction);rA.push(VA,vx,S0);var YA=l(D,t0,D0,e0)(...rA);return Ee(C,YA)}var h=(C,D,y,R,G,e0)=>{k(D>0);var A0=yx(D,y);G=Ox(R,G),DA([],[C],t0=>{t0=t0[0];var a0=`constructor ${t0.name}`;if(t0.registeredClass.constructor_body===void 0&&(t0.registeredClass.constructor_body=[]),t0.registeredClass.constructor_body[D-1]!==void 0)throw new tx(`Cannot register multiple constructors with identical number of parameters (${D-1}) for class '${t0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return t0.registeredClass.constructor_body[D-1]=()=>{zA(`Cannot construct ${t0.name} due to unbound types`,A0)},DA([],A0,D0=>(D0.splice(1,0,null),t0.registeredClass.constructor_body[D-1]=p(a0,D0,null,G,e0),[])),[]})},w=(C,D,y)=>(C instanceof Object||w0(`${y} with invalid "this": ${C}`),C instanceof D.registeredClass.constructor||w0(`${y} incompatible with "this" of type ${C.constructor.name}`),C.$$.ptr||w0(`cannot call emscripten binding method ${y} on deleted object`),Be(C.$$.ptr,C.$$.ptrType.registeredClass,D.registeredClass)),P=(C,D,y,R,G,e0,A0,t0,a0,D0)=>{D=kx(D),G=Ox(R,G),DA([],[C],S0=>{S0=S0[0];var vx=`${S0.name}.${D}`,sx={get(){zA(`Cannot access ${vx} due to unbound types`,[y,A0])},enumerable:!0,configurable:!0};return a0?sx.set=()=>zA(`Cannot access ${vx} due to unbound types`,[y,A0]):sx.set=Cx=>w0(vx+" is a read-only property"),Object.defineProperty(S0.registeredClass.instancePrototype,D,sx),DA([],a0?[y,A0]:[y],Cx=>{var rA=Cx[0],Rx={get(){var de=w(this,S0,vx+" getter");return rA.fromWireType(G(e0,de))},enumerable:!0};if(a0){a0=Ox(t0,a0);var SA=Cx[1];Rx.set=function(de){var YA=w(this,S0,vx+" setter"),it=[];a0(D0,YA,SA.toWireType(it,de)),uA(it)}}return Object.defineProperty(S0.registeredClass.instancePrototype,D,Rx),[]}),[]})},J=[],Q=[0,1,,1,null,1,!0,1,!1,1],l0=C=>{if(C>9&&--Q[C+1]===0){k(Q[C]!==void 0,"decref for unallocated handle");var D=Q[C];Q[C]=void 0,J.push(C)}},k0={toValue:C=>(C||w0(`Cannot use deleted val. handle = ${C}`),k(C===2||Q[C]!==void 0&&C%2===0,`invalid handle: ${C}`),Q[C]),toHandle:C=>{switch(C){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let D=J.pop()||Q.length;return Q[D]=C,Q[D+1]=1,D}}}},Z0={name:"emscripten::val",fromWireType:C=>{var D=k0.toValue(C);return l0(C),D},toWireType:(C,D)=>k0.toHandle(D),readValueFromPointer:K,destructorFunction:null},J0=C=>$x(C,Z0),O0=(C,D)=>{switch(D){case 4:return function(y){return this.fromWireType(Ye[y>>2])};case 8:return function(y){return this.fromWireType(se[y>>3])};default:throw new TypeError(`invalid float width (${D}): ${C}`)}},q0=(C,D,y)=>{D=kx(D),$x(C,{name:D,fromWireType:R=>R,toWireType:(R,G)=>{if(typeof G!="number"&&typeof G!="boolean")throw new TypeError(`Cannot convert ${pA(G)} to ${D}`);return G},readValueFromPointer:O0(D,y),destructorFunction:null})},cx=C=>{C=C.trim();let D=C.indexOf("(");return D===-1?C:(k(C.endsWith(")"),"Parentheses for argument names should match."),C.slice(0,D))},wx=(C,D,y,R,G,e0,A0,t0)=>{var a0=yx(D,y);C=kx(C),C=cx(C),G=Ox(R,G,A0),rr(C,function(){zA(`Cannot call ${C} due to unbound types`,a0)},D-1),DA([],a0,D0=>{var S0=[D0[0],null].concat(D0.slice(1));return ar(C,p(C,S0,null,G,e0,A0),D-1),[]})},Gx=(C,D,y,R,G)=>{D=kx(D);let e0=R===0,A0=a0=>a0;if(e0){var t0=32-8*y;A0=a0=>a0<<t0>>>t0,G=A0(G)}$x(C,{name:D,fromWireType:A0,toWireType:(a0,D0)=>{if(typeof D0!="number"&&typeof D0!="boolean")throw new TypeError(`Cannot convert "${pA(D0)}" to ${D}`);return FA(D,D0,R,G),D0},readValueFromPointer:GA(D,y,R!==0),destructorFunction:null})},Wx=(C,D,y)=>{var R=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],G=R[D];function e0(A0){var t0=P0[A0>>2],a0=P0[A0+4>>2];return new G(aA.buffer,a0,t0)}y=kx(y),$x(C,{name:y,fromWireType:e0,readValueFromPointer:e0},{ignoreDuplicateRegistrations:!0})},Xx=(C,D,y,R)=>{if(k(typeof C=="string",`stringToUTF8Array expects a string (got ${typeof C})`),!(R>0))return 0;for(var G=y,e0=y+R-1,A0=0;A0<C.length;++A0){var t0=C.codePointAt(A0);if(t0<=127){if(y>=e0)break;D[y++]=t0}else if(t0<=2047){if(y+1>=e0)break;D[y++]=192|t0>>6,D[y++]=128|t0&63}else if(t0<=65535){if(y+2>=e0)break;D[y++]=224|t0>>12,D[y++]=128|t0>>6&63,D[y++]=128|t0&63}else{if(y+3>=e0)break;t0>1114111&&Lx(`Invalid Unicode code point ${Fx(t0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),D[y++]=240|t0>>18,D[y++]=128|t0>>12&63,D[y++]=128|t0>>6&63,D[y++]=128|t0&63,A0++}}return D[y]=0,y-G},WA=(C,D,y)=>(k(typeof y=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Xx(C,lx,D,y)),eA=C=>{for(var D=0,y=0;y<C.length;++y){var R=C.charCodeAt(y);R<=127?D++:R<=2047?D+=2:R>=55296&&R<=57343?(D+=4,++y):D+=3}return D},vA=globalThis.TextDecoder&&new TextDecoder,ux=(C,D,y,R)=>{var G=D+y;if(R)return G;for(;C[D]&&!(D>=G);)++D;return D},Ir=(C,D=0,y,R)=>{var G=ux(C,D,y,R);if(G-D>16&&C.buffer&&vA)return vA.decode(C.subarray(D,G));for(var e0="";D<G;){var A0=C[D++];if(!(A0&128)){e0+=String.fromCharCode(A0);continue}var t0=C[D++]&63;if((A0&224)==192){e0+=String.fromCharCode((A0&31)<<6|t0);continue}var a0=C[D++]&63;if((A0&240)==224?A0=(A0&15)<<12|t0<<6|a0:((A0&248)!=240&&Lx(`Invalid UTF-8 leading byte ${Fx(A0)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),A0=(A0&7)<<18|t0<<12|a0<<6|C[D++]&63),A0<65536)e0+=String.fromCharCode(A0);else{var D0=A0-65536;e0+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return e0},St=(C,D,y)=>(k(typeof C=="number",`UTF8ToString expects a number (got ${typeof C})`),C?Ir(lx,C,D,y):""),qt=(C,D)=>{D=kx(D);var y=!0;$x(C,{name:D,fromWireType(R){var G=P0[R>>2],e0=R+4,A0;if(y)A0=St(e0,G,!0);else{A0="";for(var t0=0;t0<G;++t0)A0+=String.fromCharCode(lx[e0+t0])}return $e(R),A0},toWireType(R,G){G instanceof ArrayBuffer&&(G=new Uint8Array(G));var e0,A0=typeof G=="string";A0||ArrayBuffer.isView(G)&&G.BYTES_PER_ELEMENT==1||w0("Cannot pass non-string to std::string"),y&&A0?e0=eA(G):e0=G.length;var t0=Ri(4+e0+1),a0=t0+4;if(P0[t0>>2]=e0,A0)if(y)WA(G,a0,e0+1);else for(var D0=0;D0<e0;++D0){var S0=G.charCodeAt(D0);S0>255&&($e(t0),w0("String has UTF-16 code units that do not fit in 8 bits")),lx[a0+D0]=S0}else lx.set(G,a0);return R!==null&&R.push($e,t0),t0},readValueFromPointer:K,destructorFunction(R){$e(R)}})},Pe=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Tt=(C,D,y)=>{k(C%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var R=C>>1,G=ux(fx,R,D/2,y);if(G-R>16&&Pe)return Pe.decode(fx.subarray(R,G));for(var e0="",A0=R;A0<G;++A0){var t0=fx[A0];e0+=String.fromCharCode(t0)}return e0},tt=(C,D,y)=>{if(k(D%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof y=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<2)return 0;y-=2;for(var R=D,G=y<C.length*2?y/2:C.length,e0=0;e0<G;++e0){var A0=C.charCodeAt(e0);gA[D>>1]=A0,D+=2}return gA[D>>1]=0,D-R},or=C=>C.length*2,XA=(C,D,y)=>{k(C%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var R="",G=C>>2,e0=0;!(e0>=D/4);e0++){var A0=P0[G+e0];if(!A0&&!y)break;R+=String.fromCodePoint(A0)}return R},F=(C,D,y)=>{if(k(D%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof y=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),y??(y=2147483647),y<4)return 0;for(var R=D,G=R+y-4,e0=0;e0<C.length;++e0){var A0=C.codePointAt(e0);if(A0>65535&&e0++,kA[D>>2]=A0,D+=4,D+4>G)break}return kA[D>>2]=0,D-R},n=C=>{for(var D=0,y=0;y<C.length;++y){var R=C.codePointAt(y);R>65535&&y++,D+=4}return D},o=(C,D,y)=>{y=kx(y);var R,G,e0;D===2?(R=Tt,G=tt,e0=or):(k(D===4,"only 2-byte and 4-byte strings are currently supported"),R=XA,G=F,e0=n),$x(C,{name:y,fromWireType:A0=>{var t0=P0[A0>>2],a0=R(A0+4,t0*D,!0);return $e(A0),a0},toWireType:(A0,t0)=>{typeof t0!="string"&&w0(`Cannot pass non-string to C++ string type ${y}`);var a0=e0(t0),D0=Ri(4+a0+D);return P0[D0>>2]=a0/D,G(t0,D0+4,a0+D),A0!==null&&A0.push($e,D0),D0},readValueFromPointer:K,destructorFunction(A0){$e(A0)}})},f=(C,D,y,R,G,e0)=>{V0[C]={name:kx(D),rawConstructor:Ox(y,R),rawDestructor:Ox(G,e0),fields:[]}},E=(C,D,y,R,G,e0,A0,t0,a0,D0)=>{V0[C].fields.push({fieldName:kx(D),getterReturnType:y,getter:Ox(R,G),getterContext:e0,setterArgumentType:A0,setter:Ox(t0,a0),setterContext:D0})},d=(C,D)=>{D=kx(D),$x(C,{isVoid:!0,name:D,fromWireType:()=>{},toWireType:(y,R)=>{}})},j=[],S=C=>{var D=j.length;return j.push(C),D},I=(C,D)=>{var y=xA[C];return y===void 0&&w0(`${D} has unknown type ${wA(C)}`),y},Z=(C,D)=>{for(var y=new Array(C),R=0;R<C;++R)y[R]=I(P0[D+R*4>>2],`parameter ${R}`);return y},d0=(C,D,y)=>{var R=[],G=C(R,y);return R.length&&(P0[D>>2]=k0.toHandle(R)),G},g0={},u0=C=>{var D=g0[C];return D===void 0?kx(C):D},E0=(C,D,y)=>{var R=8,[G,...e0]=Z(C,D),A0=G.toWireType.bind(G),t0=e0.map(Cx=>Cx.readValueFromPointer.bind(Cx));C--;var a0={toValue:k0.toValue},D0=t0.map((Cx,rA)=>{var Rx=`argFromPtr${rA}`;return a0[Rx]=Cx,`${Rx}(args${rA?"+"+rA*R:""})`}),S0;switch(y){case 0:S0="toValue(handle)";break;case 2:S0="new (toValue(handle))";break;case 3:S0="";break;case 1:a0.getStringOrSymbol=u0,S0="toValue(handle)[getStringOrSymbol(methodName)]";break}S0+=`(${D0})`,G.isVoid||(a0.toReturnWire=A0,a0.emval_returnValue=d0,S0=`return emval_returnValue(toReturnWire, destructorsRef, ${S0})`),S0=`return function (handle, methodName, destructorsRef, args) {
2626
2626
  ${S0}
2627
- }`;var vx=new Function(Object.keys(a0),S0)(...Object.values(a0)),sx=`methodCaller<(${e0.map(Cx=>Cx.name)}) => ${G.name}>`;return S(le(sx,vx))},B0=C=>(C=u0(C),k0.toHandle(i[C])),M0=(C,D)=>(C=k0.toValue(C),D=k0.toValue(D),k0.toHandle(C[D])),xx=C=>{C>9&&(Q[C+1]+=1)},Ex=(C,D,y,L,G)=>j[C](D,y,L,G),Dx=C=>k0.toHandle(u0(C)),Nx=C=>{var D=k0.toValue(C);uA(D),l0(C)},Ux=()=>2147483648,Ix=(C,D)=>(k(D,"alignment argument is required"),Math.ceil(C/D)*D),Bx=C=>{var D=cn.buffer.byteLength,y=(C-D+65535)/65536|0;try{return cn.grow(y),dx(),1}catch(L){z(`growMemory: Attempted to grow heap from ${D} bytes to ${C} bytes, but got error: ${L}`)}},Mx=C=>{var D=lx.length;C>>>=0,k(C>D);var y=Ux();if(C>y)return z(`Cannot enlarge memory, requested ${C} bytes, but the limit is ${y} bytes!`),!1;for(var L=1;L<=4;L*=2){var G=D*(1+.2/L);G=Math.min(G,C+100663296);var e0=Math.min(y,Ix(Math.max(C,G),65536)),A0=Bx(e0);if(A0)return!0}return z(`Failed to grow the heap from ${D} bytes to ${e0} bytes, not enough memory!`),!1},Kl=C=>{H0("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},zl=9007199254740992,Vl=-9007199254740992,Wl=C=>C<Vl||C>zl?NaN:Number(C);function Xl(C,D,y,L){return D=Wl(D),70}var Ti=[null,[],[]],Pi=(C,D)=>{var y=Ti[C];k(y),D===0||D===10?((C===1?N:z)(Ir(y)),y.length=0):y.push(D)},Ob=()=>{Fo(0),Ti[1].length&&Pi(1,10),Ti[2].length&&Pi(2,10)},Yl=(C,D,y,L)=>{for(var G=0,e0=0;e0<y;e0++){var A0=P0[D>>2],t0=P0[D+4>>2];D+=8;for(var a0=0;a0<t0;a0++)Pi(C,lx[A0+a0]);G+=t0}return P0[L>>2]=G,0},Ql=()=>{if(u){var C=require("crypto");return D=>C.randomFillSync(D)}return D=>(crypto.getRandomValues(D),0)},io=C=>(io=Ql())(C),Zl=(C,D)=>io(lx.subarray(C,C+D)),xc=(C,D)=>{if(Mr)for(var y=C;y<C+D;y++){var L=we(y);L&&Mr.set(L,y)}},Mr,Ac=C=>(Mr||(Mr=new WeakMap,xc(0,Rr.length)),Mr.get(C)||0),$i=[],ec=()=>{if($i.length)return $i.pop();try{return Rr.grow(1)}catch(C){if(!(C instanceof RangeError))throw C;H0("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Ni=(C,D)=>{Rr.set(C,D),KA[C]=Rr.get(C)},so=C=>{let D=C.length;return k(D<16384),[D%128|128,D>>7,...C]},rc={i:127,p:127,j:126,f:125,d:124,e:111},ao=C=>so(Array.from(C,D=>{var y=rc[D];return k(y,`invalid signature char: ${D}`),y})),tc=(C,D)=>{var y=Uint8Array.of(0,97,115,109,1,0,0,0,1,...so([1,96,...ao(D.slice(1)),...ao(D[0]==="v"?"":D[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),L=new WebAssembly.Module(y),G=new WebAssembly.Instance(L,{e:{f:C}}),e0=G.exports.f;return e0},nc=(C,D)=>{k(typeof C<"u");var y=Ac(C);if(y)return y;var L=ec();try{Ni(L,C)}catch(e0){if(!(e0 instanceof TypeError))throw e0;k(typeof D<"u","Missing signature argument to addFunction: "+C);var G=tc(C,D);Ni(L,G)}return Mr.set(C,L),L},ic=C=>{Mr.delete(we(C)),Ni(C,null),$i.push(C)};er(),sr(),k(Q.length===10);{if(i.noExitRuntime&&(ie=i.noExitRuntime),i.print&&(N=i.print),i.printErr&&(z=i.printErr),i.wasmBinary&&(F0=i.wasmBinary),i.FS_createDataFile=ox.createDataFile,i.FS_createPreloadedFile=ox.createPreloadedFile,oc(),i.arguments&&(m=i.arguments),i.thisProgram&&(g=i.thisProgram),k(typeof i.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof i.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof i.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof i.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof i.read>"u","Module.read option was removed"),k(typeof i.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof i.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof i.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof i.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof i.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof i.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof i.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof i.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();r0("preInit")}i.addFunction=nc,i.removeFunction=ic;var sc=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];sc.forEach(v0);var ac=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];ac.forEach(c0);function oc(){f0("fetchSettings"),f0("logReadFiles"),f0("loadSplitModule"),f0("onMalloc"),f0("onRealloc"),f0("onFree"),f0("onSbrkGrow")}var oo=x0("___getTypeName"),Ii=x0("_malloc"),Te=x0("_free"),Fc=i._MdnCom_ESCHandler=x0("_MdnCom_ESCHandler"),vc=i._MdnCom_Free=x0("_MdnCom_Free"),fc=i._MdnCom_RawRx=x0("_MdnCom_RawRx"),lc=i._MdnCom_CryptoSelfTest=x0("_MdnCom_CryptoSelfTest"),cc=i._MdnCom_SetCompanionKeypair=x0("_MdnCom_SetCompanionKeypair"),Ec=i._MdnCom_InitiateEcsHandshake=x0("_MdnCom_InitiateEcsHandshake"),Bc=i._MdnCom_SetSecDebug=x0("_MdnCom_SetSecDebug"),Cc=i._MdnCom_GetEcsState=x0("_MdnCom_GetEcsState"),dc=i._MdnCom_ResetEcs=x0("_MdnCom_ResetEcs"),uc=i._MdnCom_RegisterEcsHandshakeCallback=x0("_MdnCom_RegisterEcsHandshakeCallback"),Dc=i._MdnCom_Init=x0("_MdnCom_Init"),pc=i._SendUtoQuery=x0("_SendUtoQuery"),bc=i._SendUtoCmdExt=x0("_SendUtoCmdExt"),Fo=x0("_fflush"),Mi=x0("_emscripten_stack_get_end"),mc=x0("_emscripten_stack_get_base"),jc=x0("_strerror"),vo=x0("_emscripten_stack_init"),hc=x0("_emscripten_stack_get_free"),gc=x0("__emscripten_stack_restore"),kc=x0("__emscripten_stack_alloc"),yc=x0("_emscripten_stack_get_current"),_c=x0("memory"),wc=x0("__indirect_function_table"),cn=x0("wasmMemory"),Rr=x0("wasmTable");function Sc(C){k(typeof C.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof C.malloc<"u","missing Wasm export: malloc"),k(typeof C.free<"u","missing Wasm export: free"),k(typeof C.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof C.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof C.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof C.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof C.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof C.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof C.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof C.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof C.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof C.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof C.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof C.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof C.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof C.fflush<"u","missing Wasm export: fflush"),k(typeof C.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof C.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof C.strerror<"u","missing Wasm export: strerror"),k(typeof C.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof C.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof C._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof C._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof C.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof C.memory<"u","missing Wasm export: memory"),k(typeof C.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),oo=W0("__getTypeName",1),Ii=W0("malloc",1),Te=W0("free",1),Fc=i._MdnCom_ESCHandler=W0("MdnCom_ESCHandler",1),vc=i._MdnCom_Free=W0("MdnCom_Free",1),fc=i._MdnCom_RawRx=W0("MdnCom_RawRx",1),lc=i._MdnCom_CryptoSelfTest=W0("MdnCom_CryptoSelfTest",0),cc=i._MdnCom_SetCompanionKeypair=W0("MdnCom_SetCompanionKeypair",2),Ec=i._MdnCom_InitiateEcsHandshake=W0("MdnCom_InitiateEcsHandshake",0),Bc=i._MdnCom_SetSecDebug=W0("MdnCom_SetSecDebug",1),Cc=i._MdnCom_GetEcsState=W0("MdnCom_GetEcsState",0),dc=i._MdnCom_ResetEcs=W0("MdnCom_ResetEcs",0),uc=i._MdnCom_RegisterEcsHandshakeCallback=W0("MdnCom_RegisterEcsHandshakeCallback",1),Dc=i._MdnCom_Init=W0("MdnCom_Init",2),pc=i._SendUtoQuery=W0("SendUtoQuery",2),bc=i._SendUtoCmdExt=W0("SendUtoCmdExt",4),Fo=W0("fflush",1),Mi=C.emscripten_stack_get_end,mc=C.emscripten_stack_get_base,jc=W0("strerror",1),vo=C.emscripten_stack_init,hc=C.emscripten_stack_get_free,gc=C._emscripten_stack_restore,kc=C._emscripten_stack_alloc,yc=C.emscripten_stack_get_current,_c=cn=C.memory,wc=Rr=C.__indirect_function_table}var fo={__cxa_throw:dA,_abort_js:hr,_embind_finalize_value_object:ae,_embind_register_bigint:gr,_embind_register_bool:s,_embind_register_class:Se,_embind_register_class_constructor:h,_embind_register_class_property:P,_embind_register_emval:J0,_embind_register_float:q0,_embind_register_function:wx,_embind_register_integer:Gx,_embind_register_memory_view:Wx,_embind_register_std_string:St,_embind_register_std_wstring:o,_embind_register_value_object:v,_embind_register_value_object_field:E,_embind_register_void:d,_emval_create_invoker:E0,_emval_decref:l0,_emval_get_module_property:B0,_emval_get_property:M0,_emval_incref:xx,_emval_invoke:Ex,_emval_new_cstring:Dx,_emval_run_destructors:Nx,emscripten_resize_heap:Mx,fd_close:Kl,fd_seek:Xl,fd_write:Yl,random_get:Zl},lo;function qc(){vo(),W()}function Tc(){qc(),iA();function C(){k(!lo),lo=!0,i.calledRun=!0,!R&&(LA(),b0?.(i),i.onRuntimeInitialized?.(),r0("onRuntimeInitialized"),k(!i._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),Kx())}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),C()},1)):C(),Y()}var nt;nt=await mr(),Tc(),L0?a=i:a=new Promise((C,D)=>{b0=C,I0=D});for(let C of Object.keys(i))C in t||Object.defineProperty(t,C,{configurable:!0,get(){H0(`Access to module property ('${C}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return a}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),r8={};RB(r8,{API_STAMP_UNBOUNDED:()=>N8,AT_COMMANDS:()=>Hx,AT_COMMAND_TIMEOUT_MS:()=>fA,ApiBadRequestError:()=>R0,ApiForbiddenError:()=>ri,ApiMethodNotAllowedError:()=>oa,ApiNotFoundError:()=>PA,AtCommandHandler:()=>fu,AtDeviceError:()=>aa,AtHandlerDisposedError:()=>oA,BACKFILL_PENDING_HEADER:()=>qv,BACKFILL_PENDING_VALUE:()=>Tv,BLE_CONFIGURATION:()=>Pu,BLE_SCAN_TIMEOUT_MS:()=>Nu,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Eu,COMPANION_CERT_PATH:()=>ks,COMPANION_PRIVATE_KEY_SIZE:()=>l8,COMPANION_PUBLIC_KEY_SIZE:()=>f8,CertApiError:()=>Ot,CompanionAuthErrorKind:()=>vv,CompanionAuthManager:()=>cu,CompanionCertError:()=>ov,DDE_FIELD_UNUSED_INDEX:()=>T8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>B8,DEFAULT_RECONNECT_OPTIONS:()=>Dv,DLO_FILENAME:()=>ut,DdeMapper:()=>Vd,DdeUnknownAliasError:()=>Ys,DdeUnknownContainerError:()=>Er,DdeUnknownFieldError:()=>ia,DdeWriteForbiddenError:()=>Ht,DebugLogLevel:()=>w8,DebugMaster:()=>$C,DebugSync:()=>nv,DeviceManager:()=>qu,DeviceState:()=>uv,FW_FILENAME:()=>Ks,LIC_API_BASE_URL:()=>Av,LOCAL_API_LIFECYCLE_FLAGS:()=>Wr,LOCAL_API_SITE_MASK:()=>Ls,LOCAL_API_SITE_MASTER_KEYS:()=>Xt,LegacySync:()=>rv,LocalDataManager:()=>Ev,MANUFACTURER_CODE:()=>$u,MS_1999_12_31:()=>ys,MemoryStorage:()=>IC,Mutex:()=>Vs,OfflineSyncManager:()=>ru,RAW_TERMINAL_PATTERN:()=>sv,RESPONSE_PATTERNS:()=>nx,Rm2mStateManager:()=>_u,SYNC_LOGIC_MASK:()=>h8,SyncManager:()=>Fu,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>iv,USB_CONFIGURATION:()=>Tu,UplinkMode:()=>k8,UtoCommand:()=>d8,UtoESC:()=>g8,UtoFileFlag:()=>m8,UtoFileFlagInt:()=>j8,UtoFileType:()=>p8,UtoFlag:()=>b8,UtoMaster:()=>_8,UtoResult:()=>u8,UtoSplitTag:()=>D8,UtoTag:()=>zs,WebSocketBridge:()=>sa,applyBlueprintNames:()=>Z8,applyDecpl:()=>cd,assertValidRequestStamps:()=>mt,base64ToBytes:()=>gs,base64UrlToBytes:()=>cC,buildBlueprintNameMap:()=>Is,bytesToBase64:()=>Hn,bytesToBase64Url:()=>Us,checkDeviceCapabilities:()=>uu,computeDisplayValue:()=>cv,computeDisplayValues:()=>Rs,consoleLogger:()=>he,convertToString:()=>_s,crc16Modbus:()=>DC,crc32Ethernet:()=>Js,createDebugBufferState:()=>av,createLocalApiHandler:()=>KD,createLocalApiSession:()=>va,createSiteInfoFromDde:()=>x7,dbStampToStamp40:()=>je,decodeContainer:()=>Ps,decodeFloatm16:()=>J8,decodeLifecycleFlags:()=>jv,decodeRm2mStateResponse:()=>dv,decodeUplinkState:()=>Bv,deriveDeviceLifecycleMirror:()=>hv,encodeContainer:()=>Ns,encodeFloatm16:()=>K8,encodeLifecycleFlags:()=>la,encodeNulPaddedJson:()=>bv,encodeSerialNumber:()=>pC,extractBits:()=>Vn,formatApiStamp:()=>Dt,generateCompanionKeypair:()=>hs,getDeviceAssignment:()=>ev,isCertValid:()=>Hs,isDevicePushableTag:()=>P8,isUnusedField:()=>Le,isValidStamp:()=>Fa,mapLocalApiError:()=>Kv,nullLogger:()=>Jn,parseApiStamp:()=>bt,parseBlueprint:()=>Xd,parseDde:()=>Fd,parseMetadataResponse:()=>fv,parseNulPaddedJson:()=>Wt,parseRm2mStateParams:()=>Cv,parseSerialNumberFromDataView:()=>bC,parseValuesResponse:()=>lv,requestCompanionCert:()=>C8,resolveAuthErrorKind:()=>Bu,resolveBlueprintNameMap:()=>Vt,resolveContainerTag:()=>zn,resolveTagForContainer:()=>Rt,resolveTagInModel:()=>LC,routeLocalApiRequest:()=>Hv,spreadBits:()=>M8,stamp40ToDbHex:()=>TA,syncLogic:()=>Kn,systemTimeSource:()=>zt,toHex:()=>cr,toUint8Array:()=>ws,utoStack:()=>ix});zv.exports=OB(r8);var t8=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:On,n:Rn,Gx:SF,Gy:qF,a:as,d:os,h:UB}=t8,Lt=32,HB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Qx=(x="")=>{let A=new Error(x);throw HB(A,Qx),A},JB=x=>typeof x=="bigint",KB=x=>typeof x=="string",zB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Xr=(x,A,e="")=>{let r=zB(x),t=x?.length,a=A!==void 0;if(!r||a&&t!==A){let i=e&&`"${e}" `,l=a?` of length ${A}`:"",c=r?`length=${t}`:`type=${typeof x}`,u=i+"expected Uint8Array"+l+", got "+c;throw r?new RangeError(u):new TypeError(u)}return x},xi=x=>new Uint8Array(x),Os=x=>Uint8Array.from(x),n8=(x,A)=>x.toString(16).padStart(A,"0"),i8=x=>Array.from(Xr(x)).map(A=>n8(A,2)).join(""),Re={_0:48,_9:57,A:65,F:70,a:97,f:102},TF=x=>{if(x>=Re._0&&x<=Re._9)return x-Re._0;if(x>=Re.A&&x<=Re.F)return x-(Re.A-10);if(x>=Re.a&&x<=Re.f)return x-(Re.a-10)},s8=x=>{let A="hex invalid";if(!KB(x))return Qx(A);let e=x.length,r=e/2;if(e%2)return Qx(A);let t=xi(r);for(let a=0,i=0;a<r;a++,i+=2){let l=TF(x.charCodeAt(i)),c=TF(x.charCodeAt(i+1));if(l===void 0||c===void 0)return Qx(A);t[a]=l*16+c}return t},a8=()=>globalThis?.crypto,VB=()=>a8()?.subtle??Qx("crypto.subtle must be defined, consider polyfill"),o8=(...x)=>{let A=0;for(let t of x)A+=Xr(t).length;let e=xi(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},WB=(x=Lt)=>a8().getRandomValues(xi(x)),Gn=BigInt,Hr=(x,A,e,r="bad number: out of range")=>{if(!JB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},jx=(x,A=On)=>{let e=x%A;return e>=0n?e:A+e},PF=(1n<<255n)-1n,j0=x=>{x<0n&&Qx("negative coordinate");let A=(x>>255n)*19n+(x&PF);return A=(A>>255n)*19n+(A&PF),A%On},XB=x=>jx(x,Rn),YB=(x,A)=>{(x===0n||A<=0n)&&Qx("no inverse n="+x+" mod="+A);let e=jx(x,A),r=A,t=0n,a=1n,i=1n,l=0n;for(;e!==0n;){let c=r/e,u=r%e,b=t-i*c,m=a-l*c;r=e,e=u,t=i,a=l,i=b,l=m}return r===1n?jx(t,A):Qx("no inverse")},QB=x=>{let A=aC[x];return typeof A!="function"&&Qx("hashes."+x+" not set"),A},ZB=x=>Xr(x,64,"digest"),Fs=x=>x instanceof Kt?x:Qx("Point expected"),ms=2n**256n,Gs=class Jr{constructor(A,e,r,t){i0(this,"X"),i0(this,"Y"),i0(this,"Z"),i0(this,"T");let a=ms;this.X=Hr(A,0n,a),this.Y=Hr(e,0n,a),this.Z=Hr(r,1n,a),this.T=Hr(t,0n,a),Object.freeze(this)}static CURVE(){return t8}static fromAffine(A){return new Jr(A.x,A.y,1n,j0(A.x*A.y))}static fromBytes(A,e=!1){let r=os,t=Os(Xr(A,Lt)),a=A[31];t[31]=a&-129;let i=F8(t);Hr(i,0n,e?ms:On);let c=j0(i*i),u=jx(c-1n),b=j0(r*c+1n),{isValid:m,value:g}=eC(u,b);m||Qx("bad point: y not sqrt");let q=(g&1n)===1n,_=(a&128)!==0;return!e&&g===0n&&_&&Qx("bad point: x==0, isLastByteOdd"),_!==q&&(g=jx(-g)),new Jr(g,i,1n,j0(g*i))}static fromHex(A,e){return Jr.fromBytes(s8(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=as,e=os,r=this;if(r.is0())return Qx("bad point: ZERO");let{X:t,Y:a,Z:i,T:l}=r,c=j0(t*t),u=j0(a*a),b=j0(i*i),m=j0(b*b),g=j0(c*A),q=j0(b*(g+u)),_=jx(m+j0(e*j0(c*u)));if(q!==_)return Qx("bad point: equation left != right (1)");let $=j0(t*a),T=j0(i*l);return $!==T?Qx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:a,Y:i,Z:l}=Fs(A),c=j0(e*l),u=j0(a*t),b=j0(r*l),m=j0(i*t);return c===u&&b===m}is0(){return this.equals(zr)}negate(){return new Jr(jx(-this.X),this.Y,this.Z,jx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=as,a=j0(A*A),i=j0(e*e),l=j0(2n*r*r),c=j0(t*a),u=jx(A+e),b=jx(j0(u*u)-a-i),m=jx(c+i),g=jx(m-l),q=jx(c-i),_=j0(b*g),$=j0(m*q),T=j0(b*q),M=j0(g*m);return new Jr(_,$,M,T)}add(A){let{X:e,Y:r,Z:t,T:a}=this,{X:i,Y:l,Z:c,T:u}=Fs(A),b=as,m=os,g=j0(e*i),q=j0(r*l),_=j0(j0(a*m)*u),$=j0(t*c),T=jx(j0(jx(e+r)*jx(i+l))-g-q),M=jx($-_),N=jx($+_),z=jx(q-j0(b*g)),F0=j0(T*M),R=j0(N*z),k=j0(T*z),O=j0(M*N);return new Jr(F0,R,O,k)}subtract(A){return this.add(Fs(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(Hr(A,1n,Rn),!e&&this.is0()))return zr;if(A===1n)return this;if(this.equals(pt))return lC(A).p;let r=zr,t=pt;for(let a=this;A>0n;a=a.double(),A>>=1n)A&1n?r=r.add(a):e&&(t=t.add(a));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(zr))return{x:0n,y:1n};let t=YB(r,On);j0(r*t)!==1n&&Qx("invalid inverse");let a=j0(A*t),i=j0(e*t);return{x:a,y:i}}toBytes(){let{x:A,y:e}=this.toAffine(),r=xC(e);return r[31]|=A&1n?128:0,r}toHex(){return i8(this.toBytes())}clearCofactor(){return this.multiply(Gn(UB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(Rn/2n,!1).double();return Rn%2n&&(A=A.add(this)),A.is0()}};i0(Gs,"BASE");i0(Gs,"ZERO");var Kt=Gs,pt=new Kt(SF,qF,1n,jx(SF*qF)),zr=new Kt(0n,1n,1n,0n);Kt.BASE=pt;Kt.ZERO=zr;var xC=x=>s8(n8(Hr(x,0n,ms),64)).reverse(),F8=x=>Gn("0x"+i8(Os(Xr(x)).reverse())),me=(x,A)=>{let e=x;for(;A-- >0n;)e=j0(e*e);return e},AC=x=>{let A=j0(x*x),e=j0(A*x),r=j0(me(e,2n)*e),t=j0(me(r,1n)*x),a=j0(me(t,5n)*t),i=j0(me(a,10n)*a),l=j0(me(i,20n)*i),c=j0(me(l,40n)*l),u=j0(me(c,80n)*c),b=j0(me(u,80n)*c),m=j0(me(b,10n)*a);return{pow_p_5_8:j0(me(m,2n)*x),b2:e}},$F=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,eC=(x,A)=>{let e=j0(A*j0(A*A)),r=j0(j0(e*e)*A),t=AC(j0(x*r)).pow_p_5_8,a=j0(x*j0(e*t)),i=j0(A*j0(a*a)),l=a,c=j0(a*$F),u=i===x,b=i===jx(-x),m=i===jx(-x*$F);return u&&(a=l),(b||m)&&(a=c),(jx(a)&1n)===1n&&(a=jx(-a)),{isValid:u||b,value:a}},rC=x=>XB(F8(x)),tC=(...x)=>Promise.resolve(QB("sha512Async")(o8(...x))).then(ZB),nC=x=>{let A=Os(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=rC(e),a=pt.multiply(t),i=a.toBytes();return{head:e,prefix:r,scalar:t,point:a,pointBytes:i}},iC=x=>tC(Xr(x,Lt)).then(nC),sC=x=>iC(x).then(A=>A.pointBytes),aC={sha512Async:async x=>{let A=VB(),e=o8(x);return xi(await A.digest("SHA-512",e.buffer))},sha512:void 0},oC=x=>(x=x===void 0?WB(Lt):x,Xr(x,Lt)),FC=async x=>{let A=oC(x),e=await sC(A);return{secretKey:A,publicKey:e}},Un=8,vC=256,v8=Math.ceil(vC/Un)+1,js=2**(Un-1),fC=()=>{let x=[],A=pt,e=A;for(let r=0;r<v8;r++){e=A,x.push(e);for(let t=1;t<js;t++)e=e.add(A),x.push(e);A=e.double()}return x},NF=void 0,IF=(x,A)=>{let e=A.negate();return x?e:A},lC=x=>{let A=NF||(NF=fC()),e=zr,r=pt,t=2**Un,a=t,i=Gn(t-1),l=Gn(Un);for(let c=0;c<v8;c++){let u=Number(x&i);x>>=l,u>js&&(u-=a,x+=1n);let b=c*js,m=b,g=b+Math.abs(u)-1,q=c%2!==0,_=u<0;u===0?r=r.add(IF(q,A[m])):e=e.add(IF(_,A[g]))}return x!==0n&&Qx("invalid wnaf"),{p:e,f:r}},f8=32,l8=64;async function hs(){let{secretKey:x,publicKey:A}=await FC(),e=new Uint8Array(l8);return e.set(x,0),e.set(A,f8),{publicKey:A,privateKey:e}}function Hn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function gs(x,A="base64 value"){return E8(c8(x,A))}function c8(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function Us(x){return Hn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function cC(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return E8(c8(r,A))}function E8(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var Ot=class extends Error{constructor(x,A,e){super(e),i0(this,"httpStatus",x),i0(this,"code",A),this.name="CertApiError"}},ks="/api/1/companion/cert",B8=10080*60*1e3,MF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function C8(x,A){let e=x.apiHost.replace(/\/+$/,""),r=MF?ks:e+ks,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};MF&&e&&(t["x-target-host"]=e);let a=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:Us(A.publicKey),subject:A.subject})});if(!a.ok){let l="unknown_error",c=a.statusText||`Cert API request failed (${a.status})`;try{let u=await a.json();u.code&&(l=u.code),u.message&&(c=u.message)}catch{}throw new Ot(a.status,l,c)}let i=await a.json();if(!i.certificate||!i.notAfter)throw new Ot(a.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:i.certificate,notAfter:i.notAfter}}function Hs(x,A=B8){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var EC=require("events"),BC=LB(GB(),1),Pn="[device-master]",he={debug:(x,...A)=>console.debug(Pn,x,...A),info:(x,...A)=>console.info(Pn,x,...A),warn:(x,...A)=>console.warn(Pn,x,...A),error:(x,...A)=>console.error(Pn,x,...A)},Jn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},CC=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Js(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^CC[(e^x[r])&255];return(e^-1)>>>0}var ys=Date.UTC(1999,11,31,0,0,0);function _s(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),a=e.repeat(t);return A<0?r+a:a+r}function cr(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function ws(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var dC=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),uC=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function DC(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let a=(r^x[t])&255;r=(e^dC[a])&255,e=uC[a]}return 256*e|r}function pC(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),a=parseInt(r,16),i=parseInt(t,16);return e.setUint32(0,a,!0),e.setUint32(4,i,!0),e}function bC(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var mC=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],jC=new Map(mC.map((x,A)=>[x,128+A]));function hC(x){return x<=127||x>=160&&x<=255?x:jC.get(x)??63}var ut="uto_script.dat",Ks="uto_fw.dat",d8=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(d8||{}),u8=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(u8||{}),zs=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(zs||{}),D8=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(D8||{}),p8=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(p8||{}),b8=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(b8||{}),m8=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(m8||{}),j8=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(j8||{}),h8=97;function Kn(x){return x&h8}var g8=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(g8||{}),k8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(k8||{}),RF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},gC=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+cr(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+cr(x,2)}tagToString(x){x|=0;let A=Object.entries(zs).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+cr(x,4)}containerIdToTag(x,A){let e=RF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(RF).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+ys}msToStamp40(x){let A=(x-ys)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let a=new Uint8Array(x.buffer,A,t);return r.decode(a)}ansiUnpack(x,A,e,r){try{let t=ws(x),a=new TextDecoder(r),i=0;for(;i<e&&t[A+i];)i++;return a.decode(t.slice(A,A+i))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=ws(x);t.fill(0,A,A+e);for(let a=0;a<e&&a<r.length;a++)t[A+a]=hC(r.charCodeAt(a))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),a=A.getUint32(6),i=(cr(a,8)+cr(x.dwDevSN,8)).toUpperCase(),l=[];for(let c=0;c<(A.byteLength-10)/5;c++){let u=A.getUint8(10+c*5+2),b=A.getUint16(10+c*5);l.push({wTag:b,sTag:this.tagToString(b),size:A.getUint16(10+c*5+3),flags:{historic:!!(u&1),single:!(u&1),up:!!(u&2),down:!!(u&4),variableLength:!!(u&8),setValue:!!(u&16)}})}return{serialNumber:i,class:cr(e,4),firmwareVersion:`${_s(t>>8,2)}v${_s(t&255,3,"0")}`,flags:cr(r,4),utos:l}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},ix=new gC,zt={nowMs:()=>Date.now()},Vs=class{constructor(x="(unnamed)"){i0(this,"name"),i0(this,"_locked"),i0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},LF=new WeakMap;function y8(x,A){let r=(LF.get(x)??Promise.resolve()).then(()=>kC(x,A));return LF.set(x,r.catch(()=>{})),r}async function kC(x,A){x.interface&&x.interface==="ble"?await yC(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function yC(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let a=0;a<r.byteLength;a+=t){let i=r.slice(a,a+t);await x(i.buffer)}}var OF=15e3,_C=500,wC=3,SC=1024;function GF(x){return x?.utos.find(e=>e.wTag===3)?.size||SC}var _8=class Ln extends EC.EventEmitter{constructor(A,e,r=zt){super(),i0(this,"mdnComInterface"),i0(this,"receiveUto"),i0(this,"sendUto"),i0(this,"rxUto"),i0(this,"txStream"),i0(this,"SendUtoCmdExt"),i0(this,"utoPortLock"),i0(this,"transport"),i0(this,"logger"),i0(this,"ecsHandshakeResolver",null),i0(this,"disposeTransportListener",null),i0(this,"encrypted",!1),i0(this,"lastTxWrite",Promise.resolve()),i0(this,"timeSource"),i0(this,"fileChunkSize",GF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new Vs("UTO-Port"),this.transport=A,this.logger=e??he,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,BC.default)({print:a=>{this.logger.info(`[mdnCom] ${a}`),this.emit("mdnCom",a)},printErr:a=>{this.logger.error(`[mdnCom] ${a}`),this.emit("mdnComError",a)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let a=this.txStream();this.lastTxWrite=y8(this.transport,a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let a=this.rxUto(),i=this.parseUtoFrame(a);this.emit("utoFrame",i)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(a=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${a} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let i=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,i({success:a===0,resultCode:a})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async a=>{this.receiveUto&&await this.receiveUto(new Uint8Array(a))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:ix.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((a,i,l)=>{if(a.bCmd===0){let c=this.resultVerdict(a);c===5||c===0||c===4?i(null):l(a);return}if(a.wTagFull!==A)return l(a);i(a)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=Ln.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((a,i)=>a+i.length,0),r=new Uint8Array(e),t=0;for(let a of A)r.set(a,t),t+=a.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??_C,a=r?.maxRetries??wC;return new Promise((i,l)=>{let c=0,u=!1,b=()=>{},m,g={resolve:_=>{u=!0,clearTimeout(m),this.removeListener("utoFrame",b),i(_)},reject:_=>{u=!0,clearTimeout(m),this.removeListener("utoFrame",b),l(_)}},q=async()=>{b=_=>A(_,g.resolve,g.reject),this.once("utoFrame",b);try{await e()}catch(_){if(u)return;this.removeListener("utoFrame",b),l(_);return}u||(m=setTimeout(()=>{if(this.removeListener("utoFrame",b),c>=a){l(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${a} retries`));return}c++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${c}/${a})`),q()},t))};q()})}createFrameIdleGuard(A,e,r){let t,a=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{a(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:a}}async requestHistoricUtos(A,e,r,t=OF,a=0,i){return await this.utoPortLock.requestLock(),new Promise((l,c)=>{if(!this.sendUto)return l([]);let u=[],b=0,m=Promise.resolve(),g=T=>{if(q.arm(),T.bCmd===0){q.clear(),this.settleHistoricTransfer(T,u,i,m,l,c);return}if(T.wTagFull===A&&T.data&&(u.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),r?.(++b),i&&a>0&&u.length>=a)){let M=u.splice(0);m=m.then(()=>i(M))}this.once("utoFrame",g)},q=this.createFrameIdleGuard(g,t,()=>c(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${b} records received)`)));this.once("utoFrame",g),q.arm();let _=Math.trunc(e/256),$=e&255;this.sendUto(A,{u32SysTime:_,u8SysTime:$})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,a,i){let l=this.resultVerdict(A);if(!(l===5||l===0||l===4)){t.then(()=>i(A)).catch(i);return}let u=r&&e.length>0?e.splice(0):null;(u?t.then(()=>r(u)):t).then(()=>a(r?[]:e)).catch(i)}async requestFile(A,e,r=OF){return await this.utoPortLock.requestLock(),new Promise((t,a)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let i=[],l=0,c=m=>{if(u.arm(),m.bCmd===0){u.clear();let g=this.resultVerdict(m);g===5||g===0?t(Ln.concatChunks(i)):a(m);return}if(m.bCmd===3&&m.data){let g=this.copyDataView(m.data);i.push(g),l+=g.byteLength,e?.(l)}this.once("utoFrame",c)},u=this.createFrameIdleGuard(c,r,()=>a(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${l} bytes received)`)));this.once("utoFrame",c),u.arm();let b=new Uint8Array(A.length+1);for(let m=0;m<A.length;m++)b[m]=A.charCodeAt(m)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},b)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);ix.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(a){let i=a;if(i&&i.bCmd===0&&typeof i.wTagFull=="number"){let{verdict:l}=Ln.resultCode(i),c=i.wTagFull;return l===4?{outcome:"stamp",resultCode:c}:l===7||l===9?{outcome:"denied",resultCode:c}:{outcome:"error",resultCode:c}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${a}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?ix.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=GF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?ix.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,ix.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},a=i=>this.handleFileListFrame(i,t,A,e,r,a);this.once("utoFrame",a),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,a,i){if(A.bCmd===0){let l=this.resultVerdict(A);l===5||l===0?t(r?e[r]?{[r]:e[r]}:{}:e):a(A);return}try{let l=ix.decode_FILEMAP(A);e[l.name]=l}catch(l){a(l);return}this.once("utoFrame",i)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?ix.decode_STAMPS(A):null}async sendFile(A,e,r,t){let a=e;A===2&&(a=new Uint8Array(e.length+1),a.set(new Uint8Array(e),1),a[0]=A);let i={name:t??ut,stamp:r===0?0:ix.msToStamp40(r??this.timeSource.nowMs()),size:a.length,_flags:11,crc32:Js(a)},l=ix.encode_FILEMAP(i);if(!await this.sendUTOCmdExt(9,3,l,0)){let u=this.fileChunkSize;for(let b=0;b<a.length;b+=u){let m=Math.min(u,a.byteLength-b),g=new Uint8Array(a.buffer,a.byteOffset+b,m);await this.sendUTOCmdExt(3,3,g,b*256);let _=(b+m)/a.byteLength*100;this.emit("installing",_.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let a=t??this.utoStampNow40,i=Math.trunc(a/256),l=a&255;return await this.sendWithRetry((c,u,b)=>{if(c.bCmd!==0){b(c);return}this.resultVerdict(c)===0?u(null):b(c)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:i,u8SysTime:l},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return ix.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((a,i)=>{if(A.signal?.aborted){i(new Error("Operation aborted"));return}let l=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),i(new Error("Operation aborted")))};A.signal?.addEventListener("abort",l,{once:!0}),this.ecsHandshakeResolver=u=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(u)}`),A.signal?.removeEventListener("abort",l),u.success&&(this.encrypted=!0),a(u)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let c=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${c} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),c<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",l),a({success:!1,resultCode:c})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},qC=require("events"),w8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(w8||{}),TC=5e3,PC=5e3,$C=class extends qC.EventEmitter{constructor(x,A){super(),i0(this,"atHandler"),i0(this,"debugCache",null),i0(this,"logger"),i0(this,"dataHandler"),this.atHandler=x,this.logger=A??he,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),a={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},i=`${t.substring(1)}`,l=t.substring(0,1);"$!?~$".includes(l)&&(a.level=this.logLevelFromPrefix(l)),a.message=i,this.emitMessageEvent(a)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let a of t){a==="\xFF"&&(a="%");let i=String.fromCharCode(...r.map(l=>l.tag));if(a===""){switch(i){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:a,start:Date.now()})}else if(a===""){switch(i){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let l=r.pop().buf+a;l==="****^reset****"?e=0:this.process_x01(l,e)}else if(a===""){switch(i){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:a,start:Date.now()})}else if(r.length){let l=r[r.length-1];if(l.tag===16&&a==="\r")continue;l.buf+=a,l.tag===16&&a===`
2628
- `&&r.pop()}else{if(x||(A=Date.now()),a==="\r"||(x+=a,!(Date.now()>A+PC||a===`
2627
+ }`;var vx=new Function(Object.keys(a0),S0)(...Object.values(a0)),sx=`methodCaller<(${e0.map(Cx=>Cx.name)}) => ${G.name}>`;return S(Ee(sx,vx))},B0=C=>(C=u0(C),k0.toHandle(i[C])),M0=(C,D)=>(C=k0.toValue(C),D=k0.toValue(D),k0.toHandle(C[D])),xx=C=>{C>9&&(Q[C+1]+=1)},Ex=(C,D,y,R,G)=>j[C](D,y,R,G),Dx=C=>k0.toHandle(u0(C)),Nx=C=>{var D=k0.toValue(C);uA(D),l0(C)},Ux=()=>2147483648,Ix=(C,D)=>(k(D,"alignment argument is required"),Math.ceil(C/D)*D),Bx=C=>{var D=Bn.buffer.byteLength,y=(C-D+65535)/65536|0;try{return Bn.grow(y),dx(),1}catch(R){z(`growMemory: Attempted to grow heap from ${D} bytes to ${C} bytes, but got error: ${R}`)}},Mx=C=>{var D=lx.length;C>>>=0,k(C>D);var y=Ux();if(C>y)return z(`Cannot enlarge memory, requested ${C} bytes, but the limit is ${y} bytes!`),!1;for(var R=1;R<=4;R*=2){var G=D*(1+.2/R);G=Math.min(G,C+100663296);var e0=Math.min(y,Ix(Math.max(C,G),65536)),A0=Bx(e0);if(A0)return!0}return z(`Failed to grow the heap from ${D} bytes to ${e0} bytes, not enough memory!`),!1},Ac=C=>{H0("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},ec=9007199254740992,rc=-9007199254740992,tc=C=>C<rc||C>ec?NaN:Number(C);function nc(C,D,y,R){return D=tc(D),70}var $i=[null,[],[]],Ni=(C,D)=>{var y=$i[C];k(y),D===0||D===10?((C===1?N:z)(Ir(y)),y.length=0):y.push(D)},vm=()=>{fo(0),$i[1].length&&Ni(1,10),$i[2].length&&Ni(2,10)},ic=(C,D,y,R)=>{for(var G=0,e0=0;e0<y;e0++){var A0=P0[D>>2],t0=P0[D+4>>2];D+=8;for(var a0=0;a0<t0;a0++)Ni(C,lx[A0+a0]);G+=t0}return P0[R>>2]=G,0},sc=()=>{if(u){var C=require("crypto");return D=>C.randomFillSync(D)}return D=>(crypto.getRandomValues(D),0)},ao=C=>(ao=sc())(C),ac=(C,D)=>ao(lx.subarray(C,C+D)),oc=(C,D)=>{if(Mr)for(var y=C;y<C+D;y++){var R=qe(y);R&&Mr.set(R,y)}},Mr,Fc=C=>(Mr||(Mr=new WeakMap,oc(0,Rr.length)),Mr.get(C)||0),Ii=[],vc=()=>{if(Ii.length)return Ii.pop();try{return Rr.grow(1)}catch(C){if(!(C instanceof RangeError))throw C;H0("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Mi=(C,D)=>{Rr.set(C,D),KA[C]=Rr.get(C)},oo=C=>{let D=C.length;return k(D<16384),[D%128|128,D>>7,...C]},fc={i:127,p:127,j:126,f:125,d:124,e:111},Fo=C=>oo(Array.from(C,D=>{var y=fc[D];return k(y,`invalid signature char: ${D}`),y})),lc=(C,D)=>{var y=Uint8Array.of(0,97,115,109,1,0,0,0,1,...oo([1,96,...Fo(D.slice(1)),...Fo(D[0]==="v"?"":D[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),R=new WebAssembly.Module(y),G=new WebAssembly.Instance(R,{e:{f:C}}),e0=G.exports.f;return e0},cc=(C,D)=>{k(typeof C<"u");var y=Fc(C);if(y)return y;var R=vc();try{Mi(R,C)}catch(e0){if(!(e0 instanceof TypeError))throw e0;k(typeof D<"u","Missing signature argument to addFunction: "+C);var G=lc(C,D);Mi(R,G)}return Mr.set(C,R),R},Ec=C=>{Mr.delete(qe(C)),Mi(C,null),Ii.push(C)};er(),sr(),k(Q.length===10);{if(i.noExitRuntime&&(ae=i.noExitRuntime),i.print&&(N=i.print),i.printErr&&(z=i.printErr),i.wasmBinary&&(F0=i.wasmBinary),i.FS_createDataFile=ox.createDataFile,i.FS_createPreloadedFile=ox.createPreloadedFile,dc(),i.arguments&&(m=i.arguments),i.thisProgram&&(g=i.thisProgram),k(typeof i.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof i.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof i.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof i.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof i.read>"u","Module.read option was removed"),k(typeof i.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof i.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof i.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof i.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof i.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof i.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof i.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof i.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.shift()();r0("preInit")}i.addFunction=cc,i.removeFunction=Ec;var Bc=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];Bc.forEach(v0);var Cc=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];Cc.forEach(c0);function dc(){f0("fetchSettings"),f0("logReadFiles"),f0("loadSplitModule"),f0("onMalloc"),f0("onRealloc"),f0("onFree"),f0("onSbrkGrow")}var vo=x0("___getTypeName"),Ri=x0("_malloc"),$e=x0("_free"),uc=i._MdnCom_ESCHandler=x0("_MdnCom_ESCHandler"),Dc=i._MdnCom_Free=x0("_MdnCom_Free"),pc=i._MdnCom_RawRx=x0("_MdnCom_RawRx"),bc=i._MdnCom_CryptoSelfTest=x0("_MdnCom_CryptoSelfTest"),mc=i._MdnCom_SetCompanionKeypair=x0("_MdnCom_SetCompanionKeypair"),jc=i._MdnCom_InitiateEcsHandshake=x0("_MdnCom_InitiateEcsHandshake"),hc=i._MdnCom_SetSecDebug=x0("_MdnCom_SetSecDebug"),gc=i._MdnCom_GetEcsState=x0("_MdnCom_GetEcsState"),kc=i._MdnCom_ResetEcs=x0("_MdnCom_ResetEcs"),yc=i._MdnCom_RegisterEcsHandshakeCallback=x0("_MdnCom_RegisterEcsHandshakeCallback"),_c=i._MdnCom_Init=x0("_MdnCom_Init"),wc=i._SendUtoQuery=x0("_SendUtoQuery"),Sc=i._SendUtoCmdExt=x0("_SendUtoCmdExt"),fo=x0("_fflush"),Li=x0("_emscripten_stack_get_end"),qc=x0("_emscripten_stack_get_base"),Tc=x0("_strerror"),lo=x0("_emscripten_stack_init"),Pc=x0("_emscripten_stack_get_free"),$c=x0("__emscripten_stack_restore"),Nc=x0("__emscripten_stack_alloc"),Ic=x0("_emscripten_stack_get_current"),Mc=x0("memory"),Rc=x0("__indirect_function_table"),Bn=x0("wasmMemory"),Rr=x0("wasmTable");function Lc(C){k(typeof C.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof C.malloc<"u","missing Wasm export: malloc"),k(typeof C.free<"u","missing Wasm export: free"),k(typeof C.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof C.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof C.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof C.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof C.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof C.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof C.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof C.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof C.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof C.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof C.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof C.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof C.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof C.fflush<"u","missing Wasm export: fflush"),k(typeof C.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof C.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof C.strerror<"u","missing Wasm export: strerror"),k(typeof C.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof C.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof C._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof C._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof C.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof C.memory<"u","missing Wasm export: memory"),k(typeof C.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),vo=W0("__getTypeName",1),Ri=W0("malloc",1),$e=W0("free",1),uc=i._MdnCom_ESCHandler=W0("MdnCom_ESCHandler",1),Dc=i._MdnCom_Free=W0("MdnCom_Free",1),pc=i._MdnCom_RawRx=W0("MdnCom_RawRx",1),bc=i._MdnCom_CryptoSelfTest=W0("MdnCom_CryptoSelfTest",0),mc=i._MdnCom_SetCompanionKeypair=W0("MdnCom_SetCompanionKeypair",2),jc=i._MdnCom_InitiateEcsHandshake=W0("MdnCom_InitiateEcsHandshake",0),hc=i._MdnCom_SetSecDebug=W0("MdnCom_SetSecDebug",1),gc=i._MdnCom_GetEcsState=W0("MdnCom_GetEcsState",0),kc=i._MdnCom_ResetEcs=W0("MdnCom_ResetEcs",0),yc=i._MdnCom_RegisterEcsHandshakeCallback=W0("MdnCom_RegisterEcsHandshakeCallback",1),_c=i._MdnCom_Init=W0("MdnCom_Init",2),wc=i._SendUtoQuery=W0("SendUtoQuery",2),Sc=i._SendUtoCmdExt=W0("SendUtoCmdExt",4),fo=W0("fflush",1),Li=C.emscripten_stack_get_end,qc=C.emscripten_stack_get_base,Tc=W0("strerror",1),lo=C.emscripten_stack_init,Pc=C.emscripten_stack_get_free,$c=C._emscripten_stack_restore,Nc=C._emscripten_stack_alloc,Ic=C.emscripten_stack_get_current,Mc=Bn=C.memory,Rc=Rr=C.__indirect_function_table}var co={__cxa_throw:dA,_abort_js:hr,_embind_finalize_value_object:Fe,_embind_register_bigint:gr,_embind_register_bool:a,_embind_register_class:Te,_embind_register_class_constructor:h,_embind_register_class_property:P,_embind_register_emval:J0,_embind_register_float:q0,_embind_register_function:wx,_embind_register_integer:Gx,_embind_register_memory_view:Wx,_embind_register_std_string:qt,_embind_register_std_wstring:o,_embind_register_value_object:f,_embind_register_value_object_field:E,_embind_register_void:d,_emval_create_invoker:E0,_emval_decref:l0,_emval_get_module_property:B0,_emval_get_property:M0,_emval_incref:xx,_emval_invoke:Ex,_emval_new_cstring:Dx,_emval_run_destructors:Nx,emscripten_resize_heap:Mx,fd_close:Ac,fd_seek:nc,fd_write:ic,random_get:ac},Eo;function Oc(){lo(),V()}function Gc(){Oc(),iA();function C(){k(!Eo),Eo=!0,i.calledRun=!0,!L&&(LA(),b0?.(i),i.onRuntimeInitialized?.(),r0("onRuntimeInitialized"),k(!i._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),Kx())}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),C()},1)):C(),Y()}var nt;nt=await mr(),Gc(),L0?s=i:s=new Promise((C,D)=>{b0=C,I0=D});for(let C of Object.keys(i))C in t||Object.defineProperty(t,C,{configurable:!0,get(){H0(`Access to module property ('${C}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),f8={};aC(f8,{API_STAMP_UNBOUNDED:()=>J8,AT_COMMANDS:()=>Hx,AT_COMMAND_TIMEOUT_MS:()=>fA,ApiBadRequestError:()=>R0,ApiForbiddenError:()=>ni,ApiMethodNotAllowedError:()=>va,ApiNotFoundError:()=>$A,AtCommandHandler:()=>$u,AtDeviceError:()=>Fa,AtHandlerDisposedError:()=>oA,BACKFILL_PENDING_HEADER:()=>Ov,BACKFILL_PENDING_VALUE:()=>Gv,BLE_CONFIGURATION:()=>rD,BLE_SCAN_TIMEOUT_MS:()=>nD,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Mu,COMPANION_CERT_PATH:()=>_s,COMPANION_PRIVATE_KEY_SIZE:()=>b8,COMPANION_PUBLIC_KEY_SIZE:()=>p8,CertApiError:()=>Ut,CompanionAuthErrorKind:()=>Dv,CompanionAuthManager:()=>Iu,CompanionCertError:()=>dv,DDE_FIELD_UNUSED_INDEX:()=>G8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>h8,DEFAULT_RECONNECT_OPTIONS:()=>_v,DLO_FILENAME:()=>Dt,DdeMapper:()=>Cu,DdeUnknownAliasError:()=>Zs,DdeUnknownContainerError:()=>Er,DdeUnknownFieldError:()=>aa,DdeWriteForbiddenError:()=>Kt,DebugLogLevel:()=>R8,DebugMaster:()=>td,DebugSync:()=>cv,DeviceManager:()=>AD,DeviceState:()=>yv,FW_FILENAME:()=>Vs,LIC_API_BASE_URL:()=>Fv,LOCAL_API_LIFECYCLE_FLAGS:()=>Wr,LOCAL_API_SITE_MASK:()=>Gs,LOCAL_API_SITE_MASTER_KEYS:()=>Qt,LegacySync:()=>fv,LocalDataManager:()=>jv,MANUFACTURER_CODE:()=>tD,MS_1999_12_31:()=>ws,MemoryStorage:()=>id,Mutex:()=>Xs,OfflineSyncManager:()=>gu,RAW_TERMINAL_PATTERN:()=>Bv,RESPONSE_PATTERNS:()=>nx,Rm2mStateManager:()=>Qu,SYNC_LOGIC_MASK:()=>P8,SyncManager:()=>Tu,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>Ev,USB_CONFIGURATION:()=>eD,UplinkMode:()=>N8,UtoCommand:()=>k8,UtoESC:()=>$8,UtoFileFlag:()=>q8,UtoFileFlagInt:()=>T8,UtoFileType:()=>w8,UtoFlag:()=>S8,UtoMaster:()=>M8,UtoResult:()=>y8,UtoSplitTag:()=>_8,UtoTag:()=>Ws,WebSocketBridge:()=>oa,applyBlueprintNames:()=>av,applyDecpl:()=>Id,assertValidRequestStamps:()=>jt,base64ToBytes:()=>ys,base64UrlToBytes:()=>IC,buildBlueprintNameMap:()=>Rs,bytesToBase64:()=>Kn,bytesToBase64Url:()=>Js,checkDeviceCapabilities:()=>Gu,computeDisplayValue:()=>mv,computeDisplayValues:()=>Os,consoleLogger:()=>ke,convertToString:()=>Ss,crc16Modbus:()=>UC,crc32Ethernet:()=>zs,createDebugBufferState:()=>Cv,createLocalApiHandler:()=>E7,createLocalApiSession:()=>la,createSiteInfoFromDde:()=>m7,dbStampToStamp40:()=>ge,decodeContainer:()=>Ns,decodeFloatm16:()=>xv,decodeLifecycleFlags:()=>Tv,decodeRm2mStateResponse:()=>kv,decodeUplinkState:()=>hv,deriveDeviceLifecycleMirror:()=>Pv,encodeContainer:()=>Ms,encodeFloatm16:()=>Av,encodeLifecycleFlags:()=>Ea,encodeNulPaddedJson:()=>Sv,encodeSerialNumber:()=>HC,extractBits:()=>Xn,formatApiStamp:()=>pt,generateCompanionKeypair:()=>ks,getDeviceAssignment:()=>vv,isCertValid:()=>Ks,isDevicePushableTag:()=>U8,isUnusedField:()=>Oe,isValidStamp:()=>fa,mapLocalApiError:()=>Af,nullLogger:()=>zn,parseApiStamp:()=>mt,parseBlueprint:()=>uu,parseDde:()=>Td,parseMetadataResponse:()=>pv,parseNulPaddedJson:()=>Yt,parseRm2mStateParams:()=>gv,parseSerialNumberFromDataView:()=>JC,parseValuesResponse:()=>bv,requestCompanionCert:()=>g8,resolveAuthErrorKind:()=>Ru,resolveBlueprintNameMap:()=>Xt,resolveContainerTag:()=>Wn,resolveTagForContainer:()=>Ot,resolveTagInModel:()=>od,routeLocalApiRequest:()=>Zv,spreadBits:()=>z8,stamp40ToDbHex:()=>PA,syncLogic:()=>Vn,systemTimeSource:()=>Wt,toHex:()=>cr,toUint8Array:()=>qs,utoStack:()=>ix});ef.exports=FC(f8);var l8=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:Un,n:On,Gx:LF,Gy:OF,a:Fs,d:vs,h:fC}=l8,Gt=32,lC=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Qx=(x="")=>{let A=new Error(x);throw lC(A,Qx),A},cC=x=>typeof x=="bigint",EC=x=>typeof x=="string",BC=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Xr=(x,A,e="")=>{let r=BC(x),t=x?.length,s=A!==void 0;if(!r||s&&t!==A){let i=e&&`"${e}" `,v=s?` of length ${A}`:"",c=r?`length=${t}`:`type=${typeof x}`,u=i+"expected Uint8Array"+v+", got "+c;throw r?new RangeError(u):new TypeError(u)}return x},ei=x=>new Uint8Array(x),Us=x=>Uint8Array.from(x),c8=(x,A)=>x.toString(16).padStart(A,"0"),E8=x=>Array.from(Xr(x)).map(A=>c8(A,2)).join(""),Le={_0:48,_9:57,A:65,F:70,a:97,f:102},GF=x=>{if(x>=Le._0&&x<=Le._9)return x-Le._0;if(x>=Le.A&&x<=Le.F)return x-(Le.A-10);if(x>=Le.a&&x<=Le.f)return x-(Le.a-10)},B8=x=>{let A="hex invalid";if(!EC(x))return Qx(A);let e=x.length,r=e/2;if(e%2)return Qx(A);let t=ei(r);for(let s=0,i=0;s<r;s++,i+=2){let v=GF(x.charCodeAt(i)),c=GF(x.charCodeAt(i+1));if(v===void 0||c===void 0)return Qx(A);t[s]=v*16+c}return t},C8=()=>globalThis?.crypto,CC=()=>C8()?.subtle??Qx("crypto.subtle must be defined, consider polyfill"),d8=(...x)=>{let A=0;for(let t of x)A+=Xr(t).length;let e=ei(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},dC=(x=Gt)=>C8().getRandomValues(ei(x)),Hn=BigInt,Hr=(x,A,e,r="bad number: out of range")=>{if(!cC(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},jx=(x,A=Un)=>{let e=x%A;return e>=0n?e:A+e},UF=(1n<<255n)-1n,j0=x=>{x<0n&&Qx("negative coordinate");let A=(x>>255n)*19n+(x&UF);return A=(A>>255n)*19n+(A&UF),A%Un},uC=x=>jx(x,On),DC=(x,A)=>{(x===0n||A<=0n)&&Qx("no inverse n="+x+" mod="+A);let e=jx(x,A),r=A,t=0n,s=1n,i=1n,v=0n;for(;e!==0n;){let c=r/e,u=r%e,b=t-i*c,m=s-v*c;r=e,e=u,t=i,s=v,i=b,v=m}return r===1n?jx(t,A):Qx("no inverse")},pC=x=>{let A=SC[x];return typeof A!="function"&&Qx("hashes."+x+" not set"),A},bC=x=>Xr(x,64,"digest"),fs=x=>x instanceof Vt?x:Qx("Point expected"),hs=2n**256n,Hs=class Jr{constructor(A,e,r,t){i0(this,"X"),i0(this,"Y"),i0(this,"Z"),i0(this,"T");let s=hs;this.X=Hr(A,0n,s),this.Y=Hr(e,0n,s),this.Z=Hr(r,1n,s),this.T=Hr(t,0n,s),Object.freeze(this)}static CURVE(){return l8}static fromAffine(A){return new Jr(A.x,A.y,1n,j0(A.x*A.y))}static fromBytes(A,e=!1){let r=vs,t=Us(Xr(A,Gt)),s=A[31];t[31]=s&-129;let i=u8(t);Hr(i,0n,e?hs:Un);let c=j0(i*i),u=jx(c-1n),b=j0(r*c+1n),{isValid:m,value:g}=hC(u,b);m||Qx("bad point: y not sqrt");let q=(g&1n)===1n,_=(s&128)!==0;return!e&&g===0n&&_&&Qx("bad point: x==0, isLastByteOdd"),_!==q&&(g=jx(-g)),new Jr(g,i,1n,j0(g*i))}static fromHex(A,e){return Jr.fromBytes(B8(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Fs,e=vs,r=this;if(r.is0())return Qx("bad point: ZERO");let{X:t,Y:s,Z:i,T:v}=r,c=j0(t*t),u=j0(s*s),b=j0(i*i),m=j0(b*b),g=j0(c*A),q=j0(b*(g+u)),_=jx(m+j0(e*j0(c*u)));if(q!==_)return Qx("bad point: equation left != right (1)");let $=j0(t*s),T=j0(i*v);return $!==T?Qx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:i,Z:v}=fs(A),c=j0(e*v),u=j0(s*t),b=j0(r*v),m=j0(i*t);return c===u&&b===m}is0(){return this.equals(zr)}negate(){return new Jr(jx(-this.X),this.Y,this.Z,jx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=Fs,s=j0(A*A),i=j0(e*e),v=j0(2n*r*r),c=j0(t*s),u=jx(A+e),b=jx(j0(u*u)-s-i),m=jx(c+i),g=jx(m-v),q=jx(c-i),_=j0(b*g),$=j0(m*q),T=j0(b*q),M=j0(g*m);return new Jr(_,$,M,T)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:i,Y:v,Z:c,T:u}=fs(A),b=Fs,m=vs,g=j0(e*i),q=j0(r*v),_=j0(j0(s*m)*u),$=j0(t*c),T=jx(j0(jx(e+r)*jx(i+v))-g-q),M=jx($-_),N=jx($+_),z=jx(q-j0(b*g)),F0=j0(T*M),L=j0(N*z),k=j0(T*z),O=j0(M*N);return new Jr(F0,L,O,k)}subtract(A){return this.add(fs(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(Hr(A,1n,On),!e&&this.is0()))return zr;if(A===1n)return this;if(this.equals(bt))return NC(A).p;let r=zr,t=bt;for(let s=this;A>0n;s=s.double(),A>>=1n)A&1n?r=r.add(s):e&&(t=t.add(s));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(zr))return{x:0n,y:1n};let t=DC(r,Un);j0(r*t)!==1n&&Qx("invalid inverse");let s=j0(A*t),i=j0(e*t);return{x:s,y:i}}toBytes(){let{x:A,y:e}=this.toAffine(),r=mC(e);return r[31]|=A&1n?128:0,r}toHex(){return E8(this.toBytes())}clearCofactor(){return this.multiply(Hn(fC),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(On/2n,!1).double();return On%2n&&(A=A.add(this)),A.is0()}};i0(Hs,"BASE");i0(Hs,"ZERO");var Vt=Hs,bt=new Vt(LF,OF,1n,jx(LF*OF)),zr=new Vt(0n,1n,1n,0n);Vt.BASE=bt;Vt.ZERO=zr;var mC=x=>B8(c8(Hr(x,0n,hs),64)).reverse(),u8=x=>Hn("0x"+E8(Us(Xr(x)).reverse())),he=(x,A)=>{let e=x;for(;A-- >0n;)e=j0(e*e);return e},jC=x=>{let A=j0(x*x),e=j0(A*x),r=j0(he(e,2n)*e),t=j0(he(r,1n)*x),s=j0(he(t,5n)*t),i=j0(he(s,10n)*s),v=j0(he(i,20n)*i),c=j0(he(v,40n)*v),u=j0(he(c,80n)*c),b=j0(he(u,80n)*c),m=j0(he(b,10n)*s);return{pow_p_5_8:j0(he(m,2n)*x),b2:e}},HF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,hC=(x,A)=>{let e=j0(A*j0(A*A)),r=j0(j0(e*e)*A),t=jC(j0(x*r)).pow_p_5_8,s=j0(x*j0(e*t)),i=j0(A*j0(s*s)),v=s,c=j0(s*HF),u=i===x,b=i===jx(-x),m=i===jx(-x*HF);return u&&(s=v),(b||m)&&(s=c),(jx(s)&1n)===1n&&(s=jx(-s)),{isValid:u||b,value:s}},gC=x=>uC(u8(x)),kC=(...x)=>Promise.resolve(pC("sha512Async")(d8(...x))).then(bC),yC=x=>{let A=Us(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=gC(e),s=bt.multiply(t),i=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:i}},_C=x=>kC(Xr(x,Gt)).then(yC),wC=x=>_C(x).then(A=>A.pointBytes),SC={sha512Async:async x=>{let A=CC(),e=d8(x);return ei(await A.digest("SHA-512",e.buffer))},sha512:void 0},qC=x=>(x=x===void 0?dC(Gt):x,Xr(x,Gt)),TC=async x=>{let A=qC(x),e=await wC(A);return{secretKey:A,publicKey:e}},Jn=8,PC=256,D8=Math.ceil(PC/Jn)+1,gs=2**(Jn-1),$C=()=>{let x=[],A=bt,e=A;for(let r=0;r<D8;r++){e=A,x.push(e);for(let t=1;t<gs;t++)e=e.add(A),x.push(e);A=e.double()}return x},JF=void 0,KF=(x,A)=>{let e=A.negate();return x?e:A},NC=x=>{let A=JF||(JF=$C()),e=zr,r=bt,t=2**Jn,s=t,i=Hn(t-1),v=Hn(Jn);for(let c=0;c<D8;c++){let u=Number(x&i);x>>=v,u>gs&&(u-=s,x+=1n);let b=c*gs,m=b,g=b+Math.abs(u)-1,q=c%2!==0,_=u<0;u===0?r=r.add(KF(q,A[m])):e=e.add(KF(_,A[g]))}return x!==0n&&Qx("invalid wnaf"),{p:e,f:r}},p8=32,b8=64;async function ks(){let{secretKey:x,publicKey:A}=await TC(),e=new Uint8Array(b8);return e.set(x,0),e.set(A,p8),{publicKey:A,privateKey:e}}function Kn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function ys(x,A="base64 value"){return j8(m8(x,A))}function m8(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function Js(x){return Kn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function IC(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return j8(m8(r,A))}function j8(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var Ut=class extends Error{constructor(x,A,e){super(e),i0(this,"httpStatus",x),i0(this,"code",A),this.name="CertApiError"}},_s="/api/1/companion/cert",h8=10080*60*1e3,zF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function g8(x,A){let e=x.apiHost.replace(/\/+$/,""),r=zF?_s:e+_s,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};zF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:Js(A.publicKey),subject:A.subject})});if(!s.ok){let v="unknown_error",c=s.statusText||`Cert API request failed (${s.status})`;try{let u=await s.json();u.code&&(v=u.code),u.message&&(c=u.message)}catch{}throw new Ut(s.status,v,c)}let i=await s.json();if(!i.certificate||!i.notAfter)throw new Ut(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:i.certificate,notAfter:i.notAfter}}function Ks(x,A=h8){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var MC=require("events"),RC=oC(vC(),1),Nn="[device-master]",ke={debug:(x,...A)=>console.debug(Nn,x,...A),info:(x,...A)=>console.info(Nn,x,...A),warn:(x,...A)=>console.warn(Nn,x,...A),error:(x,...A)=>console.error(Nn,x,...A)},zn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},LC=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function zs(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^LC[(e^x[r])&255];return(e^-1)>>>0}var ws=Date.UTC(1999,11,31,0,0,0);function Ss(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),s=e.repeat(t);return A<0?r+s:s+r}function cr(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function qs(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var OC=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),GC=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function UC(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^OC[s])&255,e=GC[s]}return 256*e|r}function HC(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),s=parseInt(r,16),i=parseInt(t,16);return e.setUint32(0,s,!0),e.setUint32(4,i,!0),e}function JC(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var KC=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],zC=new Map(KC.map((x,A)=>[x,128+A]));function VC(x){return x<=127||x>=160&&x<=255?x:zC.get(x)??63}var Dt="uto_script.dat",Vs="uto_fw.dat",k8=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(k8||{}),y8=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(y8||{}),Ws=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(Ws||{}),_8=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(_8||{}),w8=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(w8||{}),S8=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(S8||{}),q8=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(q8||{}),T8=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(T8||{}),P8=97;function Vn(x){return x&P8}var $8=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))($8||{}),N8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(N8||{}),VF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},WC=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+cr(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+cr(x,2)}tagToString(x){x|=0;let A=Object.entries(Ws).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+cr(x,4)}containerIdToTag(x,A){let e=VF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(VF).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+ws}msToStamp40(x){let A=(x-ws)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let s=new Uint8Array(x.buffer,A,t);return r.decode(s)}ansiUnpack(x,A,e,r){try{let t=qs(x),s=new TextDecoder(r),i=0;for(;i<e&&t[A+i];)i++;return s.decode(t.slice(A,A+i))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=qs(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=VC(r.charCodeAt(s))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),s=A.getUint32(6),i=(cr(s,8)+cr(x.dwDevSN,8)).toUpperCase(),v=[];for(let c=0;c<(A.byteLength-10)/5;c++){let u=A.getUint8(10+c*5+2),b=A.getUint16(10+c*5);v.push({wTag:b,sTag:this.tagToString(b),size:A.getUint16(10+c*5+3),flags:{historic:!!(u&1),single:!(u&1),up:!!(u&2),down:!!(u&4),variableLength:!!(u&8),setValue:!!(u&16)}})}return{serialNumber:i,class:cr(e,4),firmwareVersion:`${Ss(t>>8,2)}v${Ss(t&255,3,"0")}`,flags:cr(r,4),utos:v}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},ix=new WC,Wt={nowMs:()=>Date.now()},Xs=class{constructor(x="(unnamed)"){i0(this,"name"),i0(this,"_locked"),i0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},WF=new WeakMap;function I8(x,A){let r=(WF.get(x)??Promise.resolve()).then(()=>XC(x,A));return WF.set(x,r.catch(()=>{})),r}async function XC(x,A){x.interface&&x.interface==="ble"?await YC(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function YC(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let s=0;s<r.byteLength;s+=t){let i=r.slice(s,s+t);await x(i.buffer)}}var XF=15e3,QC=500,ZC=3,xd=1024;function YF(x){return x?.utos.find(e=>e.wTag===3)?.size||xd}var M8=class Gn extends MC.EventEmitter{constructor(A,e,r=Wt){super(),i0(this,"mdnComInterface"),i0(this,"receiveUto"),i0(this,"sendUto"),i0(this,"rxUto"),i0(this,"txStream"),i0(this,"SendUtoCmdExt"),i0(this,"utoPortLock"),i0(this,"transport"),i0(this,"logger"),i0(this,"ecsHandshakeResolver",null),i0(this,"disposeTransportListener",null),i0(this,"encrypted",!1),i0(this,"lastTxWrite",Promise.resolve()),i0(this,"timeSource"),i0(this,"fileChunkSize",YF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new Xs("UTO-Port"),this.transport=A,this.logger=e??ke,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,RC.default)({print:s=>{this.logger.info(`[mdnCom] ${s}`),this.emit("mdnCom",s)},printErr:s=>{this.logger.error(`[mdnCom] ${s}`),this.emit("mdnComError",s)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let s=this.txStream();this.lastTxWrite=I8(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),i=this.parseUtoFrame(s);this.emit("utoFrame",i)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(s=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${s} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let i=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,i({success:s===0,resultCode:s})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async s=>{this.receiveUto&&await this.receiveUto(new Uint8Array(s))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:ix.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((s,i,v)=>{if(s.bCmd===0){let c=this.resultVerdict(s);c===5||c===0||c===4?i(null):v(s);return}if(s.wTagFull!==A)return v(s);i(s)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=Gn.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((s,i)=>s+i.length,0),r=new Uint8Array(e),t=0;for(let s of A)r.set(s,t),t+=s.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??QC,s=r?.maxRetries??ZC;return new Promise((i,v)=>{let c=0,u=!1,b=()=>{},m,g={resolve:_=>{u=!0,clearTimeout(m),this.removeListener("utoFrame",b),i(_)},reject:_=>{u=!0,clearTimeout(m),this.removeListener("utoFrame",b),v(_)}},q=async()=>{b=_=>A(_,g.resolve,g.reject),this.once("utoFrame",b);try{await e()}catch(_){if(u)return;this.removeListener("utoFrame",b),v(_);return}u||(m=setTimeout(()=>{if(this.removeListener("utoFrame",b),c>=s){v(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}c++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${c}/${s})`),q()},t))};q()})}createFrameIdleGuard(A,e,r){let t,s=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{s(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:s}}async requestHistoricUtos(A,e,r,t=XF,s=0,i){return await this.utoPortLock.requestLock(),new Promise((v,c)=>{if(!this.sendUto)return v([]);let u=[],b=0,m=Promise.resolve(),g=T=>{if(q.arm(),T.bCmd===0){q.clear(),this.settleHistoricTransfer(T,u,i,m,v,c);return}if(T.wTagFull===A&&T.data&&(u.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),r?.(++b),i&&s>0&&u.length>=s)){let M=u.splice(0);m=m.then(()=>i(M))}this.once("utoFrame",g)},q=this.createFrameIdleGuard(g,t,()=>c(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${b} records received)`)));this.once("utoFrame",g),q.arm();let _=Math.trunc(e/256),$=e&255;this.sendUto(A,{u32SysTime:_,u8SysTime:$})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,s,i){let v=this.resultVerdict(A);if(!(v===5||v===0||v===4)){t.then(()=>i(A)).catch(i);return}let u=r&&e.length>0?e.splice(0):null;(u?t.then(()=>r(u)):t).then(()=>s(r?[]:e)).catch(i)}async requestFile(A,e,r=XF){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let i=[],v=0,c=m=>{if(u.arm(),m.bCmd===0){u.clear();let g=this.resultVerdict(m);g===5||g===0?t(Gn.concatChunks(i)):s(m);return}if(m.bCmd===3&&m.data){let g=this.copyDataView(m.data);i.push(g),v+=g.byteLength,e?.(v)}this.once("utoFrame",c)},u=this.createFrameIdleGuard(c,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${v} bytes received)`)));this.once("utoFrame",c),u.arm();let b=new Uint8Array(A.length+1);for(let m=0;m<A.length;m++)b[m]=A.charCodeAt(m)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},b)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);ix.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(s){let i=s;if(i&&i.bCmd===0&&typeof i.wTagFull=="number"){let{verdict:v}=Gn.resultCode(i),c=i.wTagFull;return v===4?{outcome:"stamp",resultCode:c}:v===7||v===9?{outcome:"denied",resultCode:c}:{outcome:"error",resultCode:c}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${s}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?ix.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=YF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?ix.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,ix.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=i=>this.handleFileListFrame(i,t,A,e,r,s);this.once("utoFrame",s),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,s,i){if(A.bCmd===0){let v=this.resultVerdict(A);v===5||v===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(A);return}try{let v=ix.decode_FILEMAP(A);e[v.name]=v}catch(v){s(v);return}this.once("utoFrame",i)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?ix.decode_STAMPS(A):null}async sendFile(A,e,r,t){let s=e;A===2&&(s=new Uint8Array(e.length+1),s.set(new Uint8Array(e),1),s[0]=A);let i={name:t??Dt,stamp:r===0?0:ix.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:zs(s)},v=ix.encode_FILEMAP(i);if(!await this.sendUTOCmdExt(9,3,v,0)){let u=this.fileChunkSize;for(let b=0;b<s.length;b+=u){let m=Math.min(u,s.byteLength-b),g=new Uint8Array(s.buffer,s.byteOffset+b,m);await this.sendUTOCmdExt(3,3,g,b*256);let _=(b+m)/s.byteLength*100;this.emit("installing",_.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let s=t??this.utoStampNow40,i=Math.trunc(s/256),v=s&255;return await this.sendWithRetry((c,u,b)=>{if(c.bCmd!==0){b(c);return}this.resultVerdict(c)===0?u(null):b(c)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:i,u8SysTime:v},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return ix.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((s,i)=>{if(A.signal?.aborted){i(new Error("Operation aborted"));return}let v=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),i(new Error("Operation aborted")))};A.signal?.addEventListener("abort",v,{once:!0}),this.ecsHandshakeResolver=u=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(u)}`),A.signal?.removeEventListener("abort",v),u.success&&(this.encrypted=!0),s(u)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let c=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${c} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),c<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",v),s({success:!1,resultCode:c})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},Ad=require("events"),R8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(R8||{}),ed=5e3,rd=5e3,td=class extends Ad.EventEmitter{constructor(x,A){super(),i0(this,"atHandler"),i0(this,"debugCache",null),i0(this,"logger"),i0(this,"dataHandler"),this.atHandler=x,this.logger=A??ke,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),s={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},i=`${t.substring(1)}`,v=t.substring(0,1);"$!?~$".includes(v)&&(s.level=this.logLevelFromPrefix(v)),s.message=i,this.emitMessageEvent(s)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let s of t){s==="\xFF"&&(s="%");let i=String.fromCharCode(...r.map(v=>v.tag));if(s===""){switch(i){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:s,start:Date.now()})}else if(s===""){switch(i){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let v=r.pop().buf+s;v==="****^reset****"?e=0:this.process_x01(v,e)}else if(s===""){switch(i){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:s,start:Date.now()})}else if(r.length){let v=r[r.length-1];if(v.tag===16&&s==="\r")continue;v.buf+=s,v.tag===16&&s===`
2628
+ `&&r.pop()}else{if(x||(A=Date.now()),s==="\r"||(x+=s,!(Date.now()>A+rd||s===`
2629
2629
  `)))continue;x.slice(0,-1).split(`
2630
- `).forEach(c=>{this.onConsole(c)}),x=""}for(let l=r.length-1;l>=0;l--)Date.now()>r[l].start+TC&&r.splice(l,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),a=parseInt(r,16),i=65535&(A<0?0:t-A),l=65535&a-t-x.length;if(i&&this.onConsole(`?console - x01 ${i} characters lost`),A=a,l){this.onConsole(`?console - x01 ${l} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function je(x){return parseInt(x.slice(6),16)}function TA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function S8(x){return x?new Uint8Array(x):null}function $n(x){return{...x,data:S8(x.data)}}function vs(x){return{...x,data:S8(x.data)}}var NC=/^400000[0-9A-F]{10}$/;function UF(x,A){if(!NC.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var IC=class q8{constructor(){i0(this,"metadata",new Map),i0(this,"utoData",new Map),i0(this,"changeRequests",[]),i0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:$n(this.utoData.get(A).get(e))}async replaceUtoRow(A){UF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,$n(A)]]))}async insertHistoricRows(A){for(let e of A){UF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,$n(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let i=e.fromStamp;t=t.filter(l=>l.stamp>=i)}if(e.untilStamp!==void 0){let i=e.untilStamp;t=t.filter(l=>l.stamp<=i)}t.sort((i,l)=>e.order==="desc"?l.stamp.localeCompare(i.stamp):i.stamp.localeCompare(l.stamp));let a=e.offset??0;return t.slice(a,a+e.limit).map($n)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:TA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(vs)}async getFile(A){let e=this.files.get(A);return e?vs(e):null}async upsertFile(A){this.files.set(A.filename,vs(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?Hn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?Hn(e.data):null}))}}static fromJSON(A){let e=new q8;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?gs(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?gs(r.data,`files.data of "${r.filename}"`):null});return e}},MC=new Set(["link","unknown"]);function Gt(x){return MC.has(x)}var T8=-2;function Le(x){return x.index===T8}var RC=65535,HF={configa:4294928218,configb:4294928219,configc:4294928220};function Ws(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function zn(x){let A=Ws(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(HF,A)?HF[A]:ix.containerIdToTag(A,!1)}function Rt(x){return zn(x.name)}function LC(x,A){let e=x.byNameOrAlias(A);return zn(e?e.name:A)}function P8(x){return Number.isInteger(x)&&x>=0&&x<=RC}var OC={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function GC(x){return x===void 0?"unknown":OC[x.toLowerCase()]??"unknown"}var UC={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},HC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),Xs="name",JC="type";function KC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function zC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function Kr(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function VC(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var WC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function $8(x){let A=WC.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function XC(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=$8(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function YC(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=$8(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function QC(x,A){return x==="string"?A??0:UC[x]}function ZC(x){let A={};for(let[e,r]of x)HC.has(e)||(A[e]=r);return A}function xd(x,A,e){let r=GC(x.get(JC)),t=Kr(x,"max"),a=QC(r,t),i=A.fields[A.fields.length-1],c=Kr(x,"byteofs")??(i?i.byteofs+i.size:A.kind==="histdata"?1:0),u=A.fields.length,b=x.get(Xs)??(A.kind==="histdata"?`ch${u}`:`field${u}`),m=XC(x),g=YC(x),q=Kr(x,"index");return{name:b,alias:x.get("alias"),title:x.get("title"),index:q,sortIndex:q??e,byteofs:c,type:r,size:a,max:t,decpl:Kr(x,"decpl"),vscale:m.value,vofs:g.value,vscaleRef:m.ref,vofsRef:g.ref,units:x.get("units"),editmask:x.get("editmask"),view:Kr(x,"view"),edit:Kr(x,"edit"),default:x.get("default"),bitmask:VC(x),attrs:ZC(x)}}function Ad(){return{name:"",kind:"other",fields:[],recordSize:0}}function ed(x,A,e){switch(A){case Xs:{let r=Ws(e);x.name=r,x.kind=zC(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function rd(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!Gt(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function td(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function nd(x){return x.toLowerCase()==="histdata28"?"applog0":Ws(x)}function id(x){let{keyBytes:A,matchAll:e}=td(x.get("key")??"00");return{source:x.get("source")??"",target:nd(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:Kr(x,"keepraw")}}function sd(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function ad(x,A){switch(A){case"<table>":return x.container=Ad(),x.expectName=!0,!0;case"</table>":return x.container&&(rd(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(xd(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(id(x.split)),x.split=null,!0;default:return!1}}function od(x,A){let{key:e,value:r}=KC(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==Xs)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,ed(x.container,e,r)}}function Fd(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
2630
+ `).forEach(c=>{this.onConsole(c)}),x=""}for(let v=r.length-1;v>=0;v--)Date.now()>r[v].start+ed&&r.splice(v,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),s=parseInt(r,16),i=65535&(A<0?0:t-A),v=65535&s-t-x.length;if(i&&this.onConsole(`?console - x01 ${i} characters lost`),A=s,v){this.onConsole(`?console - x01 ${v} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function ge(x){return parseInt(x.slice(6),16)}function PA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function L8(x){return x?new Uint8Array(x):null}function In(x){return{...x,data:L8(x.data)}}function ls(x){return{...x,data:L8(x.data)}}var nd=/^400000[0-9A-F]{10}$/;function QF(x,A){if(!nd.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var id=class O8{constructor(){i0(this,"metadata",new Map),i0(this,"utoData",new Map),i0(this,"changeRequests",[]),i0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:In(this.utoData.get(A).get(e))}async replaceUtoRow(A){QF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,In(A)]]))}async insertHistoricRows(A){for(let e of A){QF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,In(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let i=e.fromStamp;t=t.filter(v=>v.stamp>=i)}if(e.untilStamp!==void 0){let i=e.untilStamp;t=t.filter(v=>v.stamp<=i)}t.sort((i,v)=>e.order==="desc"?v.stamp.localeCompare(i.stamp):i.stamp.localeCompare(v.stamp));let s=e.offset??0;return t.slice(s,s+e.limit).map(In)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:PA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(ls)}async getFile(A){let e=this.files.get(A);return e?ls(e):null}async upsertFile(A){this.files.set(A.filename,ls(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?Kn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?Kn(e.data):null}))}}static fromJSON(A){let e=new O8;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?ys(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?ys(r.data,`files.data of "${r.filename}"`):null});return e}},sd=new Set(["link","unknown"]);function Ht(x){return sd.has(x)}var G8=-2;function Oe(x){return x.index===G8}var ad=65535,ZF={configa:4294928218,configb:4294928219,configc:4294928220};function Ys(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function Wn(x){let A=Ys(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(ZF,A)?ZF[A]:ix.containerIdToTag(A,!1)}function Ot(x){return Wn(x.name)}function od(x,A){let e=x.byNameOrAlias(A);return Wn(e?e.name:A)}function U8(x){return Number.isInteger(x)&&x>=0&&x<=ad}var Fd={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function vd(x){return x===void 0?"unknown":Fd[x.toLowerCase()]??"unknown"}var fd={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},ld=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),Qs="name",cd="type";function Ed(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function Bd(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function Kr(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function Cd(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var dd=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function H8(x){let A=dd.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function ud(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=H8(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function Dd(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=H8(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function pd(x,A){return x==="string"?A??0:fd[x]}function bd(x){let A={};for(let[e,r]of x)ld.has(e)||(A[e]=r);return A}function md(x,A,e){let r=vd(x.get(cd)),t=Kr(x,"max"),s=pd(r,t),i=A.fields[A.fields.length-1],c=Kr(x,"byteofs")??(i?i.byteofs+i.size:A.kind==="histdata"?1:0),u=A.fields.length,b=x.get(Qs)??(A.kind==="histdata"?`ch${u}`:`field${u}`),m=ud(x),g=Dd(x),q=Kr(x,"index");return{name:b,alias:x.get("alias"),title:x.get("title"),index:q,sortIndex:q??e,byteofs:c,type:r,size:s,max:t,decpl:Kr(x,"decpl"),vscale:m.value,vofs:g.value,vscaleRef:m.ref,vofsRef:g.ref,units:x.get("units"),editmask:x.get("editmask"),view:Kr(x,"view"),edit:Kr(x,"edit"),default:x.get("default"),bitmask:Cd(x),attrs:bd(x)}}function jd(){return{name:"",kind:"other",fields:[],recordSize:0}}function hd(x,A,e){switch(A){case Qs:{let r=Ys(e);x.name=r,x.kind=Bd(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function gd(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!Ht(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function kd(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function yd(x){return x.toLowerCase()==="histdata28"?"applog0":Ys(x)}function _d(x){let{keyBytes:A,matchAll:e}=kd(x.get("key")??"00");return{source:x.get("source")??"",target:yd(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:Kr(x,"keepraw")}}function wd(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function Sd(x,A){switch(A){case"<table>":return x.container=jd(),x.expectName=!0,!0;case"</table>":return x.container&&(gd(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(md(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(_d(x.split)),x.split=null,!0;default:return!1}}function qd(x,A){let{key:e,value:r}=Ed(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==Qs)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,hd(x.container,e,r)}}function Td(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
2631
2631
  `).replace(/\r/g,`
2632
2632
  `).split(`
2633
- `).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||ad(A,t)||t.includes("=")&&od(A,t)}return sd(A.containers,A.splits)}var N8=null,vd=4;function Dt(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function bt(x){let A=x.trim();if(A==="*")return N8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(b,m,g)=>{let q=A.slice(b,b+m);return parseInt(q.length?q.padEnd(m,"0"):g,10)},r=parseInt(A.slice(0,vd),10),t=A.length>=6?e(4,2,"01"):1,a=A.length>=8?e(6,2,"01"):1,i=e(8,2,"00"),l=e(10,2,"00"),c=e(12,2,"00"),u=e(14,3,"000");return Date.UTC(r,t-1,a,i,l,c,u)}var Ut="NAN",fd="%HEX%",ld=65535,Ys=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),i0(this,"alias",x),this.name="DdeUnknownAliasError"}};function Ai(x){return(x.alias??x.name).toLowerCase()}function ei(x){return x==="string"}function Qs(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function I8(x){return(x.editmask??"").toUpperCase()===fd}function cd(x,A){return A===void 0||!Number.isFinite(x)?x:Zs(x,A)}function Zs(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function Ed(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),Zs(x,A-1-r)}function Bd(x){return x==="floatm16"||x==="f32"||x==="f64"}function Cd(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(Bd(x.type)?9:0),r=Zs(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return Ed(r,t)}function Vn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,a=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=a),a<<=1n),e>>=1n,r>>=1n;return Number(t)}function M8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),a=BigInt.asUintN(64,BigInt(Math.trunc(e))),i=1n;for(;a!==0n;)a&1n&&(r=t&1n?r|i:r&~i,t>>=1n),a>>=1n,i<<=1n;return Number(r)}var dd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Wn(x){return!!x.bitmask&&dd.has(x.type)}var R8=255,L8=254,O8=253,G8=252,U8=251,ud=207,xa=65535,Xn=65534,Aa=65533,ea=65532,ra=65531;function Dd(x){switch(x){case R8:return xa;case L8:return Xn;case O8:return Aa;case G8:return ea;case U8:return ra;default:return x<=31?x:x>ud?Xn:(x&15|16)<<(x>>4)-1}}function pd(x){switch(x){case xa:return R8;case Xn:return L8;case Aa:return O8;case ea:return G8;case ra:return U8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var Yn=1023,Ss=31,H8=127,fs=8388607,bd=255,qs=15,md=-14,JF=15;function J8(x){let A=(x&Yn)<<13,e=(x&31744)>>10;if(e===Ss)return z8(1024-(x&Yn));e!==0&&(e=e-qs+4+H8);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function K8(x){if(typeof x=="string"||Number.isNaN(x))return ld;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&fs)+4096,a=(t>fs?1:0)+(e>>>23&bd),i=(t&fs)>>>13;return a!==0&&(a=a-H8-4,a<md?(i=0,a=0):a>JF?(i=Yn,a=JF+qs):a=a+qs),r|a<<10|i}var jd=["OF","UF","OL","SC"],Ts={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:xa,OF:Xn,UF:Aa,OL:ea,SC:ra}},hd={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},lA={NAN:1,OF:2,UF:3,OL:4,SC:5},gd=new Set(["u8","u16","u32","ufm8"]);function kd(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function ta(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function na(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return J8(A.getUint16(e,!1));case"ufm8":return Dd(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function z8(x){switch(x){case lA.OF:return"OF";case lA.UF:return"UF";case lA.OL:return"OL";case lA.SC:return"SC";default:return Ut}}var KF=[["NAN",lA.NAN],["OF",lA.OF],["UF",lA.UF],["OL",lA.OL],["SC",lA.SC]];function yd(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?lA.NAN:(r=r&4194304?8388608-r:r&255,r===0?lA.NAN:r)}function _d(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?lA.NAN:r}function wd(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Wn(x)&&(t=BigInt(Vn(Number(t),x.bitmask)));let a=Ts.s64;return KF.find(([i])=>t===BigInt(a[i]))?.[1]??0}let e=Ts[x.type];if(!e)return 0;let r=na(x.type,A,x.byteofs);return Wn(x)&&(r=Vn(r,x.bitmask)),KF.find(([t])=>r===e[t])?.[1]??0}function V8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Ss)===Ss?1024-(e&Yn):0}case"f32":return yd(A,x.byteofs);case"f64":return _d(A,x.byteofs);default:return wd(x,A)}}function W8(x,A){let e=na(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(Wn(x)&&(e=Vn(e,x.bitmask)),e*x.vscale+x.vofs)}function Sd(x,A){let e=V8(x,A);if(e!==0)return z8(e);let r=W8(x,A);return Number.isNaN(r)?Ut:Cd(x,r)}function qd(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(ei(x.type)||Qs(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return V8(x,e)!==0?NaN:W8(x,e)}function Td(x,A){if(I8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return ix.cp1252Unpack(A,x.byteofs,x.size)}var X8=25569,Y8=864e5;function Pd(x){return(x-X8)*Y8}function $d(x){return x/Y8+X8}function Nd(x,A){if(x.type==="datetime")return Dt(Pd(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return Dt(ix.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),Dt(ix.stamp40ToMS(e))}var Id=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Md(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function Rd(x){let A=x.default;if(A===void 0)return;if(ei(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===Ut)return Ut;if(Id.has(x.type))return Md(e,0);let r=ta(e);return r!==null?r:A}function Ld(x,A,e){return x.byteofs+x.size>e?Rd(x):ei(x.type)?Td(x,A):Qs(x.type)?Nd(x,A):Sd(x,A)}function Ps(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Le(t)||Gt(t.type)||(r[Ai(t)]=Ld(t,e,A.byteLength));return r}function Od(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===Ut||A==="")return{kind:"sentinel",state:"NAN"};let e=jd.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=ta(A);return r!==null?{kind:"value",physical:r}:zF(x)}return zF(x)}function zF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?ta(A):null)??0}}function $s(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,hd[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|lA[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(lA[e]),!1);default:break}let r=Ts[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);Q8(x,A,Number(r))}function Gd(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,K8(r),!1);default:break}if(Number.isNaN(r))return $s(x,A,"NAN");if(!Number.isFinite(r))return $s(x,A,"OF");let t=r;gd.has(x.type)&&t<0&&(t=0),Q8(x,A,kd(t))}function Q8(x,A,e){if(Wn(x)){let r=na(x.type,A,x.byteofs);e=M8(r,e,x.bitmask)}Ud(x.type,A,x.byteofs,e)}function Ud(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,pd(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function Hd(x,A,e){let r=String(e);if(I8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${Ai(x)}"`);for(let a=0;a<x.size;a++){let i=a*2<t.length?parseInt(t.substr(a*2,2),16):0;A.setUint8(x.byteofs+a,i)}return}ix.cp1252Pack(A,x.byteofs,x.size,r)}function Jd(x,A,e){let r=bt(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${Ai(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,$d(r),!1);return}let t=ix.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function Kd(x,A,e){if(ei(x.type))return Hd(x,A,e);if(Qs(x.type))return Jd(x,A,e);let r=Od(x,e);switch(r.kind){case"skip":return;case"sentinel":return $s(x,A,r.state);case"value":return Gd(x,A,r.physical)}}function Ns(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),a=new Map(x.fields.filter(i=>!Le(i)&&!Gt(i.type)).map(i=>[Ai(i),i]));for(let[i,l]of Object.entries(A)){let c=a.get(i.toLowerCase());if(!c)throw new Ys(i);Kd(c,t,l)}return r}var VF=99,zd=256,Er=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),i0(this,"container",x),this.name="DdeUnknownContainerError"}},Ht=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),i0(this,"container",x),i0(this,"field",A),this.name="DdeWriteForbiddenError"}},ia=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),i0(this,"field",x),this.name="DdeUnknownFieldError"}};function ls(x){return(x.alias??x.name).toLowerCase()}var Vd=class{constructor(x,A,e=zt){i0(this,"model",x),i0(this,"storage",A),i0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Rt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Ps(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Er(x);let r=Rt(e);if(r===null)throw new Er(x);if(e.edit===VF)throw new Ht(e.name);let{stamp:t,...a}=A;this.assertFieldsWritable(e,a);let i=await this.storage.getRowForTag(r),l=Ns(await this.resolveScaleRefs(e),a,i?.data??null),c=ix.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),u=TA(c);return await this.storage.replaceUtoRow({tag:r,stamp:u,flags:i?.flags??0,site_related:i?.site_related??0,data:l}),{tag:r,stampHex:u,stamp40:c,data:l,devicePushable:P8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Er(x);let r=Rt(e);if(r===null)throw new Er(x);let{stamp:t,...a}=A,i=Ns(await this.resolveScaleRefs(e),a,null),l=ix.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:TA(l),flags:0,site_related:0,data:i})}recordStampMs(x){if(typeof x!="string")return null;try{return bt(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Er(x);let r=this.model.splits.find(u=>u.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Er(x);let t=Math.abs(A.count),a=A.offset??0,i=this.buildSelectSet(e,A.select),l=await this.resolveScaleRefs(e);return(await this.collectMatched(l,r,a+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:i})).slice(a,a+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let a=Math.max(e,zd);for(let i=0;;i+=a){let l=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:a,offset:i});for(let c of l)if(c.data&&this.matchesSplit(c.data,A)&&(t.push(this.recordFromRow(x,c,r.selectSet)),t.length>=e))return t;if(l.length<a)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=Ps(x,A.data),t={stamp:this.rowStamp(A)};for(let[a,i]of Object.entries(r))a!=="stamp"&&(!e||e.has(a))&&(t[a]=i);return t}rowStamp(x){return Dt(ix.stamp40ToMS(je(x.stamp)))}boundHex(x){if(x!=null)return TA(ix.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let a=A.get(t);if(!a)return e;let i=qd(r,a);return i===null?e:i}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>ls(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Rt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Le(r)&&!Gt(r.type)).map(r=>[ls(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===VF)throw new Ht(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Le(t)&&!Gt(t.type)).map(t=>ls(t))),r=new Set;for(let t of A){let a=t.toLowerCase();if(a!=="stamp"){if(!e.has(a))throw new ia(t);r.add(a)}}return r}},Wd=new Set(["$titles","$meta"]);function Xd(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Is(x,A){let e=A.toLowerCase();if(Wd.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[a,i]of Object.entries(r)){if(typeof i!="object"||i===null)continue;let l=i.alias;typeof l=="string"&&l.length>0&&t.set(a.toLowerCase(),l)}return t}function Z8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let a=A?.get(r.toLowerCase());e[a??r]=t}return e}function Vt(x,A){if(!x)return null;let e=Is(x,A.name);return e||(A.alias?Is(x,A.alias):null)}var Yd=require("events"),X0="[OfflineSyncManager]",Qd=500,Zd="site_info",xu=new Set(["local-data-interface.json"]);function nA(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function Au(x){let A=Kn(x);return!!(x&2)||A!==0&&A!==65}function WF(x){return x.filter(A=>(A.filename===ut||A.filename===Ks)&&A.outcome==="download").map(A=>A.filename)}var Gr="skip-equal",dt="skip-device-readonly",cs="delete",lr="error",Es="upload",Bs="uploading-utos",XF="downloading-utos",Nn="fetching-device-state",Cs="uploading-files",In="downloading-files",YF="executing-change-requests",QF="executed",eu="error",ds="skip-old-stamp",ru=class extends Yd.EventEmitter{constructor(x,A,e){super(),i0(this,"utoMaster",x),i0(this,"storage",A),i0(this,"logger",e)}emitProgress(x,A,e,r,t){let a={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",a)}async uploadHistoricTag(x,A,e,r,t){try{let a=await this.storage.getRowForTag(x),i=0,l=async c=>{let u=c.filter(b=>b.stamp40>e).map(b=>({tag:x,stamp:TA(b.stamp40),flags:a?.flags??0,site_related:a?.site_related??0,data:b.data}));await this.storage.insertHistoricRows(u),i+=u.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,Qd,l),this.logger?.info(`${X0} historic upload tag=0x${x.toString(16)} +${i} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:i}}catch(a){return this.logger?.error(`${X0} historic upload error tag=0x${x.toString(16)}: ${a}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${X0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:Gr,dbStamp40:e,deviceStamp40:r};let a=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:TA(t.stamp),flags:a?.flags??0,site_related:a?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${X0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${X0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(Bs,null,0,t);let a=0;for(let i of x){nA(r);let l=A.get(i),{tagInfo:c,dbStamp40:u,deviceStamp40:b}=l;if(this.emitProgress(Bs,c?.sTag??`0x${i.toString(16)}`,a,t),!c||b===null)e.set(i,{tag:i,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:u,deviceStamp40:b});else if(!(!c.flags.up||b<=u)){let m=c.sTag,g=a,q=c.historic?await this.uploadHistoricTag(i,c,u,b,_=>{this.emitProgress(Bs,m,g,t,{recordsReceived:_})}):await this.uploadSingleTag(i,c,u,b);e.set(i,q)}++a}}async pullFileFromDevice(x,A,e,r,t,a){let i=A.stamp;try{let l=await this.utoMaster.requestFile(x,u=>{this.emitProgress(Cs,x,a,t,{bytesTransferred:u})}),c=Js(l);if(c!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${c.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:TA(i),crc:A.crc32,size:l.byteLength,flags:A._flags,flags_int:r,data:l}),{filename:x,outcome:Es,dbStamp40:e,deviceStamp40:i}}catch(l){return this.logger?.error(`${X0} file upload error ${x}: ${JSON.stringify(l)}`),{filename:x,outcome:lr,dbStamp40:e,deviceStamp40:i}}}async autoSyncUploadFile(x,A,e,r,t,a,i,l){let c=A.stamp;if(c>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):a?this.pullFileFromDevice(x,A,r,t,i,l):void 0;if(c===r&&this.fileContentMatches(A,e))return{filename:x,outcome:Gr,dbStamp40:r,deviceStamp40:c}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:TA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:Gr,dbStamp40:r,deviceStamp40:t}}catch(a){return this.logger?.error(`${X0} file upload error ${x}: ${JSON.stringify(a)}`),{filename:x,outcome:lr,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,a,i){let l=A.stamp;if(l!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,a,i):{filename:x,outcome:dt,dbStamp40:r,deviceStamp40:l}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),a=!!(A._flags&1);if(!t)return a?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let i=je(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,i,t.flags_int,a,e,r):this.decideNonSystemUpload(x,A,t,i,a,e,r)}pullIfReadable(x,A,e,r,t,a,i){return x?this.pullFileFromDevice(A,e,r,t,a,i):void 0}async decideNonSystemUpload(x,A,e,r,t,a,i){let l=e.flags_int;if(!(l&2))return l&4?this.pullIfReadable(t,x,A,r,l,a,i):this.decideUploadBySyncLogic(x,A,e,r,t,a,i)}async decideUploadBySyncLogic(x,A,e,r,t,a,i){let l=e.flags_int,c=Kn(l);if(c===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,l,a,i);if(c===1)return this.autoSyncUploadFile(x,A,e,r,l,t,a,i);if(c===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,l,a,i):void 0;if(c!==33)return this.mirrorUploadFile(x,A,e,r,t,a,i)}async uploadFiles(x,A,e,r){let t=Object.entries(x),a=t.length;this.emitProgress(Cs,null,0,a);let i=0;for(let[l,c]of t){if(nA(r),!(l===Ks||l===ut&&!e)){let b=await this.decideFileUpload(l,c,a,i);b&&A.set(l,b)}this.emitProgress(Cs,l,++i,a)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${X0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let a=A.flags.up?Gr:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:a,dbStamp40:e,deviceStamp40:r});return}if(e>r){let a=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:dt,dbStamp40:e,deviceStamp40:r};t.set(x,a)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(XF,null,0,t);let a=0;for(let i of x){nA(r);let{tagInfo:l,dbStamp40:c,deviceStamp40:u}=A.get(i);l&&u!==null&&!l.historic&&await this.processDownloadTag(i,l,c,u,e),this.emitProgress(XF,l?.sTag??`0x${i.toString(16)}`,++a,t)}}async sendFileToDevice(x,A,e,r,t){let a=x.data.byteLength,i=l=>{if(l!==null){let c=Math.round(a*parseInt(l,10)/100);this.emitProgress(In,x.filename,t,r,{bytesTransferred:c,bytesTotal:a})}};this.utoMaster.on("installing",i);try{return await this.utoMaster.sendFile(0,x.data,ix.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(l){return this.logger?.error(`${X0} file download error ${x.filename}: ${l}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",i)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let a=A?.stamp??0,i=je(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return i===a?void 0:{filename:x.filename,outcome:Gr,dbStamp40:i,deviceStamp40:a};if(!(!t&&i<a))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:dt,dbStamp40:i,deviceStamp40:a}:this.sendFileToDevice(x,i,a,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(Zd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${X0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),a=t.filter(m=>m.flags&8),i=t.filter(m=>!(m.flags&8)),l=[...a,...i].filter(m=>m.filename),c=Object.entries(x).filter(([,m])=>m._flags&4).map(([m])=>m),u=l.length;this.emitProgress(In,null,0,u);let b=0;for(let m of l){if(nA(r),e&&m.filename===ut){this.emitProgress(In,m.filename,++b,u);continue}let g=m.filename===ut&&!e,q=await this.decideFileDownload(m,x[m.filename],A.get(m.filename),c,g,u,b);q&&A.set(m.filename,q),this.emitProgress(In,m.filename,++b,u)}}async decideFileDownload(x,A,e,r,t,a,i){return A!==void 0?this.decideDownloadExisting(x,A,e,t,a,i):this.decideDownloadMissing(x,r,a,i)}async decideDownloadExisting(x,A,e,r,t,a){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,a,r);let i=x.flags_int;if(i&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(i&4))return this.pushToDevice(x,A,t,a)}async pushToDevice(x,A,e,r){let t=A.stamp,a=je(x.stamp),i=this.wantDownloadPush(x,A,a,t);if(i==="match")return{filename:x.filename,outcome:Gr,dbStamp40:a,deviceStamp40:t};if(i!=="none"&&!(a===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,a,t,e,r):{filename:x.filename,outcome:dt,dbStamp40:a,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let a=this.fileContentMatches(A,x),i=Kn(t);return i===33||i===1&&e>=r?a?"match":"push":i===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=je(x.stamp);if(!(e&&(e.outcome===Es||e.outcome===lr))){if(!(A._flags&2))return{filename:x.filename,outcome:dt,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:cs,dbStamp40:t,deviceStamp40:r}}catch(a){return this.logger?.error(`${X0} file delete error ${x.filename}: ${JSON.stringify(a)}`),{filename:x.filename,outcome:lr,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,a=je(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:cs,dbStamp40:a,deviceStamp40:null}}catch(i){return this.logger?.error(`${X0} file delete error ${x.filename}: ${JSON.stringify(i)}`),{filename:x.filename,outcome:lr,dbStamp40:a,deviceStamp40:null}}if(!(x.flags&12)&&Au(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,a,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${X0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(a=>[a.filename,a]));for(let[a,i]of Object.entries(A))nA(x),await this.reconcileDeviceFile(a,i,t.get(a)??null);for(let a of r)nA(x),e.has(a.filename)||await this.dropRowMissingFromDevice(a)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${X0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:TA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||xu.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${X0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){nA(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${X0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${X0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${X0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${X0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let a=A.get(t),i=await this.storage.getLatestStampForTag(t),l=i?je(i):0,c=a&&a.index<e.stamps.length?e.stamps[a.index]:null;r.set(t,{dbStamp40:l,deviceStamp40:c,tagInfo:a})}return r}async executeChangeRequests(x,A,e,r,t,a){let i=await this.storage.getUtoChangeRequests(),l=this.groupChangeRequests(i),c=l.size;if(this.emitProgress(YF,null,0,c),c===0)return;let u=new Set,b=0;for(let[m,g]of l){nA(a);let q=x.get(m),_=q?.sTag??`0x${m.toString(16)}`;this.emitProgress(YF,_,b,c),await this.executeChangeRequestTag(m,_,q,g,A,r,t,u),++b}u.size>0&&await this.repullExecutedTags(u,x,e,a)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:je(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,a,i,l){if(!e){this.pushChangeResults(i,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(i,x,A,r,"skip-unsupported");return}let c=e.index<t.stamps.length?t.stamps[e.index]:0,u=r.filter(m=>m.stamp40<=c),b=r.filter(m=>m.stamp40>c);this.pushChangeResults(i,x,A,u,ds),b.length>0&&await this.coalesceAndSend(x,A,e,b,a,i,l)}async coalesceAndSend(x,A,e,r,t,a,i){let l=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===lr||!l||!l.data){this.pushChangeResults(a,x,A,r,"error");return}let c=this.resolveSetObject(l.data,r,A);if(c===null){this.pushChangeResults(a,x,A,r,"error");return}if(Object.keys(c).length===0){this.pushChangeResults(a,x,A,r,"skip-no-change");return}let u=r[r.length-1].stamp40,b=await this.utoMaster.sendSetValue(x,JSON.stringify(c),u);b.outcome==="ok"||b.outcome==="stamp"?(i.add(x),this.pushChangeResults(a,x,A,r,QF,b.resultCode)):b.outcome==="denied"?(this.logger?.warn(`${X0} change-request denied ${A} (result=${b.resultCode}) \u2014 server will retry`),this.pushChangeResults(a,x,A,r,"denied",b.resultCode)):(this.logger?.error(`${X0} change-request error ${A} (result=${b.resultCode})`),this.pushChangeResults(a,x,A,r,"error",b.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(ix.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${X0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let a=JSON.parse(t.json);if(!this.isPlainRecord(a))throw new Error(`change-request JSON is not an object on ${e}`);for(let[i,l]of Object.entries(a)){let c=this.resolveChangeField(x[i],l,i,e);c.apply&&(r[i]=c.value,x[i]=c.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:a}=A;return this.resolveBitwiseOp(x,t,a,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${X0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${X0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${X0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,a){for(let i of r)x.push({tag:A,sTag:e,stamp40:i.stamp40,user:i.user,outcome:t,resultCode:a})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(a){this.logger?.warn(`${X0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${a}`)}for(let a of x)nA(r),await this.repullExecutedTag(a,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${X0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let a=await this.storage.getRowForTag(x),i=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:TA(i),flags:a?.flags??0,site_related:a?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let l=r.get(x);if(l){let c=A.get(x),u=e&&c&&c.index<e.stamps.length?e.stamps[c.index]:i;l.dbStamp40=i,l.deviceStamp40=u}this.logger?.info(`${X0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${i}`)}catch(t){this.logger?.error(`${X0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],a=WF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:a.length>0,rebootFilesDeployed:a,totalTagsUploaded:r.filter(i=>i.outcome==="upload"&&!i.historic).length,totalTagsDownloaded:r.filter(i=>i.outcome==="download").length,totalTagsSkipped:r.filter(i=>i.outcome===Gr||i.outcome==="skip-db-readonly"||i.outcome===dt).length,totalHistoricRecordsAppended:r.reduce((i,l)=>i+(l.recordsAppended??0),0),totalFilesUploaded:t.filter(i=>i.outcome===Es).length,totalFilesDownloaded:t.filter(i=>i.outcome==="download").length,totalFilesDeleted:t.filter(i=>i.outcome===cs).length,totalChangeRequestsExecuted:e.filter(i=>i.outcome===QF).length,totalErrors:r.filter(i=>i.outcome===lr).length+t.filter(i=>i.outcome===lr).length+e.filter(i=>i.outcome===eu).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);nA(A),this.emitProgress(Nn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${X0} requestStamps returned null`);this.emitProgress(Nn,"stamps",1,3);let a=await this.utoMaster.requestFileList();this.emitProgress(Nn,"file-list",2,3);let i=await this.resolveDbTags(r);this.emitProgress(Nn,"db-tags",3,3);let l=await this.buildTagStampCache(i,r,t),c=new Map,u=new Map,b=[],m=await this.isAppInDevPhase();return nA(A),await this.uploadUtoTags(i,l,c,A),nA(A),await this.uploadFiles(a,u,m,A),nA(A),await this.executeChangeRequests(r,t,l,c,b,A),nA(A),await this.downloadUtoTags(i,l,c,A),nA(A),await this.downloadFiles(a,u,m,A),nA(A),WF([...u.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(c,u,b)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${X0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${X0} requestStamps returned null`);let a=r.get(x),i=a?.sTag??`0x${x.toString(16)}`,l=A.map(g=>({stamp40:g.stamp40,user:"",json:g.json})).sort((g,q)=>g.stamp40-q.stamp40),c=new Map,u=[],b=new Set;return await this.executeChangeRequestTag(x,i,a,l,t,c,u,b),b.size>0&&await this.repullExecutedTags(b,r,new Map,void 0),u.find(g=>g.outcome!==ds)?.outcome??ds}},tu=require("events"),nu=require("events"),iu=require("events"),su=5e3,sa=class xv extends iu.EventEmitter{constructor(A=he){super(),i0(this,"logger",A),i0(this,"ws",null),i0(this,"bridgeTransport",null),i0(this,"bridgeSignal"),i0(this,"bridgeResolve",null),i0(this,"bridgeReject",null),i0(this,"serverMessageCount",0),i0(this,"settled",!1),i0(this,"abortHandler",null),i0(this,"connectTimeout"),i0(this,"writeQueue",[]),i0(this,"isProcessingQueue",!1),i0(this,"queueAborted",!1),i0(this,"queueDrainPromise",Promise.resolve()),i0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await y8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((a,i)=>{if(t?.aborted){i(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=a,this.bridgeReject=i;let l=xv.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${l}`);let c=new WebSocket(l);c.binaryType="arraybuffer",this.ws=c,this.connectTimeout=setTimeout(()=>{c.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),c.close(),this.settle("reject",new Error("WebSocket connection timeout")))},su),this.attachWebSocketHandlers(c,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},Av="https://lic.mydatanet.at/api/2/";async function ev(x,A=Av){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var rv=class extends nu.EventEmitter{constructor(x=he){super(),i0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await ev(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let a=new sa(this.logger);a.on("wsConnected",()=>this.emit("wsConnected")),a.on("wsClosed",(l,c)=>this.emit("wsClosed",l,c)),a.on("wsError",l=>this.emit("wsError",l)),a.on("serverMessage",l=>this.emit("serverMessage",l));let i=await a.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+i.serverMessageCount+")"),{serverMessageCount:i.serverMessageCount}}},au=require("events"),tv="Operation aborted";function ou(x){return x instanceof Error?x.message:String(x)}function us(x){if(x?.aborted)throw new Error(tv)}var nv=class extends au.EventEmitter{constructor(x,A=he){super(),i0(this,"atHandler",x),i0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:i=>this.atHandler.queryMntServerConfig(i),initiateSync:i=>this.atHandler.initiateMntSync(i)},{name:"mdn",queryServer:i=>this.atHandler.queryMdnServerConfig(i),initiateSync:i=>this.atHandler.initiateMdnSync(i)}],a={};for(let i of t)try{a[i.name]=await this.runSyncPhase(i,x,A,r)}catch(l){if(r?.aborted)throw new Error(tv);let c=`${i.name.toUpperCase()} sync phase failed: ${ou(l)}`;throw this.logger.error(c),new Error(c)}return this.logger.info(`Debug sync completed (mntMessages=${a.mnt}, mdnMessages=${a.mdn})`),{mntServerMessageCount:a.mnt,mdnServerMessageCount:a.mdn}}async runSyncPhase(x,A,e,r){us(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let a=await x.queryServer(r);this.logger.info(`${t} server domain: ${a}`),us(r),await x.initiateSync(r),us(r);let i=await this.syncWithServer(A,a,e,r);return this.logger.info(`${t} phase completed (serverMessages=${i.serverMessageCount})`),i.serverMessageCount}async syncWithServer(x,A,e,r){let t=new sa(this.logger),a=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let i=this.atHandler.createConCloseMonitor(()=>{a=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let l=await t.bridge(x,A,e,r);return a?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),l}finally{i()}}},Fu=class extends tu.EventEmitter{constructor(x,A,e=he){super(),i0(this,"syncTransport",x),i0(this,"logger",e),i0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new rv(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new nv(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},vu=require("events"),Hx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},nx={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},fA=1e4,iv=9e4,sv=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function av(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Ur="Operation aborted",oA=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},aa=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},fu=class extends vu.EventEmitter{constructor(x,A=he){super(),i0(this,"transport",x),i0(this,"logger",A),i0(this,"mutex",new Vs("AtCommandHandler")),i0(this,"bufferState",av()),i0(this,"responseCallback",null),i0(this,"decoder",new TextDecoder),i0(this,"dataHandler"),i0(this,"disposeTransportListener"),i0(this,"isDisposed",!1),i0(this,"activeAbort",null),i0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=fA,a)=>this.executeSendAndWait(e,r,t,a),sendRaw:(e,r=fA)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(Hx.MNT_CFG,nx.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(Hx.MDN_CFG,nx.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new oA;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return a=>{if(x!==nx.ERROR&&a.includes(nx.ERROR)){A(),r(new aa);return}let i=!1,l=a;if(t){let c=a.match(x);c&&(i=!0,l=c[0])}else i=a.includes(x);if(i){A(),e(l);return}a.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,a)=>{if(this.isDisposed){a(new oA);return}if(r?.aborted){a(new Error(Ur));return}x&&(this.bufferState.buffer="");let l=A instanceof RegExp?A.source:A,c={cleanup:()=>{}},u=setTimeout(()=>{c.cleanup(),a(new Error(`Timeout waiting for response: ${l}`))},e),b=()=>{c.cleanup(),a(new Error(Ur))};c.cleanup=this.makeCleanup(u,r,b),r&&r.addEventListener("abort",b);let m=this.makeResponseChecker(A,c.cleanup,t,a);this.responseCallback=m,this.activeAbort=()=>{c.cleanup(),a(new oA)},!x&&this.bufferState.buffer&&m(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(g=>{c.cleanup(),a(g)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new oA);return}this.bufferState.buffer="";let t=setTimeout(()=>{a(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),a=this.makeCleanup(t);this.activeAbort=()=>{a(),r(new oA)},this.responseCallback=i=>{sv.test(i)&&(a(),this.logger.info("RX: "+i.trim()),e(i))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(i=>{a(),r(i)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new oA);return}if(e?.aborted){t(new Error(Ur));return}this.bufferState.buffer="";let a={cleanup:()=>{}},i=setTimeout(()=>{a.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},fA),l=()=>{a.cleanup(),t(new Error(Ur))};a.cleanup=this.makeCleanup(i,e,l),e&&e.addEventListener("abort",l);let c=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{a.cleanup(),t(new oA)},this.responseCallback=u=>{let b=u.match(c);if(b){a.cleanup();let m=b[1].trim();this.logger.info(`Server config ${A}: ${m}`),r(m);return}u.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(u=>{a.cleanup(),this.logger.error(`Failed to send ${A} command: `+(u instanceof Error?u.message:String(u))),t(u)})})}async sendAndWait(x,A,e=fA,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=fA){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(Hx.MNT_SYNC,nx.OK,fA,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(Hx.MDN_SYNC,nx.OK,fA,x),await this.executeSendAndWait(null,nx.SYNC_START,fA,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new oA;if(A?.aborted)throw new Error(Ur);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${Hx.COMPANION_CERT}=${r}`,nx.OK,fA,A),a=parseInt(t.match(/(\d+)/)[1],10),i=0;for(;i<r;){let l=Math.min(a,r-i),c=e.slice(i,i+l);await this.executeSendAndWait(`${Hx.COMPANION_CERT}=${l},${i},${c}`,nx.OK,fA,A),i+=l}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new oA);return}if(A?.aborted){r(new Error(Ur));return}this.bufferState.buffer="";let t={cleanup:()=>{}},a=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},fA),i=()=>{t.cleanup(),r(new Error(Ur))};t.cleanup=this.makeCleanup(a,A,i),A&&A.addEventListener("abort",i),this.activeAbort=()=>{t.cleanup(),r(new oA)},this.responseCallback=c=>{let u=c.match(nx.COMPCERT_ERROR);if(u){t.cleanup(),e({success:!1,errorCode:parseInt(u[1],10)});return}if(c.includes(nx.OK)){t.cleanup(),e({success:!0});return}c.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let l=`${Hx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+l),this.transport.write(this.encodeCommand(l)).catch(c=>{t.cleanup(),r(c)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(Hx.COMPANION_CERT_TEST,nx.OK,fA,x),!0}catch(A){if(A instanceof oA)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(Hx.CON_CLOSE,nx.CON_CLOSE,fA,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(nx.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},ov=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(ov||{}),lu=require("events"),Ds="requesting-cert",ps="cert-revoked",Fv=class Ms extends lu.EventEmitter{constructor(){super(...arguments),i0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??Jn,{signal:r,atHandler:t}=A,a=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),a();let i=await this.loadOrGenerateKeypair(A.storage),l=await A.storage.getCertificate(A.apiConfig.apiHost);(l===null||!Hs(l.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ds),a(),l=await this.requestAndStoreCert(i,A)),this.utoMaster=new _8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),a();let c=l;l=await t.withAtLock(async m=>{let g=await this.presentCertWithRefresh(m,c,i,A);return await m.initiateMdnSync(r),g}),this.emitPhase("ecs-handshake"),a(),await this.utoMaster.init();let u=await this.utoMaster.initiateEcsHandshake({companionPublicKey:i.publicKey,companionPrivateKey:i.privateKey,signal:r});if(!u.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${u.resultCode})`);this.emitPhase("connected");let b=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:b}}catch(i){return this.handleError(i)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await hs();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await C8(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof Ot&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new bs(ps,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Ms.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let i=await hs();return await A.storage.saveKeypair(i),i})(),t=await Ms.fetchCertOrThrowRevoked(r,A),a={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(a,A.apiConfig.apiHost),a}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let a=await A.sendCompanionCert(e.base64Url,t.signal);if(a.success||a.errorCode===3&&((t.logger??Jn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ds),e=await this.requestAndStoreCert(r,t),a=await A.sendCompanionCert(e.base64Url,t.signal),a.success))return e;throw new bs("cert-presenting",`AT+COMPCERT rejected (code ${a.errorCode??"?"})`,{certErrorCode:a.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof bs?(this.emit("phase",A.phase===ps?ps:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof Ot?{success:!1,phase:Ds,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};i0(Fv,"encodePublicKeyBase64Url",Us);var cu=Fv,bs=class extends Error{constructor(x,A,e={}){super(A),i0(this,"phase",x),i0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},vv=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(vv||{}),Eu={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Bu(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var Cu=require("events");function fv(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function lv(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function cv(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Rs(x,A){return x.map((e,r)=>({name:e.name,displayValue:cv(A[r]??"",e.scale,e.offset),unit:e.unit}))}var du=2e3,Ev=class extends Cu.EventEmitter{constructor(x,A=he){super(),i0(this,"atHandler",x),i0(this,"logger",A),i0(this,"datapoints",[]),i0(this,"values",[]),i0(this,"polling",!1),i0(this,"pollTimer",null),i0(this,"fetchInProgress",!1),i0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(Hx.APP_GET_METADATA),A=x.includes(nx.OK)?{supported:!0,pinRequired:!1}:x.includes(nx.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(nx.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(nx.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${Hx.APP_GET_METADATA}=${x}`:Hx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(nx.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(nx.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(nx.OK)){let r=fv(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(nx.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${Hx.APP_GET_DATAVALUE}=${A}`:Hx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(nx.OK)){let t=lv(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Rs(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(Hx.APP_TRIG_MEASURE_TEST)).includes(nx.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof oA)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=iv,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let a=await t.sendRaw(Hx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+a),!a.includes(nx.OK))return this.logger.warn("Measurement trigger rejected: "+a.trim()),{outcome:"rejected",values:[],response:a};this.emit("measurementTriggered");try{let i=await t.sendAndWait(null,nx.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(c=>t.sendRaw(c),A),response:i}}catch(i){if(i instanceof oA)throw i;let l="timeout";return i instanceof aa?l="error":r?.aborted&&(l="aborted"),this.logger.warn(`Measurement ${l} while waiting for ${nx.MEASURED}: `+(i instanceof Error?i.message:String(i))),this.emit("measurementFailed",l),{outcome:l,values:[],response:a}}})}async startPolling(x,A=du){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return Rs(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function uu(x,A,e){let r=a=>{if(a instanceof oA)throw a},t=new Ev(x);try{let a=await x.queryMdnServerConfig(e).catch(m=>(r(m),!1)),i=await t.checkSupport().catch(m=>(r(m),{supported:!1,pinRequired:!1})),l=i.supported?await t.checkMeasurementTriggerSupport().catch(m=>(r(m),!1)):!1,c=i.supported?{pinRequired:i.pinRequired,canTriggerMeasurement:l}:!1,u=!1,b=!1;if(a){let[m,g]=await Promise.all([x.queryCompanionCertSupport(e).catch(q=>(r(q),!1)),A?.getCertificate(a)]);u=m,b=g!=null&&Hs(g.notAfter)}return{hostname:a,localData:c,secureConnection:u,validCert:b}}finally{t.dispose()}}var Du=require("events"),pu={0:"trigger",1:"wakeup",2:"online"},bu={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},mu={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Yx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},ju=Yx.FAILED|Yx.ACTIVE|Yx.STARTED|Yx.RETRY|Yx.WAKEUPABLE|Yx.EXTSIM|Yx.DISABLED|Yx.WAKEUP|Yx.POSUPDATE_ACTIVE,ZF=`${nx.RM2M_STATE}: `;function Bv(x=0){let A=(x&Yx.WAKEUPABLE)!==0,e="offline",r=A;return x&Yx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Yx.RETRY?(e="retry",r=!1):x&Yx.STARTED?(e="dialing",r=!1):x&Yx.ACTIVE?(e="active",r=!1):x&Yx.FAILED?(e="failed",r=A):x&Yx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Yx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~ju}}function hu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:pu[A]??x}function gu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:bu[A]??["unknown",`itf#${x}`,`itf#${x}`]}function ku(x){if(x.length===0)return null;let A=x.join(",");return mu[A]??A}function Cv(x){let A=x.split(","),[e,r,t,a,...i]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let l=parseInt(r,10),c=gu(a),u=a!==void 0?parseInt(a,10):NaN;return{stamp:new Date,rssi:u>=101?null:parseInt(e,10),state:l,uplinkState:Bv(l),uplinkMode:hu(t),uplinkInterface:c?c[0]:null,uplinkInterfaceExtended:c?c[1]:null,uplinkInterfaceTechnical:c?c[2]:null,scriptState:ku(i)}}function dv(x){let A=x.indexOf(ZF);if(A===-1)return null;let e=x.substring(A+ZF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?Cv(t):null}var yu=5e3,_u=class extends Du.EventEmitter{constructor(x,A=Jn){super(),i0(this,"atHandler"),i0(this,"logger"),i0(this,"lastState",null),i0(this,"pollingTimer",null),i0(this,"polling",!1),i0(this,"fetchInProgress",!1),i0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(Hx.RM2M_STATE),A=dv(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=yu){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},wu=require("events"),uv=class extends wu.EventEmitter{constructor(){super(...arguments),i0(this,"serialNumber",""),i0(this,"serverUrl",""),i0(this,"deviceId",""),i0(this,"rssi",null),i0(this,"hasDebugSupport",!1),i0(this,"connectionState","disconnected"),i0(this,"connectionError",""),i0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},Su=require("events"),Dv={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},qu=class extends Su.EventEmitter{constructor(x=he,A){super(),i0(this,"logger",x),i0(this,"state"),i0(this,"transports",null),i0(this,"transportFactory",null),i0(this,"disconnectFn",null),i0(this,"reconnectOptions"),i0(this,"reconnectAbortController",null),this.state=new uv,this.reconnectOptions={...Dv,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},Tu={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},Pu={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},$u=590,Nu=3e4,R0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},PA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},ri=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},oa=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function $A(x){try{return decodeURIComponent(x)}catch{throw new R0("malformed url encoding")}}var Iu=2e3,Mu=2136;function Fa(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=Iu&&A<=Mu}function mt(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!Fa(e))throw new R0(`attribute '${A}' is not valid`)}}function Ru(x){return typeof x.setMetadataValue=="function"?x:null}function Lu(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function va(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function Ou(x){return{status:200,body:x.ctx.siteInfo}}async function Gu(x){let{blueprint:A}=x.ctx;if(!A)throw new PA("blueprint unavailable");return{status:200,body:A}}async function Uu(x){let{me:A}=x.ctx;if(A==null)throw new PA("no profile stored");return{status:200,body:A}}function pv(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(a){x.logger?.error(`[localApi] device push for tag ${A} failed:`,a)}})()}async function Hu(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var Ju=1024;function Wt(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function bv(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(Ju,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var fa=26432,Wr={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},mv=Object.keys(Wr),Xt=["standby","commissioned","offline","commissioning","online"],Ls=Xt.reduce((x,A)=>x|Wr[A],0)>>>0;function jv(x){let A=0;for(let e of mv)x[e]===!0&&(A|=Wr[e]);return A>>>0}function la(x,A){let e={};for(let r of mv)x&Wr[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function hv(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(fa);if(!r?.data)return!1;let t=Wt(r.data);if(!t)return!1;let a=!1;if(typeof t.lifecycleFlags=="number"){let i=la(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(i)&&(e.lifecycle_flags=i,a=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,a=!0),a}var Ku=new Set([...Xt,"service","lifecycle_state"]);function zu(x,A){let e=Math.max(ix.msToStamp40((x.timeSource??zt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function Vu(x){let A=Qu(x.request.body??null);if(!A)throw new R0("invalid or missing request body");Wu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!Yu(r))throw new R0("this site does not support lifecycle flags!");let t=jv(r),a=t;for(let u of Xt){let b=A[u];typeof b=="boolean"&&(a=b?a|Wr[u]:a&~Wr[u])}if(a>>>=0,a===t)return{status:204,body:""};let i=zu(e,x.session),l=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~Ls>>>0}}),stamp40:i},{json:JSON.stringify({lifecycleFlags:{op:"|",val:a&Ls}}),stamp40:i+1}],c=Lu(e.storage);return c&&await c.insertUtoChangeRequests(l.map(u=>({tag:fa,stamp40:u.stamp40,json:u.json}))),e.siteInfo.lifecycle_flags=la(a,r),await gv(e),Xu(e,l),{status:204,body:""}}function Wu(x){let A=[];for(let[e,r]of Object.entries(x))Ku.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new R0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Xt.includes(e)))throw new R0("invalid parameters")}async function Xu(x,A){try{let e=await Hu(x,fa,A);e==="executed"?await hv(x.storage,x.siteInfo)&&await gv(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function gv(x){await Ru(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function Yu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function Qu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function kv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new R0('"select" must be an array')}}function Zu(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new R0("invalid parameter, select must be an array")}}function xD(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(Le(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function AD(x){let A=new Map;for(let e of x.fields){if(Le(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function eD(x){let A=new Set;for(let e of x.fields)Le(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function rD(x,A,e){if(!e)return null;let r=xD(x,A),t=new Set,a=[];for(let i of e){if(i==="stamp")continue;let l=r.get(i);l?t.add(l):a.push(i)}if(a.length>0)throw yv(a);return t}function tD(x,A){let e=AD(x),r=[],t=[],a=!1;for(let i of A){if(i==="stamp"){a=!0,r.push("stamp");continue}let l=e.get(i);l?r.push(l):t.push(i)}if(t.length>0)throw yv(t);return a||r.unshift("stamp"),r}function nD(x,A){if(A===void 0)return;let e=eD(x),r=A.map(a=>a.toLowerCase()),t=r.filter(a=>!e.has(a));if(t.length>0)throw new R0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function iD(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function ca(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function yv(x){return new R0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function ti(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function sD(x){let A=x.ctx,e=$A(x.params[1]),r=ti(A.model,e);if(!r)throw new R0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new PA(`no data for container "${e}"`);let a=oD(A,r,t,aD(x));return{status:200,body:_v(A,e,a)}}function aD(x){let A=x.query.json??{};return kv(A.select)}function oD(x,A,e,r){let t=rD(A,Vt(x.blueprint??null,A),r);return iD(e,t)}function _v(x,A,e){let r=x.model.byNameOrAlias(A);return r?Z8(e,Vt(x.blueprint??null,r)):e}async function FD(x){let A=x.ctx,e=$A(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new PA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new PA(`unknown container "${e}"`);let a=x.query.json??{},i=Zu(a.select),l=nD(r,i);return{status:200,body:ca(t,l)}}async function vD(x){let A=$A(x.params[1]);return wv(x,A,"canonical")}async function fD(x){let A=$A(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new PA(`unknown container "${A}"`);return wv(x,A,"legacy")}async function wv(x,A,e){let r=dD(x);if(!r)throw new R0("invalid or missing request body");mt(r);let{stamp:t,...a}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new R0("value(s) of field(s) stamp are not valid");let i=x.ctx;if(e==="canonical"&&!ti(i.model,A))throw new R0("container does not exist");let l=i.model.byNameOrAlias(A);if(l?.kind==="histdata")throw new PA(`unknown container "${A}"`);let c=e==="canonical"?ED(i,l,a):BD(l,a);try{let u=e==="canonical"&&t!==void 0?{...c,stamp:t}:c,b=await i.mapper.writeContainer(A,u);return b.devicePushable&&pv(i,b.tag,b.data,b.stamp40),{status:204,body:""}}catch(u){throw lD(u,A,e,i,l)}}function lD(x,A,e,r,t){if(x instanceof Ht){let a=x.field?cD(r,t,x.field,e):void 0;return e==="canonical"?a?new R0(`no permission to modify container field \`${a}\``):new R0(`no permission to modify container \`${A}\``):a?new ri(`unknown field name(s): ${a}`):new oa(`no permission to modify '${A}'`)}return x}function cD(x,A,e,r){if(!A)return e;let t=A.fields.find(i=>i.name===e||i.name.toLowerCase()===e||(i.alias??i.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():Vt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function ED(x,A,e){if(!A)return e;let r=Vt(x.blueprint??null,A),t=new Map;if(r)for(let[a,i]of r)t.set(i,a);else for(let a of A.fields){let i=a.alias??a.name;t.set(i,i.toLowerCase()),t.set(i.toLowerCase(),i.toLowerCase())}return Sv(A,t,e,a=>new R0(`unknown field name(s): ${a}`))}function BD(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return Sv(x,e,A,r=>new ri(`unknown field name(s): ${r}`))}var CD=new Set(["stamp","stamp4","stamp8","datetime"]);function Sv(x,A,e,r){let t=new Map(x.fields.map(c=>[(c.alias??c.name).toLowerCase(),c])),a={},i=[],l=[];for(let[c,u]of Object.entries(e)){let b=A.get(c);if(!b){i.push(c);continue}let m=t.get(b);if(m&&CD.has(m.type)&&!(typeof u=="string"&&Fa(u))){l.push(c);continue}a[b]=u}if(i.length>0)throw r(i.join(","));if(l.length>0)throw new R0(`value(s) of field(s) ${l.join(",")} are not valid`);return a}function dD(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=uD(r);if(t===void 0)throw new R0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function uD(x){try{return JSON.parse(x)}catch{return}}var qv="x-mt-backfill",Tv="pending";async function Ea(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[qv]:Tv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var DD=1e3,Mn=1e3,Pv="20000101",$v="*";async function pD(x){let A=x.query.json??{};Ov(A,["from","until","count","offset","select"]),mt(A);let e=x.ctx,r=$A(x.params[1]),{mapperSelect:t,order:a}=Iv(e,r,A.select);Mv(e,r);let i=Qn(A.from,Pv,"from"),l=Qn(A.until,$v,"until");Rv(i,l),l!==null&&(l=mD(l));let c=jD(A.count),u=Lv(A.offset),b=await Ea(e,A.from,i);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:i,untilMs:l,count:c,offset:u,select:t})).map(g=>Nv(x,e,r,ca(g,a))),headers:b}}async function bD(x){let A=x.query.json??{};Ov(A,["from","until","offset","select"]),mt(A);let e=x.ctx,r=$A(x.params[1]),t=x.params[2],{mapperSelect:a,order:i}=Iv(e,r,A.select);Mv(e,r);let l=Qn(A.from,Pv,"from"),c=Qn(A.until,$v,"until");Rv(l,c);let u=Lv(A.offset),b=await Ea(e,A.from,l),g=(await e.mapper.readTimeseries(r,{fromMs:l,untilMs:c,count:t==="youngest"?-1:1,offset:u,select:a}))[0];return g?{status:200,body:Nv(x,e,r,ca(g,i)),headers:b}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:b}}function Nv(x,A,e,r){return x.apiVersion==="1"?r:_v(A,e,r)}function Iv(x,A,e){let r=kv(e);if(!r)return{mapperSelect:void 0,order:null};let t=ti(x.model,A);if(!t)return{mapperSelect:r,order:null};let a=tD(t,r),i=a.filter(l=>l!=="stamp");return{mapperSelect:i.length>0?i:void 0,order:a}}function Mv(x,A){if(!ti(x.model,A))throw new R0("timeseries does not exist")}function Qn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return bt(t)}catch{throw new R0(`attribute '${e}' is not valid`)}}function Rv(x,A){if(x!==null&&A!==null&&x>A)throw new R0('E_BAD_REQUEST "from" value must be older than "until"')}function mD(x){let A=ix.msToStamp40(x);return ix.stamp40ToMS(A)>=x&&(A-=1),ix.stamp40ToMS(A)}function jD(x){if(x==null||x==="")return DD;let A=Number(x);if(!Number.isInteger(A))throw new R0('"count" must be an integer');if(A===0)throw new R0("`count` cannot be 0");if(A<-Mn)throw new R0(`"count" must be greater than or equal to -${Mn}`);if(A>Mn)throw new R0(`"count" must be less than or equal to ${Mn}`);return A}function Lv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new R0('"offset" must be an integer');if(A<0)throw new R0('"offset" must be greater than or equal to 0');return A}function Ov(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new R0(`"${e}" is not allowed`)}var hD=1e5,gD="20000101",kD="*";async function yD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new PA(`unknown container "${e}"`);let a=x.query.json??{};mt(a);let{fromMs:i,untilMs:l}=SD(a);qD(i,l);let c=TD(a),u=PD(a),b=Gv(t,a.select)??["stamp"],m=Zn(a.from)?await Ea(r,a.from,i):void 0,g=b.filter($=>$!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:i,untilMs:l,count:c,offset:u,select:g.length>0?g:void 0})).map($=>b.map(T=>T==="stamp"?$.stamp:$[T]??null)),headers:m}}async function _D(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,a=t.model.byNameOrAlias(e);if(!a)throw new PA(`unknown container "${e}"`);let i=x.query.json??{};mt(i);let l=Gv(a,i.select)??["stamp"],c=wD(i),u=l.filter(g=>g!=="stamp"),m=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:c??null,count:c!==void 0||r==="youngest"?-1:1,select:u.length>0?u:void 0}))[0];return m?{status:200,body:[l.map(g=>g==="stamp"?m.stamp:m[g]??null)]}:{status:200,body:[]}}function wD(x){if(!(!Zn(x.until)||x.until==="*"))try{return bt(String(x.until))??void 0}catch{throw new R0("from or until value invalid")}}function SD(x){let A=Zn(x.from),e=Zn(x.until);if((!A||!e)&&!Ba(x.count))throw new R0("missing or invalid parameters (from and until and/or count)");return{fromMs:x8(A?x.from:gD),untilMs:x8(e?x.until:kD)}}function qD(x,A){if(x!==null&&A!==null&&x>A)throw new R0('"from" value must be older than "until"')}function x8(x){let A=String(x);try{return bt(A)}catch{throw new R0(`invalid stamp "${A}"`)}}function TD(x){if(!Ba(x.count))return hD;if(typeof x.count!="number")throw new R0("invalid parameter count");return x.count}function PD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new R0("invalid parameter offset");return A}function Gv(x,A){if(A==null)return;if(!Array.isArray(A))throw new R0("invalid parameter, select must be an array");let e=A.map(l=>String(l).toLowerCase()),r=e.filter(l=>l.includes(" "));if(r.length>0)throw new R0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],a=new Set(x.fields.filter(l=>!Le(l)).map(l=>(l.alias??l.name).toLowerCase()));a.add("stamp");let i=t.filter(l=>!a.has(l));if(i.length>0)throw new R0(`invalid channel(s) ${i.join(",")}`);return t}function Ba(x){return!!x}function Zn(x){return typeof x=="string"?x.trim().length>0:Ba(x)}var $D="device_id";function ND(x){return async A=>(await ni(A),{status:200,body:await MD(A.ctx,x)})}async function ni(x){let A=$A(x.params[0]),e=await ID(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new PA(`unknown device "${A}"`)}async function ID(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue($D)}async function MD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=Wt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=Dt(ix.stamp40ToMS(je(e.stamp))),r):{}}function Ca(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function RD(x){return async A=>{await ni(A);let e=GD(A.request.body??null);if(!e)throw new R0("invalid or missing request body");return Ca(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?Wt(r.data)??{}:{};return await da(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function LD(x){return async A=>(await ni(A),Ca(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await da(A.ctx,x,e,{}),{status:204,body:""})}))}function OD(x){return async A=>{await ni(A);let e=$A(A.params[1]);return Ca(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=Wt(r.data)??{},a=e.toLowerCase();for(let i of Object.keys(t))i.toLowerCase()===a&&delete t[i];return await da(A.ctx,x,r,t),{status:204,body:""}})}}function GD(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function da(x,A,e,r){let t=bv(JSON.stringify(r),e?.data?.length??0),a=ix.msToStamp40((x.timeSource??zt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:TA(a),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),pv(x,A,t,a)}var Uv={"content-type":"application/json"},UD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Uu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:Ou,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:Gu,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:Vu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:bD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:pD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:sD,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:vD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:_D,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:yD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:FD,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:fD,checksUid:!0},...HD()];function HD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,a])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:ND(a),checksUid:!1})),r=Object.entries(A).flatMap(([t,a])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:RD(a),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:LD(a),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:OD(a),checksUid:!1}]);return[...e,...r]}var JD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function KD(x){let A=va();return e=>Hv(x,e,A)}async function Hv(x,A,e=va()){try{let[r,t]=WD(A.path),a=XD(t),i=VD(r,x);if(i===null)return Vr(404,"E_NOT_FOUND","unknown customer");let l=A.method.toUpperCase();for(let c of UD){if(c.method!==l)continue;let u=c.pattern.exec(i);if(!u)continue;let b=u.slice(1);if(c.checksUid&&!zD(x,b[0]))return Vr(404,"E_NOT_FOUND","unknown site");let m=/^\/api\/([12])\//.exec(i)?.[1]??"1",g=await c.handler({request:A,params:b,query:a,ctx:x,session:e,apiVersion:m});return ZD(g)}return Vr(404,"E_NOT_FOUND","not found")}catch(r){return Kv(r)}}function zD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&$A(A)===x.siteUid}function VD(x,A){let e=JD.exec(x);if(!e)return x;let r=$A(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function WD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function XD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&YD(A,e);return A}function YD(x,A){let e=A.indexOf("="),r=$A(e<0?A:A.slice(0,e)),t=e<0?"":$A(A.slice(e+1));r==="json"?x.json=QD(t):x.params[r]=t}function QD(x){try{return JSON.parse(x)}catch{throw new R0("request supplied data which is not json formatted ")}}function ZD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Uv,...x.headers},body:A}}function Jv(x,A){return{status:x,headers:{...Uv},body:JSON.stringify(A)}}function Kv(x){return x instanceof R0||x instanceof ia||x instanceof Ys?Vr(400,"E_BAD_REQUEST",x.message):x instanceof ri||x instanceof Ht?Vr(403,"E_FORBIDDEN",x.message):x instanceof oa?Vr(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof PA||x instanceof Er?Vr(404,"E_NOT_FOUND",x.message):Jv(500,{err:x instanceof Error?x.message:String(x)})}function Vr(x,A,e){return Jv(x,{err:`${A} ${e}`})}function x7(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var Lb={};Lc(Lb,{default:()=>Jl,deviceExitCode:()=>Hl,program:()=>RA});module.exports=Oc(Lb);var rx=require("commander"),vn=Y0(require("chalk"));var Li={name:"@microtronics/studio-cli",version:"1.3.0-alpha.3",description:"Microtronics Studio CLI Tool",main:"./out/api.js",typings:"./out/studio-cli.d.ts",bin:{"studio-cli":"studio-cli"},publishConfig:{access:"public"},scripts:{compile:"npm run build:registryApiTypings && tsc","build:cli":"node build.mjs","build:exe":"node build-exe.mjs",api:"api-extractor run --local --verbose",build:"npm run compile && npm run api && npm run build:cli","watch:build":"npm run compile -- --watch",test:"cross-env STUDIO_ENV=lucky mocha","test-ci":"cross-env STUDIO_ENV=lucky mocha --reporter mocha-junit-reporter","watch:test":"npm run test -- --watch",prepublishOnly:"npm run build","build:registryApiTypings":"npx openapi-typescript https://api.registry.lucky.ci.microtronics.com/v1/openapi.yaml -o ./src/typings/registry.ts"},author:"Microtronics",license:"ISC",dependencies:{"@gera2ld/tarjs":"^0.3.1",ajv:"^8.17.1","ajv-formats":"^3.0.1","ajv-keywords":"^5.1.0",chalk:"^5.4.1",commander:"^12.1.0","cross-fetch":"^4.0.0","deepmerge-ts":"^7.1.5",dotenv:"^16.4.7","file-type-checker":"^1.1.2",glob:"^11.0.1","iconv-lite":"^0.6.3","image-dimensions":"^2.3.0",ini:"^5.0.0",minimatch:"^10.0.1","openapi-fetch":"^0.13.0",pako:"^2.1.0",semver:"^7.7.2","sql.js":"^1.14.2","tinytar-fix":"^0.1.1","update-notifier":"^7.3.1",usb:"^2.14.0",uuid:"^9.0.1","vscode-uri":"^3.0.8",yaml:"^2.6.1"},engines:{node:">= 22"},devDependencies:{"@microsoft/api-extractor":"^7.47.11","@microtronics/device-master":"bitbucket:microtronics-core/device-master#v4.1.0","@types/chai":"^4.3.6","@types/chai-as-promised":"^7.1.5","@types/ini":"^4.1.1","@types/mocha":"^10.0.9","@types/node":"^22.9.1","@types/semver":"^7.5.6","@types/sql.js":"^1.4.11","@types/update-notifier":"^6.0.8","@types/vscode":"^1.86.2","@yao-pkg/pkg":"^6.22.0",chai:"^4.3.8","chai-as-promised":"^7.1.2","cross-env":"^7.0.3",esbuild:"^0.27.3","extract-zip":"^2.0.1",mocha:"^10.8.2","mocha-junit-reporter":"^2.2.1","openapi-typescript":"^7.6.0","pawncc-wasm":"bitbucket:microtronics-core/pawncc-wasm#v1.2.0",resedit:"^3.0.2",tar:"^7.5.7","ts-node":"^10.9.2",typescript:"^5.6.3"},mocha:{require:["ts-node/register"],"watch-files":"src/**",spec:"./test/**/*.spec.ts",recursive:!0},files:["out/api.js","out/studio-cli.d.ts","dist/main.js","dist/studio-cli.d.ts","studio-cli","CHANGELOG.md"]};var QA=Y0(require("node:fs/promises"));var Tt=require("vscode-uri"),Do=require("glob"),Pe={readFile(x){return QA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return QA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await QA.default.stat(x.fsPath),e=(A.isDirectory()?2:0)|(A.isFile()?1:0)|(A.isSymbolicLink()?64:0);return{ctime:A.ctimeMs,mtime:A.mtimeMs,permissions:void 0,size:A.size,type:e}}catch{return null}},async writeFile(x,A){typeof A=="string"&&(A=new TextEncoder().encode(A));let e=Tt.Utils.dirname(x);return await QA.default.mkdir(e.fsPath,{recursive:!0}),QA.default.writeFile(x.fsPath,A,{flag:"w"})},async findFiles(x,A,e){let r={ignore:e,nodir:!0,absolute:!0,dot:!0,cwd:x.fsPath};return(await(0,Do.glob)(A,r)).map(a=>{let i=a.replace(/\\/g,"/");return Tt.URI.parse(`file:///${i}`)})},async copy(x,A){let e=await QA.default.stat(x.fsPath);return await QA.default.mkdir(Tt.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?QA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):QA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await QA.default.mkdir(x.fsPath,{recursive:!0})}};var yt=require("vscode-uri");var Ge=require("vscode-uri");var ot=require("vscode-uri");var Uc=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Bn(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^Uc[(e^x[r])&255];return(e^-1)>>>0}var Qb=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),Zb=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var T0;(q=>{function x(_,$){let[T,M]=$,{line:N,col:z}=_.linePos(T);return{line:Number(N)-1,startCharacter:z-1,endCharacter:z+(M-T)}}q.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(_){return Bn(A.encode(_)).toString(16)}q.generateHashForLibraryName=e;function r(_){return Bn(A.encode(_)).toString(16)}q.generateHashForFilePath=r;function t(_){return Bn(_).toString(16).toUpperCase().padStart(8,"0")}q.generateCRC32ForFileContent=t;function a(_){try{let $=null;return _?.type==="Buffer"?$=Uint8Array.from(_.data):$=_,new TextDecoder("utf8").decode($)}catch{return""}}q.convertBlobToString=a;function i(_=""){return _.replace(/\r\n|\n\r|\r/g,`
2634
- `)}q.normalizeLF=i;function l(_){try{let $=a(_);return i($).split(`
2635
- `)}catch{return[]}}q.convertBlobToStringArray=l,q.isNumeric=_=>!Array.isArray(_)&&_-parseFloat(_)+1>=0;function u(_){let $="",T=_.byteLength;for(let M=0;M<T;M++)$+=String.fromCharCode(_[M]);return btoa($)}q.bufferToBase64=u;function b(_,$){let T=`${_}`.match(/\{\d*(index)(\+\d*)?}/g);if(T){let M=_;return T.forEach(N=>{let z=N.replace(/\+0$/,""),F0=z.match(/index/)?.[0];if(F0){let R=z.slice(1,-1).split(F0)[1],k=parseInt(R)||0;M=M.replace(N,`${$+k}`)}}),M}else return _}q.patchValueWithArrayInfo=b;let m={};function g(_,$,T){let M=m[_];M&&clearTimeout(M.timer),m[_]={timer:setTimeout(()=>{delete m[_],T()},$),handler:T}}q.defer=g})(T0||={});var Ro=require("image-dimensions"),Lo=require("file-type-checker");var jm=require("cross-fetch/polyfill"),No=Y0(require("openapi-fetch"));var Fr=require("vscode-uri");var _x=require("vscode-uri");var de=Y0(require("semver"));var tA="dist/",po="dde/",Oi="dlo/",Gi=".studio/",bo="dfiles/",s0;(c=>{c.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${Gi}auto/`,e=`${Gi}dev/`,r=`${A}dlo/`,t=`${A}dde/`;c.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${c.fileNames.autoInc}`,defaultInc:`${r}${c.fileNames.defaultInc}`,autoUplinkInc:`${r}${c.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${c.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${c.fileNames.autoDdeInc}`,mainDdeInc:`${r}${c.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${c.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${c.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${c.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${c.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${c.fileNames.historyJson}`}},libdeps:`${Gi}libdeps/`,dev:{path:e,mirror:`${e}${c.fileNames.devMirror}`,deviceLog:`${e}${c.fileNames.devDeviceLog}`}},dist:{path:tA,dloPath:`${tA}dlo/`,mainAmxPath:`${tA}dlo/${c.fileNames.mainAmx}`,mainAmxReportPath:`${tA}dlo/${c.fileNames.mainAmxReport}`,ddeXmlPath:`${tA}dde/${c.fileNames.ddeXml}`,ddeApiPath:`${tA}api/`,ddeApi:`${tA}api/${c.fileNames.ddeOpenApi}`,historyJson:`${tA}dde/${c.fileNames.historyJson}`,povPath:`${tA}pov`,povDetailsPath:`${tA}pov/details`,dfilesPath:`${tA}dfiles`,dfilesProperties:`${tA}dfiles/properties.json`,bloPath:`${tA}blo`,reportTemplate:`${tA}/${c.fileNames.reportTemplate}`,definesTs:`${tA}defines.ts`,definesAppTs:`${tA}defines.app.ts`},dlo:{path:Oi,mainDLO:`${Oi}main.dlo`,mainINI:`${Oi}main.ini`},dde:{path:po,mainDDE:`${po}main.dde`},dfiles:{path:bo,mainDFILES:`${bo}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},c.readme=u=>`# ${u} README
2633
+ `).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||Sd(A,t)||t.includes("=")&&qd(A,t)}return wd(A.containers,A.splits)}var J8=null,Pd=4;function pt(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function mt(x){let A=x.trim();if(A==="*")return J8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(b,m,g)=>{let q=A.slice(b,b+m);return parseInt(q.length?q.padEnd(m,"0"):g,10)},r=parseInt(A.slice(0,Pd),10),t=A.length>=6?e(4,2,"01"):1,s=A.length>=8?e(6,2,"01"):1,i=e(8,2,"00"),v=e(10,2,"00"),c=e(12,2,"00"),u=e(14,3,"000");return Date.UTC(r,t-1,s,i,v,c,u)}var Jt="NAN",$d="%HEX%",Nd=65535,Zs=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),i0(this,"alias",x),this.name="DdeUnknownAliasError"}};function ri(x){return(x.alias??x.name).toLowerCase()}function ti(x){return x==="string"}function xa(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function K8(x){return(x.editmask??"").toUpperCase()===$d}function Id(x,A){return A===void 0||!Number.isFinite(x)?x:Aa(x,A)}function Aa(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function Md(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),Aa(x,A-1-r)}function Rd(x){return x==="floatm16"||x==="f32"||x==="f64"}function Ld(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(Rd(x.type)?9:0),r=Aa(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return Md(r,t)}function Xn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,s=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=s),s<<=1n),e>>=1n,r>>=1n;return Number(t)}function z8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),s=BigInt.asUintN(64,BigInt(Math.trunc(e))),i=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|i:r&~i,t>>=1n),s>>=1n,i<<=1n;return Number(r)}var Od=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Yn(x){return!!x.bitmask&&Od.has(x.type)}var V8=255,W8=254,X8=253,Y8=252,Q8=251,Gd=207,ea=65535,Qn=65534,ra=65533,ta=65532,na=65531;function Ud(x){switch(x){case V8:return ea;case W8:return Qn;case X8:return ra;case Y8:return ta;case Q8:return na;default:return x<=31?x:x>Gd?Qn:(x&15|16)<<(x>>4)-1}}function Hd(x){switch(x){case ea:return V8;case Qn:return W8;case ra:return X8;case ta:return Y8;case na:return Q8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var Zn=1023,Ts=31,Z8=127,cs=8388607,Jd=255,Ps=15,Kd=-14,x8=15;function xv(x){let A=(x&Zn)<<13,e=(x&31744)>>10;if(e===Ts)return ev(1024-(x&Zn));e!==0&&(e=e-Ps+4+Z8);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function Av(x){if(typeof x=="string"||Number.isNaN(x))return Nd;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&cs)+4096,s=(t>cs?1:0)+(e>>>23&Jd),i=(t&cs)>>>13;return s!==0&&(s=s-Z8-4,s<Kd?(i=0,s=0):s>x8?(i=Zn,s=x8+Ps):s=s+Ps),r|s<<10|i}var zd=["OF","UF","OL","SC"],$s={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:ea,OF:Qn,UF:ra,OL:ta,SC:na}},Vd={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},lA={NAN:1,OF:2,UF:3,OL:4,SC:5},Wd=new Set(["u8","u16","u32","ufm8"]);function Xd(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function ia(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function sa(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return xv(A.getUint16(e,!1));case"ufm8":return Ud(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function ev(x){switch(x){case lA.OF:return"OF";case lA.UF:return"UF";case lA.OL:return"OL";case lA.SC:return"SC";default:return Jt}}var A8=[["NAN",lA.NAN],["OF",lA.OF],["UF",lA.UF],["OL",lA.OL],["SC",lA.SC]];function Yd(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?lA.NAN:(r=r&4194304?8388608-r:r&255,r===0?lA.NAN:r)}function Qd(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?lA.NAN:r}function Zd(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Yn(x)&&(t=BigInt(Xn(Number(t),x.bitmask)));let s=$s.s64;return A8.find(([i])=>t===BigInt(s[i]))?.[1]??0}let e=$s[x.type];if(!e)return 0;let r=sa(x.type,A,x.byteofs);return Yn(x)&&(r=Xn(r,x.bitmask)),A8.find(([t])=>r===e[t])?.[1]??0}function rv(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Ts)===Ts?1024-(e&Zn):0}case"f32":return Yd(A,x.byteofs);case"f64":return Qd(A,x.byteofs);default:return Zd(x,A)}}function tv(x,A){let e=sa(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(Yn(x)&&(e=Xn(e,x.bitmask)),e*x.vscale+x.vofs)}function xu(x,A){let e=rv(x,A);if(e!==0)return ev(e);let r=tv(x,A);return Number.isNaN(r)?Jt:Ld(x,r)}function Au(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(ti(x.type)||xa(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return rv(x,e)!==0?NaN:tv(x,e)}function eu(x,A){if(K8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return ix.cp1252Unpack(A,x.byteofs,x.size)}var nv=25569,iv=864e5;function ru(x){return(x-nv)*iv}function tu(x){return x/iv+nv}function nu(x,A){if(x.type==="datetime")return pt(ru(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return pt(ix.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),pt(ix.stamp40ToMS(e))}var iu=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function su(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function au(x){let A=x.default;if(A===void 0)return;if(ti(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===Jt)return Jt;if(iu.has(x.type))return su(e,0);let r=ia(e);return r!==null?r:A}function ou(x,A,e){return x.byteofs+x.size>e?au(x):ti(x.type)?eu(x,A):xa(x.type)?nu(x,A):xu(x,A)}function Ns(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Oe(t)||Ht(t.type)||(r[ri(t)]=ou(t,e,A.byteLength));return r}function Fu(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===Jt||A==="")return{kind:"sentinel",state:"NAN"};let e=zd.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=ia(A);return r!==null?{kind:"value",physical:r}:e8(x)}return e8(x)}function e8(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?ia(A):null)??0}}function Is(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,Vd[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|lA[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(lA[e]),!1);default:break}let r=$s[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);sv(x,A,Number(r))}function vu(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,Av(r),!1);default:break}if(Number.isNaN(r))return Is(x,A,"NAN");if(!Number.isFinite(r))return Is(x,A,"OF");let t=r;Wd.has(x.type)&&t<0&&(t=0),sv(x,A,Xd(t))}function sv(x,A,e){if(Yn(x)){let r=sa(x.type,A,x.byteofs);e=z8(r,e,x.bitmask)}fu(x.type,A,x.byteofs,e)}function fu(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,Hd(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function lu(x,A,e){let r=String(e);if(K8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${ri(x)}"`);for(let s=0;s<x.size;s++){let i=s*2<t.length?parseInt(t.substr(s*2,2),16):0;A.setUint8(x.byteofs+s,i)}return}ix.cp1252Pack(A,x.byteofs,x.size,r)}function cu(x,A,e){let r=mt(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${ri(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,tu(r),!1);return}let t=ix.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function Eu(x,A,e){if(ti(x.type))return lu(x,A,e);if(xa(x.type))return cu(x,A,e);let r=Fu(x,e);switch(r.kind){case"skip":return;case"sentinel":return Is(x,A,r.state);case"value":return vu(x,A,r.physical)}}function Ms(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=new Map(x.fields.filter(i=>!Oe(i)&&!Ht(i.type)).map(i=>[ri(i),i]));for(let[i,v]of Object.entries(A)){let c=s.get(i.toLowerCase());if(!c)throw new Zs(i);Eu(c,t,v)}return r}var r8=99,Bu=256,Er=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),i0(this,"container",x),this.name="DdeUnknownContainerError"}},Kt=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),i0(this,"container",x),i0(this,"field",A),this.name="DdeWriteForbiddenError"}},aa=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),i0(this,"field",x),this.name="DdeUnknownFieldError"}};function Es(x){return(x.alias??x.name).toLowerCase()}var Cu=class{constructor(x,A,e=Wt){i0(this,"model",x),i0(this,"storage",A),i0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Ot(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Ns(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Er(x);let r=Ot(e);if(r===null)throw new Er(x);if(e.edit===r8)throw new Kt(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let i=await this.storage.getRowForTag(r),v=Ms(await this.resolveScaleRefs(e),s,i?.data??null),c=ix.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),u=PA(c);return await this.storage.replaceUtoRow({tag:r,stamp:u,flags:i?.flags??0,site_related:i?.site_related??0,data:v}),{tag:r,stampHex:u,stamp40:c,data:v,devicePushable:U8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Er(x);let r=Ot(e);if(r===null)throw new Er(x);let{stamp:t,...s}=A,i=Ms(await this.resolveScaleRefs(e),s,null),v=ix.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:PA(v),flags:0,site_related:0,data:i})}recordStampMs(x){if(typeof x!="string")return null;try{return mt(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Er(x);let r=this.model.splits.find(u=>u.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Er(x);let t=Math.abs(A.count),s=A.offset??0,i=this.buildSelectSet(e,A.select),v=await this.resolveScaleRefs(e);return(await this.collectMatched(v,r,s+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:i})).slice(s,s+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let s=Math.max(e,Bu);for(let i=0;;i+=s){let v=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:i});for(let c of v)if(c.data&&this.matchesSplit(c.data,A)&&(t.push(this.recordFromRow(x,c,r.selectSet)),t.length>=e))return t;if(v.length<s)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=Ns(x,A.data),t={stamp:this.rowStamp(A)};for(let[s,i]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=i);return t}rowStamp(x){return pt(ix.stamp40ToMS(ge(x.stamp)))}boundHex(x){if(x!=null)return PA(ix.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let s=A.get(t);if(!s)return e;let i=Au(r,s);return i===null?e:i}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Es(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Ot(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Oe(r)&&!Ht(r.type)).map(r=>[Es(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===r8)throw new Kt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Oe(t)&&!Ht(t.type)).map(t=>Es(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new aa(t);r.add(s)}}return r}},du=new Set(["$titles","$meta"]);function uu(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Rs(x,A){let e=A.toLowerCase();if(du.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,i]of Object.entries(r)){if(typeof i!="object"||i===null)continue;let v=i.alias;typeof v=="string"&&v.length>0&&t.set(s.toLowerCase(),v)}return t}function av(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let s=A?.get(r.toLowerCase());e[s??r]=t}return e}function Xt(x,A){if(!x)return null;let e=Rs(x,A.name);return e||(A.alias?Rs(x,A.alias):null)}var Du=require("events"),X0="[OfflineSyncManager]",pu=500,bu="site_info",mu=new Set(["local-data-interface.json"]);function nA(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function ju(x){let A=Vn(x);return!!(x&2)||A!==0&&A!==65}function t8(x){return x.filter(A=>(A.filename===Dt||A.filename===Vs)&&A.outcome==="download").map(A=>A.filename)}var Gr="skip-equal",ut="skip-device-readonly",Bs="delete",lr="error",Cs="upload",ds="uploading-utos",n8="downloading-utos",Mn="fetching-device-state",us="uploading-files",Rn="downloading-files",i8="executing-change-requests",s8="executed",hu="error",Ds="skip-old-stamp",gu=class extends Du.EventEmitter{constructor(x,A,e){super(),i0(this,"utoMaster",x),i0(this,"storage",A),i0(this,"logger",e)}emitProgress(x,A,e,r,t){let s={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",s)}async uploadHistoricTag(x,A,e,r,t){try{let s=await this.storage.getRowForTag(x),i=0,v=async c=>{let u=c.filter(b=>b.stamp40>e).map(b=>({tag:x,stamp:PA(b.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:b.data}));await this.storage.insertHistoricRows(u),i+=u.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,pu,v),this.logger?.info(`${X0} historic upload tag=0x${x.toString(16)} +${i} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:i}}catch(s){return this.logger?.error(`${X0} historic upload error tag=0x${x.toString(16)}: ${s}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${X0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:Gr,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:PA(t.stamp),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${X0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${X0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(ds,null,0,t);let s=0;for(let i of x){nA(r);let v=A.get(i),{tagInfo:c,dbStamp40:u,deviceStamp40:b}=v;if(this.emitProgress(ds,c?.sTag??`0x${i.toString(16)}`,s,t),!c||b===null)e.set(i,{tag:i,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:u,deviceStamp40:b});else if(!(!c.flags.up||b<=u)){let m=c.sTag,g=s,q=c.historic?await this.uploadHistoricTag(i,c,u,b,_=>{this.emitProgress(ds,m,g,t,{recordsReceived:_})}):await this.uploadSingleTag(i,c,u,b);e.set(i,q)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let i=A.stamp;try{let v=await this.utoMaster.requestFile(x,u=>{this.emitProgress(us,x,s,t,{bytesTransferred:u})}),c=zs(v);if(c!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${c.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:PA(i),crc:A.crc32,size:v.byteLength,flags:A._flags,flags_int:r,data:v}),{filename:x,outcome:Cs,dbStamp40:e,deviceStamp40:i}}catch(v){return this.logger?.error(`${X0} file upload error ${x}: ${JSON.stringify(v)}`),{filename:x,outcome:lr,dbStamp40:e,deviceStamp40:i}}}async autoSyncUploadFile(x,A,e,r,t,s,i,v){let c=A.stamp;if(c>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):s?this.pullFileFromDevice(x,A,r,t,i,v):void 0;if(c===r&&this.fileContentMatches(A,e))return{filename:x,outcome:Gr,dbStamp40:r,deviceStamp40:c}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:PA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:Gr,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${X0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:lr,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,s,i){let v=A.stamp;if(v!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,s,i):{filename:x,outcome:ut,dbStamp40:r,deviceStamp40:v}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),s=!!(A._flags&1);if(!t)return s?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let i=ge(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,i,t.flags_int,s,e,r):this.decideNonSystemUpload(x,A,t,i,s,e,r)}pullIfReadable(x,A,e,r,t,s,i){return x?this.pullFileFromDevice(A,e,r,t,s,i):void 0}async decideNonSystemUpload(x,A,e,r,t,s,i){let v=e.flags_int;if(!(v&2))return v&4?this.pullIfReadable(t,x,A,r,v,s,i):this.decideUploadBySyncLogic(x,A,e,r,t,s,i)}async decideUploadBySyncLogic(x,A,e,r,t,s,i){let v=e.flags_int,c=Vn(v);if(c===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,v,s,i);if(c===1)return this.autoSyncUploadFile(x,A,e,r,v,t,s,i);if(c===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,v,s,i):void 0;if(c!==33)return this.mirrorUploadFile(x,A,e,r,t,s,i)}async uploadFiles(x,A,e,r){let t=Object.entries(x),s=t.length;this.emitProgress(us,null,0,s);let i=0;for(let[v,c]of t){if(nA(r),!(v===Vs||v===Dt&&!e)){let b=await this.decideFileUpload(v,c,s,i);b&&A.set(v,b)}this.emitProgress(us,v,++i,s)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${X0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let s=A.flags.up?Gr:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:s,dbStamp40:e,deviceStamp40:r});return}if(e>r){let s=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:ut,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(n8,null,0,t);let s=0;for(let i of x){nA(r);let{tagInfo:v,dbStamp40:c,deviceStamp40:u}=A.get(i);v&&u!==null&&!v.historic&&await this.processDownloadTag(i,v,c,u,e),this.emitProgress(n8,v?.sTag??`0x${i.toString(16)}`,++s,t)}}async sendFileToDevice(x,A,e,r,t){let s=x.data.byteLength,i=v=>{if(v!==null){let c=Math.round(s*parseInt(v,10)/100);this.emitProgress(Rn,x.filename,t,r,{bytesTransferred:c,bytesTotal:s})}};this.utoMaster.on("installing",i);try{return await this.utoMaster.sendFile(0,x.data,ix.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(v){return this.logger?.error(`${X0} file download error ${x.filename}: ${v}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",i)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let s=A?.stamp??0,i=ge(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return i===s?void 0:{filename:x.filename,outcome:Gr,dbStamp40:i,deviceStamp40:s};if(!(!t&&i<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:ut,dbStamp40:i,deviceStamp40:s}:this.sendFileToDevice(x,i,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(bu);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${X0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(m=>m.flags&8),i=t.filter(m=>!(m.flags&8)),v=[...s,...i].filter(m=>m.filename),c=Object.entries(x).filter(([,m])=>m._flags&4).map(([m])=>m),u=v.length;this.emitProgress(Rn,null,0,u);let b=0;for(let m of v){if(nA(r),e&&m.filename===Dt){this.emitProgress(Rn,m.filename,++b,u);continue}let g=m.filename===Dt&&!e,q=await this.decideFileDownload(m,x[m.filename],A.get(m.filename),c,g,u,b);q&&A.set(m.filename,q),this.emitProgress(Rn,m.filename,++b,u)}}async decideFileDownload(x,A,e,r,t,s,i){return A!==void 0?this.decideDownloadExisting(x,A,e,t,s,i):this.decideDownloadMissing(x,r,s,i)}async decideDownloadExisting(x,A,e,r,t,s){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,s,r);let i=x.flags_int;if(i&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(i&4))return this.pushToDevice(x,A,t,s)}async pushToDevice(x,A,e,r){let t=A.stamp,s=ge(x.stamp),i=this.wantDownloadPush(x,A,s,t);if(i==="match")return{filename:x.filename,outcome:Gr,dbStamp40:s,deviceStamp40:t};if(i!=="none"&&!(s===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,s,t,e,r):{filename:x.filename,outcome:ut,dbStamp40:s,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let s=this.fileContentMatches(A,x),i=Vn(t);return i===33||i===1&&e>=r?s?"match":"push":i===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=ge(x.stamp);if(!(e&&(e.outcome===Cs||e.outcome===lr))){if(!(A._flags&2))return{filename:x.filename,outcome:ut,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Bs,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${X0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:lr,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=ge(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Bs,dbStamp40:s,deviceStamp40:null}}catch(i){return this.logger?.error(`${X0} file delete error ${x.filename}: ${JSON.stringify(i)}`),{filename:x.filename,outcome:lr,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&ju(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,s,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${X0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(s=>[s.filename,s]));for(let[s,i]of Object.entries(A))nA(x),await this.reconcileDeviceFile(s,i,t.get(s)??null);for(let s of r)nA(x),e.has(s.filename)||await this.dropRowMissingFromDevice(s)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${X0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:PA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||mu.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${X0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){nA(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${X0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${X0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${X0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${X0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let s=A.get(t),i=await this.storage.getLatestStampForTag(t),v=i?ge(i):0,c=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:v,deviceStamp40:c,tagInfo:s})}return r}async executeChangeRequests(x,A,e,r,t,s){let i=await this.storage.getUtoChangeRequests(),v=this.groupChangeRequests(i),c=v.size;if(this.emitProgress(i8,null,0,c),c===0)return;let u=new Set,b=0;for(let[m,g]of v){nA(s);let q=x.get(m),_=q?.sTag??`0x${m.toString(16)}`;this.emitProgress(i8,_,b,c),await this.executeChangeRequestTag(m,_,q,g,A,r,t,u),++b}u.size>0&&await this.repullExecutedTags(u,x,e,s)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:ge(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,s,i,v){if(!e){this.pushChangeResults(i,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(i,x,A,r,"skip-unsupported");return}let c=e.index<t.stamps.length?t.stamps[e.index]:0,u=r.filter(m=>m.stamp40<=c),b=r.filter(m=>m.stamp40>c);this.pushChangeResults(i,x,A,u,Ds),b.length>0&&await this.coalesceAndSend(x,A,e,b,s,i,v)}async coalesceAndSend(x,A,e,r,t,s,i){let v=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===lr||!v||!v.data){this.pushChangeResults(s,x,A,r,"error");return}let c=this.resolveSetObject(v.data,r,A);if(c===null){this.pushChangeResults(s,x,A,r,"error");return}if(Object.keys(c).length===0){this.pushChangeResults(s,x,A,r,"skip-no-change");return}let u=r[r.length-1].stamp40,b=await this.utoMaster.sendSetValue(x,JSON.stringify(c),u);b.outcome==="ok"||b.outcome==="stamp"?(i.add(x),this.pushChangeResults(s,x,A,r,s8,b.resultCode)):b.outcome==="denied"?(this.logger?.warn(`${X0} change-request denied ${A} (result=${b.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",b.resultCode)):(this.logger?.error(`${X0} change-request error ${A} (result=${b.resultCode})`),this.pushChangeResults(s,x,A,r,"error",b.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(ix.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${X0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let s=JSON.parse(t.json);if(!this.isPlainRecord(s))throw new Error(`change-request JSON is not an object on ${e}`);for(let[i,v]of Object.entries(s)){let c=this.resolveChangeField(x[i],v,i,e);c.apply&&(r[i]=c.value,x[i]=c.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:s}=A;return this.resolveBitwiseOp(x,t,s,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${X0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${X0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${X0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,s){for(let i of r)x.push({tag:A,sTag:e,stamp40:i.stamp40,user:i.user,outcome:t,resultCode:s})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(s){this.logger?.warn(`${X0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)nA(r),await this.repullExecutedTag(s,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${X0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let s=await this.storage.getRowForTag(x),i=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:PA(i),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let v=r.get(x);if(v){let c=A.get(x),u=e&&c&&c.index<e.stamps.length?e.stamps[c.index]:i;v.dbStamp40=i,v.deviceStamp40=u}this.logger?.info(`${X0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${i}`)}catch(t){this.logger?.error(`${X0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=t8(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(i=>i.outcome==="upload"&&!i.historic).length,totalTagsDownloaded:r.filter(i=>i.outcome==="download").length,totalTagsSkipped:r.filter(i=>i.outcome===Gr||i.outcome==="skip-db-readonly"||i.outcome===ut).length,totalHistoricRecordsAppended:r.reduce((i,v)=>i+(v.recordsAppended??0),0),totalFilesUploaded:t.filter(i=>i.outcome===Cs).length,totalFilesDownloaded:t.filter(i=>i.outcome==="download").length,totalFilesDeleted:t.filter(i=>i.outcome===Bs).length,totalChangeRequestsExecuted:e.filter(i=>i.outcome===s8).length,totalErrors:r.filter(i=>i.outcome===lr).length+t.filter(i=>i.outcome===lr).length+e.filter(i=>i.outcome===hu).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);nA(A),this.emitProgress(Mn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${X0} requestStamps returned null`);this.emitProgress(Mn,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(Mn,"file-list",2,3);let i=await this.resolveDbTags(r);this.emitProgress(Mn,"db-tags",3,3);let v=await this.buildTagStampCache(i,r,t),c=new Map,u=new Map,b=[],m=await this.isAppInDevPhase();return nA(A),await this.uploadUtoTags(i,v,c,A),nA(A),await this.uploadFiles(s,u,m,A),nA(A),await this.executeChangeRequests(r,t,v,c,b,A),nA(A),await this.downloadUtoTags(i,v,c,A),nA(A),await this.downloadFiles(s,u,m,A),nA(A),t8([...u.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(c,u,b)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${X0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${X0} requestStamps returned null`);let s=r.get(x),i=s?.sTag??`0x${x.toString(16)}`,v=A.map(g=>({stamp40:g.stamp40,user:"",json:g.json})).sort((g,q)=>g.stamp40-q.stamp40),c=new Map,u=[],b=new Set;return await this.executeChangeRequestTag(x,i,s,v,t,c,u,b),b.size>0&&await this.repullExecutedTags(b,r,new Map,void 0),u.find(g=>g.outcome!==Ds)?.outcome??Ds}},ku=require("events"),yu=require("events"),_u=require("events"),wu=5e3,oa=class ov extends _u.EventEmitter{constructor(A=ke){super(),i0(this,"logger",A),i0(this,"ws",null),i0(this,"bridgeTransport",null),i0(this,"bridgeSignal"),i0(this,"bridgeResolve",null),i0(this,"bridgeReject",null),i0(this,"serverMessageCount",0),i0(this,"settled",!1),i0(this,"abortHandler",null),i0(this,"connectTimeout"),i0(this,"writeQueue",[]),i0(this,"isProcessingQueue",!1),i0(this,"queueAborted",!1),i0(this,"queueDrainPromise",Promise.resolve()),i0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await I8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((s,i)=>{if(t?.aborted){i(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=s,this.bridgeReject=i;let v=ov.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${v}`);let c=new WebSocket(v);c.binaryType="arraybuffer",this.ws=c,this.connectTimeout=setTimeout(()=>{c.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),c.close(),this.settle("reject",new Error("WebSocket connection timeout")))},wu),this.attachWebSocketHandlers(c,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},Fv="https://lic.mydatanet.at/api/2/";async function vv(x,A=Fv){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var fv=class extends yu.EventEmitter{constructor(x=ke){super(),i0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await vv(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new oa(this.logger);s.on("wsConnected",()=>this.emit("wsConnected")),s.on("wsClosed",(v,c)=>this.emit("wsClosed",v,c)),s.on("wsError",v=>this.emit("wsError",v)),s.on("serverMessage",v=>this.emit("serverMessage",v));let i=await s.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+i.serverMessageCount+")"),{serverMessageCount:i.serverMessageCount}}},Su=require("events"),lv="Operation aborted";function qu(x){return x instanceof Error?x.message:String(x)}function ps(x){if(x?.aborted)throw new Error(lv)}var cv=class extends Su.EventEmitter{constructor(x,A=ke){super(),i0(this,"atHandler",x),i0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:i=>this.atHandler.queryMntServerConfig(i),initiateSync:i=>this.atHandler.initiateMntSync(i)},{name:"mdn",queryServer:i=>this.atHandler.queryMdnServerConfig(i),initiateSync:i=>this.atHandler.initiateMdnSync(i)}],s={};for(let i of t)try{s[i.name]=await this.runSyncPhase(i,x,A,r)}catch(v){if(r?.aborted)throw new Error(lv);let c=`${i.name.toUpperCase()} sync phase failed: ${qu(v)}`;throw this.logger.error(c),new Error(c)}return this.logger.info(`Debug sync completed (mntMessages=${s.mnt}, mdnMessages=${s.mdn})`),{mntServerMessageCount:s.mnt,mdnServerMessageCount:s.mdn}}async runSyncPhase(x,A,e,r){ps(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let s=await x.queryServer(r);this.logger.info(`${t} server domain: ${s}`),ps(r),await x.initiateSync(r),ps(r);let i=await this.syncWithServer(A,s,e,r);return this.logger.info(`${t} phase completed (serverMessages=${i.serverMessageCount})`),i.serverMessageCount}async syncWithServer(x,A,e,r){let t=new oa(this.logger),s=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let i=this.atHandler.createConCloseMonitor(()=>{s=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let v=await t.bridge(x,A,e,r);return s?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),v}finally{i()}}},Tu=class extends ku.EventEmitter{constructor(x,A,e=ke){super(),i0(this,"syncTransport",x),i0(this,"logger",e),i0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new fv(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new cv(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},Pu=require("events"),Hx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},nx={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},fA=1e4,Ev=9e4,Bv=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function Cv(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Ur="Operation aborted",oA=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Fa=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},$u=class extends Pu.EventEmitter{constructor(x,A=ke){super(),i0(this,"transport",x),i0(this,"logger",A),i0(this,"mutex",new Xs("AtCommandHandler")),i0(this,"bufferState",Cv()),i0(this,"responseCallback",null),i0(this,"decoder",new TextDecoder),i0(this,"dataHandler"),i0(this,"disposeTransportListener"),i0(this,"isDisposed",!1),i0(this,"activeAbort",null),i0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=fA,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=fA)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(Hx.MNT_CFG,nx.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(Hx.MDN_CFG,nx.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new oA;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return s=>{if(x!==nx.ERROR&&s.includes(nx.ERROR)){A(),r(new Fa);return}let i=!1,v=s;if(t){let c=s.match(x);c&&(i=!0,v=c[0])}else i=s.includes(x);if(i){A(),e(v);return}s.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,s)=>{if(this.isDisposed){s(new oA);return}if(r?.aborted){s(new Error(Ur));return}x&&(this.bufferState.buffer="");let v=A instanceof RegExp?A.source:A,c={cleanup:()=>{}},u=setTimeout(()=>{c.cleanup(),s(new Error(`Timeout waiting for response: ${v}`))},e),b=()=>{c.cleanup(),s(new Error(Ur))};c.cleanup=this.makeCleanup(u,r,b),r&&r.addEventListener("abort",b);let m=this.makeResponseChecker(A,c.cleanup,t,s);this.responseCallback=m,this.activeAbort=()=>{c.cleanup(),s(new oA)},!x&&this.bufferState.buffer&&m(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(g=>{c.cleanup(),s(g)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new oA);return}this.bufferState.buffer="";let t=setTimeout(()=>{s(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),s=this.makeCleanup(t);this.activeAbort=()=>{s(),r(new oA)},this.responseCallback=i=>{Bv.test(i)&&(s(),this.logger.info("RX: "+i.trim()),e(i))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(i=>{s(),r(i)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new oA);return}if(e?.aborted){t(new Error(Ur));return}this.bufferState.buffer="";let s={cleanup:()=>{}},i=setTimeout(()=>{s.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},fA),v=()=>{s.cleanup(),t(new Error(Ur))};s.cleanup=this.makeCleanup(i,e,v),e&&e.addEventListener("abort",v);let c=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new oA)},this.responseCallback=u=>{let b=u.match(c);if(b){s.cleanup();let m=b[1].trim();this.logger.info(`Server config ${A}: ${m}`),r(m);return}u.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(u=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(u instanceof Error?u.message:String(u))),t(u)})})}async sendAndWait(x,A,e=fA,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=fA){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(Hx.MNT_SYNC,nx.OK,fA,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(Hx.MDN_SYNC,nx.OK,fA,x),await this.executeSendAndWait(null,nx.SYNC_START,fA,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new oA;if(A?.aborted)throw new Error(Ur);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${Hx.COMPANION_CERT}=${r}`,nx.OK,fA,A),s=parseInt(t.match(/(\d+)/)[1],10),i=0;for(;i<r;){let v=Math.min(s,r-i),c=e.slice(i,i+v);await this.executeSendAndWait(`${Hx.COMPANION_CERT}=${v},${i},${c}`,nx.OK,fA,A),i+=v}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new oA);return}if(A?.aborted){r(new Error(Ur));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},fA),i=()=>{t.cleanup(),r(new Error(Ur))};t.cleanup=this.makeCleanup(s,A,i),A&&A.addEventListener("abort",i),this.activeAbort=()=>{t.cleanup(),r(new oA)},this.responseCallback=c=>{let u=c.match(nx.COMPCERT_ERROR);if(u){t.cleanup(),e({success:!1,errorCode:parseInt(u[1],10)});return}if(c.includes(nx.OK)){t.cleanup(),e({success:!0});return}c.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let v=`${Hx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+v),this.transport.write(this.encodeCommand(v)).catch(c=>{t.cleanup(),r(c)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(Hx.COMPANION_CERT_TEST,nx.OK,fA,x),!0}catch(A){if(A instanceof oA)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(Hx.CON_CLOSE,nx.CON_CLOSE,fA,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(nx.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},dv=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(dv||{}),Nu=require("events"),bs="requesting-cert",ms="cert-revoked",uv=class Ls extends Nu.EventEmitter{constructor(){super(...arguments),i0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??zn,{signal:r,atHandler:t}=A,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let i=await this.loadOrGenerateKeypair(A.storage),v=await A.storage.getCertificate(A.apiConfig.apiHost);(v===null||!Ks(v.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(bs),s(),v=await this.requestAndStoreCert(i,A)),this.utoMaster=new M8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();let c=v;v=await t.withAtLock(async m=>{let g=await this.presentCertWithRefresh(m,c,i,A);return await m.initiateMdnSync(r),g}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let u=await this.utoMaster.initiateEcsHandshake({companionPublicKey:i.publicKey,companionPrivateKey:i.privateKey,signal:r});if(!u.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${u.resultCode})`);this.emitPhase("connected");let b=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:b}}catch(i){return this.handleError(i)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await ks();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await g8(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof Ut&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new js(ms,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Ls.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let i=await ks();return await A.storage.saveKeypair(i),i})(),t=await Ls.fetchCertOrThrowRevoked(r,A),s={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(s,A.apiConfig.apiHost),s}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let s=await A.sendCompanionCert(e.base64Url,t.signal);if(s.success||s.errorCode===3&&((t.logger??zn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(bs),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new js("cert-presenting",`AT+COMPCERT rejected (code ${s.errorCode??"?"})`,{certErrorCode:s.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof js?(this.emit("phase",A.phase===ms?ms:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof Ut?{success:!1,phase:bs,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};i0(uv,"encodePublicKeyBase64Url",Js);var Iu=uv,js=class extends Error{constructor(x,A,e={}){super(A),i0(this,"phase",x),i0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},Dv=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(Dv||{}),Mu={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Ru(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var Lu=require("events");function pv(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function bv(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function mv(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Os(x,A){return x.map((e,r)=>({name:e.name,displayValue:mv(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Ou=2e3,jv=class extends Lu.EventEmitter{constructor(x,A=ke){super(),i0(this,"atHandler",x),i0(this,"logger",A),i0(this,"datapoints",[]),i0(this,"values",[]),i0(this,"polling",!1),i0(this,"pollTimer",null),i0(this,"fetchInProgress",!1),i0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(Hx.APP_GET_METADATA),A=x.includes(nx.OK)?{supported:!0,pinRequired:!1}:x.includes(nx.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(nx.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(nx.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${Hx.APP_GET_METADATA}=${x}`:Hx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(nx.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(nx.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(nx.OK)){let r=pv(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(nx.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${Hx.APP_GET_DATAVALUE}=${A}`:Hx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(nx.OK)){let t=bv(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Os(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(Hx.APP_TRIG_MEASURE_TEST)).includes(nx.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof oA)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=Ev,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(Hx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(nx.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let i=await t.sendAndWait(null,nx.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(c=>t.sendRaw(c),A),response:i}}catch(i){if(i instanceof oA)throw i;let v="timeout";return i instanceof Fa?v="error":r?.aborted&&(v="aborted"),this.logger.warn(`Measurement ${v} while waiting for ${nx.MEASURED}: `+(i instanceof Error?i.message:String(i))),this.emit("measurementFailed",v),{outcome:v,values:[],response:s}}})}async startPolling(x,A=Ou){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return Os(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Gu(x,A,e){let r=s=>{if(s instanceof oA)throw s},t=new jv(x);try{let s=await x.queryMdnServerConfig(e).catch(m=>(r(m),!1)),i=await t.checkSupport().catch(m=>(r(m),{supported:!1,pinRequired:!1})),v=i.supported?await t.checkMeasurementTriggerSupport().catch(m=>(r(m),!1)):!1,c=i.supported?{pinRequired:i.pinRequired,canTriggerMeasurement:v}:!1,u=!1,b=!1;if(s){let[m,g]=await Promise.all([x.queryCompanionCertSupport(e).catch(q=>(r(q),!1)),A?.getCertificate(s)]);u=m,b=g!=null&&Ks(g.notAfter)}return{hostname:s,localData:c,secureConnection:u,validCert:b}}finally{t.dispose()}}var Uu=require("events"),Hu={0:"trigger",1:"wakeup",2:"online"},Ju={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},Ku={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Yx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},zu=Yx.FAILED|Yx.ACTIVE|Yx.STARTED|Yx.RETRY|Yx.WAKEUPABLE|Yx.EXTSIM|Yx.DISABLED|Yx.WAKEUP|Yx.POSUPDATE_ACTIVE,a8=`${nx.RM2M_STATE}: `;function hv(x=0){let A=(x&Yx.WAKEUPABLE)!==0,e="offline",r=A;return x&Yx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Yx.RETRY?(e="retry",r=!1):x&Yx.STARTED?(e="dialing",r=!1):x&Yx.ACTIVE?(e="active",r=!1):x&Yx.FAILED?(e="failed",r=A):x&Yx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Yx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~zu}}function Vu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Hu[A]??x}function Wu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Ju[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Xu(x){if(x.length===0)return null;let A=x.join(",");return Ku[A]??A}function gv(x){let A=x.split(","),[e,r,t,s,...i]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let v=parseInt(r,10),c=Wu(s),u=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:u>=101?null:parseInt(e,10),state:v,uplinkState:hv(v),uplinkMode:Vu(t),uplinkInterface:c?c[0]:null,uplinkInterfaceExtended:c?c[1]:null,uplinkInterfaceTechnical:c?c[2]:null,scriptState:Xu(i)}}function kv(x){let A=x.indexOf(a8);if(A===-1)return null;let e=x.substring(A+a8.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?gv(t):null}var Yu=5e3,Qu=class extends Uu.EventEmitter{constructor(x,A=zn){super(),i0(this,"atHandler"),i0(this,"logger"),i0(this,"lastState",null),i0(this,"pollingTimer",null),i0(this,"polling",!1),i0(this,"fetchInProgress",!1),i0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(Hx.RM2M_STATE),A=kv(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=Yu){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},Zu=require("events"),yv=class extends Zu.EventEmitter{constructor(){super(...arguments),i0(this,"serialNumber",""),i0(this,"serverUrl",""),i0(this,"deviceId",""),i0(this,"rssi",null),i0(this,"hasDebugSupport",!1),i0(this,"connectionState","disconnected"),i0(this,"connectionError",""),i0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},xD=require("events"),_v={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},AD=class extends xD.EventEmitter{constructor(x=ke,A){super(),i0(this,"logger",x),i0(this,"state"),i0(this,"transports",null),i0(this,"transportFactory",null),i0(this,"disconnectFn",null),i0(this,"reconnectOptions"),i0(this,"reconnectAbortController",null),this.state=new yv,this.reconnectOptions={..._v,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},eD={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},rD={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},tD=590,nD=3e4,R0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},$A=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},ni=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},va=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function NA(x){try{return decodeURIComponent(x)}catch{throw new R0("malformed url encoding")}}var iD=2e3,sD=2136;function fa(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=iD&&A<=sD}function jt(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!fa(e))throw new R0(`attribute '${A}' is not valid`)}}function aD(x){return typeof x.setMetadataValue=="function"?x:null}function oD(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function la(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function FD(x){return{status:200,body:x.ctx.siteInfo}}async function vD(x){let{blueprint:A}=x.ctx;if(!A)throw new $A("blueprint unavailable");return{status:200,body:A}}async function fD(x){let{me:A}=x.ctx;if(A==null)throw new $A("no profile stored");return{status:200,body:A}}function wv(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(s){x.logger?.error(`[localApi] device push for tag ${A} failed:`,s)}})()}async function lD(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var cD=1024;function Yt(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function Sv(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(cD,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var ca=26432,Wr={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},qv=Object.keys(Wr),Qt=["standby","commissioned","offline","commissioning","online"],Gs=Qt.reduce((x,A)=>x|Wr[A],0)>>>0;function Tv(x){let A=0;for(let e of qv)x[e]===!0&&(A|=Wr[e]);return A>>>0}function Ea(x,A){let e={};for(let r of qv)x&Wr[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function Pv(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(ca);if(!r?.data)return!1;let t=Yt(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let i=Ea(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(i)&&(e.lifecycle_flags=i,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var ED=new Set([...Qt,"service","lifecycle_state"]);function BD(x,A){let e=Math.max(ix.msToStamp40((x.timeSource??Wt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function CD(x){let A=pD(x.request.body??null);if(!A)throw new R0("invalid or missing request body");dD(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!DD(r))throw new R0("this site does not support lifecycle flags!");let t=Tv(r),s=t;for(let u of Qt){let b=A[u];typeof b=="boolean"&&(s=b?s|Wr[u]:s&~Wr[u])}if(s>>>=0,s===t)return{status:204,body:""};let i=BD(e,x.session),v=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~Gs>>>0}}),stamp40:i},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&Gs}}),stamp40:i+1}],c=oD(e.storage);return c&&await c.insertUtoChangeRequests(v.map(u=>({tag:ca,stamp40:u.stamp40,json:u.json}))),e.siteInfo.lifecycle_flags=Ea(s,r),await $v(e),uD(e,v),{status:204,body:""}}function dD(x){let A=[];for(let[e,r]of Object.entries(x))ED.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new R0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Qt.includes(e)))throw new R0("invalid parameters")}async function uD(x,A){try{let e=await lD(x,ca,A);e==="executed"?await Pv(x.storage,x.siteInfo)&&await $v(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function $v(x){await aD(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function DD(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function pD(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Nv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new R0('"select" must be an array')}}function bD(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new R0("invalid parameter, select must be an array")}}function mD(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(Oe(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function jD(x){let A=new Map;for(let e of x.fields){if(Oe(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function hD(x){let A=new Set;for(let e of x.fields)Oe(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function gD(x,A,e){if(!e)return null;let r=mD(x,A),t=new Set,s=[];for(let i of e){if(i==="stamp")continue;let v=r.get(i);v?t.add(v):s.push(i)}if(s.length>0)throw Iv(s);return t}function kD(x,A){let e=jD(x),r=[],t=[],s=!1;for(let i of A){if(i==="stamp"){s=!0,r.push("stamp");continue}let v=e.get(i);v?r.push(v):t.push(i)}if(t.length>0)throw Iv(t);return s||r.unshift("stamp"),r}function yD(x,A){if(A===void 0)return;let e=hD(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new R0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function _D(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function Ba(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function Iv(x){return new R0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function ii(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function wD(x){let A=x.ctx,e=NA(x.params[1]),r=ii(A.model,e);if(!r)throw new R0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new $A(`no data for container "${e}"`);let s=qD(A,r,t,SD(x));return{status:200,body:Mv(A,e,s)}}function SD(x){let A=x.query.json??{};return Nv(A.select)}function qD(x,A,e,r){let t=gD(A,Xt(x.blueprint??null,A),r);return _D(e,t)}function Mv(x,A,e){let r=x.model.byNameOrAlias(A);return r?av(e,Xt(x.blueprint??null,r)):e}async function TD(x){let A=x.ctx,e=NA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new $A(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new $A(`unknown container "${e}"`);let s=x.query.json??{},i=bD(s.select),v=yD(r,i);return{status:200,body:Ba(t,v)}}async function PD(x){let A=NA(x.params[1]);return Rv(x,A,"canonical")}async function $D(x){let A=NA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new $A(`unknown container "${A}"`);return Rv(x,A,"legacy")}async function Rv(x,A,e){let r=OD(x);if(!r)throw new R0("invalid or missing request body");jt(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new R0("value(s) of field(s) stamp are not valid");let i=x.ctx;if(e==="canonical"&&!ii(i.model,A))throw new R0("container does not exist");let v=i.model.byNameOrAlias(A);if(v?.kind==="histdata")throw new $A(`unknown container "${A}"`);let c=e==="canonical"?MD(i,v,s):RD(v,s);try{let u=e==="canonical"&&t!==void 0?{...c,stamp:t}:c,b=await i.mapper.writeContainer(A,u);return b.devicePushable&&wv(i,b.tag,b.data,b.stamp40),{status:204,body:""}}catch(u){throw ND(u,A,e,i,v)}}function ND(x,A,e,r,t){if(x instanceof Kt){let s=x.field?ID(r,t,x.field,e):void 0;return e==="canonical"?s?new R0(`no permission to modify container field \`${s}\``):new R0(`no permission to modify container \`${A}\``):s?new ni(`unknown field name(s): ${s}`):new va(`no permission to modify '${A}'`)}return x}function ID(x,A,e,r){if(!A)return e;let t=A.fields.find(i=>i.name===e||i.name.toLowerCase()===e||(i.alias??i.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():Xt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function MD(x,A,e){if(!A)return e;let r=Xt(x.blueprint??null,A),t=new Map;if(r)for(let[s,i]of r)t.set(i,s);else for(let s of A.fields){let i=s.alias??s.name;t.set(i,i.toLowerCase()),t.set(i.toLowerCase(),i.toLowerCase())}return Lv(A,t,e,s=>new R0(`unknown field name(s): ${s}`))}function RD(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return Lv(x,e,A,r=>new ni(`unknown field name(s): ${r}`))}var LD=new Set(["stamp","stamp4","stamp8","datetime"]);function Lv(x,A,e,r){let t=new Map(x.fields.map(c=>[(c.alias??c.name).toLowerCase(),c])),s={},i=[],v=[];for(let[c,u]of Object.entries(e)){let b=A.get(c);if(!b){i.push(c);continue}let m=t.get(b);if(m&&LD.has(m.type)&&!(typeof u=="string"&&fa(u))){v.push(c);continue}s[b]=u}if(i.length>0)throw r(i.join(","));if(v.length>0)throw new R0(`value(s) of field(s) ${v.join(",")} are not valid`);return s}function OD(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=GD(r);if(t===void 0)throw new R0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function GD(x){try{return JSON.parse(x)}catch{return}}var Ov="x-mt-backfill",Gv="pending";async function Ca(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[Ov]:Gv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var UD=1e3,Ln=1e3,Uv="20000101",Hv="*";async function HD(x){let A=x.query.json??{};Xv(A,["from","until","count","offset","select"]),jt(A);let e=x.ctx,r=NA(x.params[1]),{mapperSelect:t,order:s}=Kv(e,r,A.select);zv(e,r);let i=xi(A.from,Uv,"from"),v=xi(A.until,Hv,"until");Vv(i,v),v!==null&&(v=KD(v));let c=zD(A.count),u=Wv(A.offset),b=await Ca(e,A.from,i);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:i,untilMs:v,count:c,offset:u,select:t})).map(g=>Jv(x,e,r,Ba(g,s))),headers:b}}async function JD(x){let A=x.query.json??{};Xv(A,["from","until","offset","select"]),jt(A);let e=x.ctx,r=NA(x.params[1]),t=x.params[2],{mapperSelect:s,order:i}=Kv(e,r,A.select);zv(e,r);let v=xi(A.from,Uv,"from"),c=xi(A.until,Hv,"until");Vv(v,c);let u=Wv(A.offset),b=await Ca(e,A.from,v),g=(await e.mapper.readTimeseries(r,{fromMs:v,untilMs:c,count:t==="youngest"?-1:1,offset:u,select:s}))[0];return g?{status:200,body:Jv(x,e,r,Ba(g,i)),headers:b}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:b}}function Jv(x,A,e,r){return x.apiVersion==="1"?r:Mv(A,e,r)}function Kv(x,A,e){let r=Nv(e);if(!r)return{mapperSelect:void 0,order:null};let t=ii(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=kD(t,r),i=s.filter(v=>v!=="stamp");return{mapperSelect:i.length>0?i:void 0,order:s}}function zv(x,A){if(!ii(x.model,A))throw new R0("timeseries does not exist")}function xi(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return mt(t)}catch{throw new R0(`attribute '${e}' is not valid`)}}function Vv(x,A){if(x!==null&&A!==null&&x>A)throw new R0('E_BAD_REQUEST "from" value must be older than "until"')}function KD(x){let A=ix.msToStamp40(x);return ix.stamp40ToMS(A)>=x&&(A-=1),ix.stamp40ToMS(A)}function zD(x){if(x==null||x==="")return UD;let A=Number(x);if(!Number.isInteger(A))throw new R0('"count" must be an integer');if(A===0)throw new R0("`count` cannot be 0");if(A<-Ln)throw new R0(`"count" must be greater than or equal to -${Ln}`);if(A>Ln)throw new R0(`"count" must be less than or equal to ${Ln}`);return A}function Wv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new R0('"offset" must be an integer');if(A<0)throw new R0('"offset" must be greater than or equal to 0');return A}function Xv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new R0(`"${e}" is not allowed`)}var VD=1e5,WD="20000101",XD="*";async function YD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new $A(`unknown container "${e}"`);let s=x.query.json??{};jt(s);let{fromMs:i,untilMs:v}=x7(s);A7(i,v);let c=e7(s),u=r7(s),b=Yv(t,s.select)??["stamp"],m=Ai(s.from)?await Ca(r,s.from,i):void 0,g=b.filter($=>$!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:i,untilMs:v,count:c,offset:u,select:g.length>0?g:void 0})).map($=>b.map(T=>T==="stamp"?$.stamp:$[T]??null)),headers:m}}async function QD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,s=t.model.byNameOrAlias(e);if(!s)throw new $A(`unknown container "${e}"`);let i=x.query.json??{};jt(i);let v=Yv(s,i.select)??["stamp"],c=ZD(i),u=v.filter(g=>g!=="stamp"),m=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:c??null,count:c!==void 0||r==="youngest"?-1:1,select:u.length>0?u:void 0}))[0];return m?{status:200,body:[v.map(g=>g==="stamp"?m.stamp:m[g]??null)]}:{status:200,body:[]}}function ZD(x){if(!(!Ai(x.until)||x.until==="*"))try{return mt(String(x.until))??void 0}catch{throw new R0("from or until value invalid")}}function x7(x){let A=Ai(x.from),e=Ai(x.until);if((!A||!e)&&!da(x.count))throw new R0("missing or invalid parameters (from and until and/or count)");return{fromMs:o8(A?x.from:WD),untilMs:o8(e?x.until:XD)}}function A7(x,A){if(x!==null&&A!==null&&x>A)throw new R0('"from" value must be older than "until"')}function o8(x){let A=String(x);try{return mt(A)}catch{throw new R0(`invalid stamp "${A}"`)}}function e7(x){if(!da(x.count))return VD;if(typeof x.count!="number")throw new R0("invalid parameter count");return x.count}function r7(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new R0("invalid parameter offset");return A}function Yv(x,A){if(A==null)return;if(!Array.isArray(A))throw new R0("invalid parameter, select must be an array");let e=A.map(v=>String(v).toLowerCase()),r=e.filter(v=>v.includes(" "));if(r.length>0)throw new R0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(v=>!Oe(v)).map(v=>(v.alias??v.name).toLowerCase()));s.add("stamp");let i=t.filter(v=>!s.has(v));if(i.length>0)throw new R0(`invalid channel(s) ${i.join(",")}`);return t}function da(x){return!!x}function Ai(x){return typeof x=="string"?x.trim().length>0:da(x)}var t7="device_id";function n7(x){return async A=>(await si(A),{status:200,body:await s7(A.ctx,x)})}async function si(x){let A=NA(x.params[0]),e=await i7(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new $A(`unknown device "${A}"`)}async function i7(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(t7)}async function s7(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=Yt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=pt(ix.stamp40ToMS(ge(e.stamp))),r):{}}function ua(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function a7(x){return async A=>{await si(A);let e=v7(A.request.body??null);if(!e)throw new R0("invalid or missing request body");return ua(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?Yt(r.data)??{}:{};return await Da(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function o7(x){return async A=>(await si(A),ua(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Da(A.ctx,x,e,{}),{status:204,body:""})}))}function F7(x){return async A=>{await si(A);let e=NA(A.params[1]);return ua(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=Yt(r.data)??{},s=e.toLowerCase();for(let i of Object.keys(t))i.toLowerCase()===s&&delete t[i];return await Da(A.ctx,x,r,t),{status:204,body:""}})}}function v7(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function Da(x,A,e,r){let t=Sv(JSON.stringify(r),e?.data?.length??0),s=ix.msToStamp40((x.timeSource??Wt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:PA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),wv(x,A,t,s)}var Qv={"content-type":"application/json"},f7=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:fD,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:FD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:vD,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:CD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:JD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:HD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:wD,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:PD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:QD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:YD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:TD,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:$D,checksUid:!0},...l7()];function l7(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,s])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:n7(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:a7(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:o7(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:F7(s),checksUid:!1}]);return[...e,...r]}var c7=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function E7(x){let A=la();return e=>Zv(x,e,A)}async function Zv(x,A,e=la()){try{let[r,t]=d7(A.path),s=u7(t),i=C7(r,x);if(i===null)return Vr(404,"E_NOT_FOUND","unknown customer");let v=A.method.toUpperCase();for(let c of f7){if(c.method!==v)continue;let u=c.pattern.exec(i);if(!u)continue;let b=u.slice(1);if(c.checksUid&&!B7(x,b[0]))return Vr(404,"E_NOT_FOUND","unknown site");let m=/^\/api\/([12])\//.exec(i)?.[1]??"1",g=await c.handler({request:A,params:b,query:s,ctx:x,session:e,apiVersion:m});return b7(g)}return Vr(404,"E_NOT_FOUND","not found")}catch(r){return Af(r)}}function B7(x,A){return x.allowAnySiteUid===!0||A!==void 0&&NA(A)===x.siteUid}function C7(x,A){let e=c7.exec(x);if(!e)return x;let r=NA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function d7(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function u7(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&D7(A,e);return A}function D7(x,A){let e=A.indexOf("="),r=NA(e<0?A:A.slice(0,e)),t=e<0?"":NA(A.slice(e+1));r==="json"?x.json=p7(t):x.params[r]=t}function p7(x){try{return JSON.parse(x)}catch{throw new R0("request supplied data which is not json formatted ")}}function b7(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Qv,...x.headers},body:A}}function xf(x,A){return{status:x,headers:{...Qv},body:JSON.stringify(A)}}function Af(x){return x instanceof R0||x instanceof aa||x instanceof Zs?Vr(400,"E_BAD_REQUEST",x.message):x instanceof ni||x instanceof Kt?Vr(403,"E_FORBIDDEN",x.message):x instanceof va?Vr(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof $A||x instanceof Er?Vr(404,"E_NOT_FOUND",x.message):xf(500,{err:x instanceof Error?x.message:String(x)})}function Vr(x,A,e){return xf(x,{err:`${A} ${e}`})}function m7(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var Fm={};Wc(Fm,{default:()=>xc,deviceExitCode:()=>Zl,program:()=>hA});module.exports=Xc(Fm);var rx=require("commander"),ln=Y0(require("chalk"));var Gi={name:"@microtronics/studio-cli",version:"1.3.0-alpha.4",description:"Microtronics Studio CLI Tool",main:"./out/api.js",typings:"./out/studio-cli.d.ts",bin:{"studio-cli":"studio-cli"},publishConfig:{access:"public"},scripts:{compile:"npm run build:registryApiTypings && tsc","build:cli":"node build.mjs","build:exe":"node build-exe.mjs",api:"api-extractor run --local --verbose",build:"npm run compile && npm run api && npm run build:cli","watch:build":"npm run compile -- --watch",test:"cross-env STUDIO_ENV=lucky mocha","test-ci":"cross-env STUDIO_ENV=lucky mocha --reporter mocha-junit-reporter","watch:test":"npm run test -- --watch",prepublishOnly:"npm run build","build:registryApiTypings":"npx openapi-typescript https://api.registry.lucky.ci.microtronics.com/v1/openapi.yaml -o ./src/typings/registry.ts"},author:"Microtronics",license:"ISC",dependencies:{"@gera2ld/tarjs":"^0.3.1",ajv:"^8.17.1","ajv-formats":"^3.0.1","ajv-keywords":"^5.1.0",chalk:"^5.4.1",commander:"^12.1.0","cross-fetch":"^4.0.0","deepmerge-ts":"^7.1.5",dotenv:"^16.4.7","file-type-checker":"^1.1.2",glob:"^11.0.1","iconv-lite":"^0.6.3","image-dimensions":"^2.3.0",ini:"^5.0.0",minimatch:"^10.0.1","openapi-fetch":"^0.13.0",pako:"^2.1.0",semver:"^7.7.2","sql.js":"^1.14.2","tinytar-fix":"^0.1.1","update-notifier":"^7.3.1",usb:"^2.14.0",uuid:"^9.0.1","vscode-uri":"^3.0.8",yaml:"^2.6.1"},engines:{node:">= 22"},devDependencies:{"@microsoft/api-extractor":"^7.47.11","@microtronics/device-master":"bitbucket:microtronics-core/device-master#v4.1.0","@types/chai":"^4.3.6","@types/chai-as-promised":"^7.1.5","@types/ini":"^4.1.1","@types/mocha":"^10.0.9","@types/node":"^22.9.1","@types/semver":"^7.5.6","@types/sql.js":"^1.4.11","@types/update-notifier":"^6.0.8","@types/vscode":"^1.86.2","@yao-pkg/pkg":"^6.22.0",chai:"^4.3.8","chai-as-promised":"^7.1.2","cross-env":"^7.0.3",esbuild:"^0.27.3","extract-zip":"^2.0.1",mocha:"^10.8.2","mocha-junit-reporter":"^2.2.1","openapi-typescript":"^7.6.0","pawncc-wasm":"bitbucket:microtronics-core/pawncc-wasm#v1.2.0",resedit:"^3.0.2",tar:"^7.5.7","ts-node":"^10.9.2",typescript:"^5.6.3"},mocha:{require:["ts-node/register"],"watch-files":"src/**",spec:"./test/**/*.spec.ts",recursive:!0},files:["out/api.js","out/studio-cli.d.ts","dist/main.js","dist/studio-cli.d.ts","studio-cli","CHANGELOG.md"]};var QA=Y0(require("node:fs/promises"));var Pt=require("vscode-uri"),bo=require("glob"),ZA={readFile(x){return QA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return QA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await QA.default.stat(x.fsPath),e=(A.isDirectory()?2:0)|(A.isFile()?1:0)|(A.isSymbolicLink()?64:0);return{ctime:A.ctimeMs,mtime:A.mtimeMs,permissions:void 0,size:A.size,type:e}}catch{return null}},async writeFile(x,A){typeof A=="string"&&(A=new TextEncoder().encode(A));let e=Pt.Utils.dirname(x);return await QA.default.mkdir(e.fsPath,{recursive:!0}),QA.default.writeFile(x.fsPath,A,{flag:"w"})},async findFiles(x,A,e){let r={ignore:e,nodir:!0,absolute:!0,dot:!0,cwd:x.fsPath};return(await(0,bo.glob)(A,r)).map(s=>{let i=s.replace(/\\/g,"/");return Pt.URI.parse(`file:///${i}`)})},async copy(x,A){let e=await QA.default.stat(x.fsPath);return await QA.default.mkdir(Pt.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?QA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):QA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await QA.default.mkdir(x.fsPath,{recursive:!0})}};var _t=require("vscode-uri");var Ue=require("vscode-uri");var ot=require("vscode-uri");var Qc=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function dn(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^Qc[(e^x[r])&255];return(e^-1)>>>0}var bm=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),mm=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var T0;(q=>{function x(_,$){let[T,M]=$,{line:N,col:z}=_.linePos(T);return{line:Number(N)-1,startCharacter:z-1,endCharacter:z+(M-T)}}q.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(_){return dn(A.encode(_)).toString(16)}q.generateHashForLibraryName=e;function r(_){return dn(A.encode(_)).toString(16)}q.generateHashForFilePath=r;function t(_){return dn(_).toString(16).toUpperCase().padStart(8,"0")}q.generateCRC32ForFileContent=t;function s(_){try{let $=null;return _?.type==="Buffer"?$=Uint8Array.from(_.data):$=_,new TextDecoder("utf8").decode($)}catch{return""}}q.convertBlobToString=s;function i(_=""){return _.replace(/\r\n|\n\r|\r/g,`
2634
+ `)}q.normalizeLF=i;function v(_){try{let $=s(_);return i($).split(`
2635
+ `)}catch{return[]}}q.convertBlobToStringArray=v,q.isNumeric=_=>!Array.isArray(_)&&_-parseFloat(_)+1>=0;function u(_){let $="",T=_.byteLength;for(let M=0;M<T;M++)$+=String.fromCharCode(_[M]);return btoa($)}q.bufferToBase64=u;function b(_,$){let T=`${_}`.match(/\{\d*(index)(\+\d*)?}/g);if(T){let M=_;return T.forEach(N=>{let z=N.replace(/\+0$/,""),F0=z.match(/index/)?.[0];if(F0){let L=z.slice(1,-1).split(F0)[1],k=parseInt(L)||0;M=M.replace(N,`${$+k}`)}}),M}else return _}q.patchValueWithArrayInfo=b;let m={};function g(_,$,T){let M=m[_];M&&clearTimeout(M.timer),m[_]={timer:setTimeout(()=>{delete m[_],T()},$),handler:T}}q.defer=g})(T0||={});var Oo=require("image-dimensions"),Go=require("file-type-checker");var Vm=require("cross-fetch/polyfill"),Mo=Y0(require("openapi-fetch"));var Fr=require("vscode-uri");var _x=require("vscode-uri");var De=Y0(require("semver"));var tA="dist/",mo="dde/",Ui="dlo/",Hi=".studio/",jo="dfiles/",s0;(c=>{c.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${Hi}auto/`,e=`${Hi}dev/`,r=`${A}dlo/`,t=`${A}dde/`;c.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${c.fileNames.autoInc}`,defaultInc:`${r}${c.fileNames.defaultInc}`,autoUplinkInc:`${r}${c.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${c.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${c.fileNames.autoDdeInc}`,mainDdeInc:`${r}${c.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${c.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${c.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${c.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${c.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${c.fileNames.historyJson}`}},libdeps:`${Hi}libdeps/`,dev:{path:e,mirror:`${e}${c.fileNames.devMirror}`,deviceLog:`${e}${c.fileNames.devDeviceLog}`}},dist:{path:tA,dloPath:`${tA}dlo/`,mainAmxPath:`${tA}dlo/${c.fileNames.mainAmx}`,mainAmxReportPath:`${tA}dlo/${c.fileNames.mainAmxReport}`,ddeXmlPath:`${tA}dde/${c.fileNames.ddeXml}`,ddeApiPath:`${tA}api/`,ddeApi:`${tA}api/${c.fileNames.ddeOpenApi}`,historyJson:`${tA}dde/${c.fileNames.historyJson}`,povPath:`${tA}pov`,povDetailsPath:`${tA}pov/details`,dfilesPath:`${tA}dfiles`,dfilesProperties:`${tA}dfiles/properties.json`,bloPath:`${tA}blo`,reportTemplate:`${tA}/${c.fileNames.reportTemplate}`,definesTs:`${tA}defines.ts`,definesAppTs:`${tA}defines.app.ts`},dlo:{path:Ui,mainDLO:`${Ui}main.dlo`,mainINI:`${Ui}main.ini`},dde:{path:mo,mainDDE:`${mo}main.dde`},dfiles:{path:jo,mainDFILES:`${jo}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},c.readme=u=>`# ${u} README
2636
2636
 
2637
2637
  This is the README for your project "${u}". Write a brief description what this project is about.`,c.changelog=`# Changelog
2638
2638
 
2639
2639
  All notable changes to this project will be documented in this file.
2640
2640
 
2641
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(s0||={});var Ui=Y0(require("node:child_process")),Hi=require("node:fs"),Lr=Y0(require("node:path")),$e;($=>{let x=Lr.join("node_modules","npm","bin","npm-cli.js"),A=(...T)=>{let M=Lr.join(...T);return(0,Hi.existsSync)(M)?M:void 0};function e(){if(process.platform!=="win32")return{file:"npm",args:[]};let T=process.env.npm_execpath;if(T&&/npm-cli\.js$/i.test(T)&&(0,Hi.existsSync)(T))return{file:process.env.npm_node_execpath||process.execPath,args:[T]};let M=A(Lr.dirname(process.execPath),x);if(M)return{file:process.execPath,args:[M]};for(let N of(process.env.PATH??"").split(Lr.delimiter).filter(Boolean)){let z=A(N,"npm.exe");if(z)return{file:z,args:[]};if(A(N,"npm.cmd")){let F0=A(N,x);if(F0)return{file:A(N,"node.exe")??process.execPath,args:[F0]}}}throw new Error("npm not found: make sure Node.js (including npm) is installed and on the PATH")}$.resolveNpm=e;function r(T,M={}){let N=e();return Ui.spawn(N.file,[...N.args,...T],{...M,shell:!1,windowsHide:!0})}$.spawnNpm=r;let t=/[&|;<>`$()]/,a=/%[^%\s]+%/,i=(T,M)=>new Error(`Command "${T}" uses shell syntax ("${M}"), which is not supported. Move the logic into an npm script (package.json) and call that script instead.`),l=T=>{T.current!==void 0&&(T.tokens.push(T.current),T.current=void 0)},c=(T,M)=>{M===T.quote?T.quote=void 0:T.current=(T.current??"")+M},u=(T,M,N)=>{if(M==='"'||M==="'")T.quote=M,T.current=T.current??"";else if(/\s/.test(M))l(T);else{if(t.test(M))throw i(N,M);T.current=(T.current??"")+M}},b=T=>{let M={tokens:[],current:void 0,quote:void 0};for(let z of T)M.quote!==void 0?c(M,z):u(M,z,T);if(M.quote!==void 0)throw new Error(`Command "${T}" has an unterminated ${M.quote} quote`);l(M);let N=M.tokens.find(z=>a.test(z));if(N!==void 0)throw i(T,a.exec(N)[0]);return M.tokens};function m(T){let[M,...N]=b(T);if(M===void 0)throw new Error("Command is empty");if(M==="npm"){let z=e();return{file:z.file,args:[...z.args,...N]}}return{file:M,args:N}}$.parseCommandLine=m;let g=/[\0\r\n]/,q=({file:T,args:M})=>{if(typeof T!="string"||T.trim().length===0)throw new Error("Cannot run a command without a program name");let N=[T,...M].map(z=>{if(typeof z!="string"||g.test(z))throw new Error(`Invalid command line argument: ${JSON.stringify(z)}`);return z});return{file:N[0],args:N.slice(1)}};function _(T,M,N){return new Promise((z,F0)=>{let{file:R,args:k}=q(M),O={cwd:T.fsPath,env:process.env,shell:!1,windowsHide:!0,stdio:["ignore","pipe","pipe"]},W=Ui.spawn(R,k,O),Y="",H="",V=(n0,r0)=>{let x0=new Error(n0);x0.code=r0,x0.stdout=Y,x0.stderr=H,F0(x0)};W.stdout?.on("data",n0=>{let r0=n0.toString("utf8");Y+=r0,N.log(r0.replace(/\r?\n$/,""))}),W.stderr?.on("data",n0=>{let r0=n0.toString("utf8");H+=r0,N.error(r0.replace(/\r?\n$/,""))}),W.on("error",n0=>{V(`Failed to start "${R}": ${n0.message}`,n0.code??"ENOENT")}),W.on("close",(n0,r0)=>{if(n0===0){z();return}let x0=[R,...k].join(" "),f0=r0?`signal ${r0}`:`exit code ${n0}`;V(`Command failed: ${x0} (${f0})
2641
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(s0||={});var Ji=Y0(require("node:child_process")),Ki=require("node:fs"),Lr=Y0(require("node:path")),Ne;($=>{let x=Lr.join("node_modules","npm","bin","npm-cli.js"),A=(...T)=>{let M=Lr.join(...T);return(0,Ki.existsSync)(M)?M:void 0};function e(){if(process.platform!=="win32")return{file:"npm",args:[]};let T=process.env.npm_execpath;if(T&&/npm-cli\.js$/i.test(T)&&(0,Ki.existsSync)(T))return{file:process.env.npm_node_execpath||process.execPath,args:[T]};let M=A(Lr.dirname(process.execPath),x);if(M)return{file:process.execPath,args:[M]};for(let N of(process.env.PATH??"").split(Lr.delimiter).filter(Boolean)){let z=A(N,"npm.exe");if(z)return{file:z,args:[]};if(A(N,"npm.cmd")){let F0=A(N,x);if(F0)return{file:A(N,"node.exe")??process.execPath,args:[F0]}}}throw new Error("npm not found: make sure Node.js (including npm) is installed and on the PATH")}$.resolveNpm=e;function r(T,M={}){let N=e();return Ji.spawn(N.file,[...N.args,...T],{...M,shell:!1,windowsHide:!0})}$.spawnNpm=r;let t=/[&|;<>`$()]/,s=/%[^%\s]+%/,i=(T,M)=>new Error(`Command "${T}" uses shell syntax ("${M}"), which is not supported. Move the logic into an npm script (package.json) and call that script instead.`),v=T=>{T.current!==void 0&&(T.tokens.push(T.current),T.current=void 0)},c=(T,M)=>{M===T.quote?T.quote=void 0:T.current=(T.current??"")+M},u=(T,M,N)=>{if(M==='"'||M==="'")T.quote=M,T.current=T.current??"";else if(/\s/.test(M))v(T);else{if(t.test(M))throw i(N,M);T.current=(T.current??"")+M}},b=T=>{let M={tokens:[],current:void 0,quote:void 0};for(let z of T)M.quote!==void 0?c(M,z):u(M,z,T);if(M.quote!==void 0)throw new Error(`Command "${T}" has an unterminated ${M.quote} quote`);v(M);let N=M.tokens.find(z=>s.test(z));if(N!==void 0)throw i(T,s.exec(N)[0]);return M.tokens};function m(T){let[M,...N]=b(T);if(M===void 0)throw new Error("Command is empty");if(M==="npm"){let z=e();return{file:z.file,args:[...z.args,...N]}}return{file:M,args:N}}$.parseCommandLine=m;let g=/[\0\r\n]/,q=({file:T,args:M})=>{if(typeof T!="string"||T.trim().length===0)throw new Error("Cannot run a command without a program name");let N=[T,...M].map(z=>{if(typeof z!="string"||g.test(z))throw new Error(`Invalid command line argument: ${JSON.stringify(z)}`);return z});return{file:N[0],args:N.slice(1)}};function _(T,M,N){return new Promise((z,F0)=>{let{file:L,args:k}=q(M),O={cwd:T.fsPath,env:process.env,shell:!1,windowsHide:!0,stdio:["ignore","pipe","pipe"]},V=Ji.spawn(L,k,O),Y="",H="",W=(n0,r0)=>{let x0=new Error(n0);x0.code=r0,x0.stdout=Y,x0.stderr=H,F0(x0)};V.stdout?.on("data",n0=>{let r0=n0.toString("utf8");Y+=r0,N.log(r0.replace(/\r?\n$/,""))}),V.stderr?.on("data",n0=>{let r0=n0.toString("utf8");H+=r0,N.error(r0.replace(/\r?\n$/,""))}),V.on("error",n0=>{W(`Failed to start "${L}": ${n0.message}`,n0.code??"ENOENT")}),V.on("close",(n0,r0)=>{if(n0===0){z();return}let x0=[L,...k].join(" "),f0=r0?`signal ${r0}`:`exit code ${n0}`;W(`Command failed: ${x0} (${f0})
2642
2642
  ${Y}
2643
- ${H}`,n0??r0??void 0)})})}$.run=_})($e||={});var yo=require("minimatch");var Ji=require("vscode-uri");var mo=Y0(require("semver")),Hc="package.json",Jc=["peerDependencies","dependencies","optionalDependencies"],Kc=" ",st;(r=>{r.PART_DIST_PATHS=[s0.filePaths.dist.bloPath,s0.filePaths.dist.povDetailsPath,s0.filePaths.dist.dloPath.replace(/\/$/,"")];async function A(t,a,i,l){let c=Ji.Utils.joinPath(t,Hc),u=`${i.name}/${Qc(t)}`;if(!await a.stat(c))return!1;let m=await zc(a,c,u,l);if(!m)return!1;let g=m.pkg;if(typeof g!="object"||g===null||Array.isArray(g))return l.warn(`"${u}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!mo.valid(i.version))return l.warn(`Library manifest version "${i.version}" is not a valid semantic version - skipped normalizing "${u}/package.json".`),!1;Vc(g,i,u,l);let q=Wc(g,i.version);g=q.pkg;let _=q.changed;_&&l.warn(`Patched version "${q.oldVersion??"<none>"}" -> "${i.version}" in "${u}/package.json" (studio.json is the source of truth).`);let $=Yc(i);if(Xc(g,$,u,l)&&(_=!0),!_)return!1;let T=Zc(m.raw),M=m.raw.endsWith(`
2643
+ ${H}`,n0??r0??void 0)})})}$.run=_})(Ne||={});var wo=require("minimatch");var zi=require("vscode-uri");var ho=Y0(require("semver")),Zc="package.json",xE=["peerDependencies","dependencies","optionalDependencies"],AE=" ",st;(r=>{r.PART_DIST_PATHS=[s0.filePaths.dist.bloPath,s0.filePaths.dist.povDetailsPath,s0.filePaths.dist.dloPath.replace(/\/$/,"")];async function A(t,s,i,v){let c=zi.Utils.joinPath(t,Zc),u=`${i.name}/${sE(t)}`;if(!await s.stat(c))return!1;let m=await eE(s,c,u,v);if(!m)return!1;let g=m.pkg;if(typeof g!="object"||g===null||Array.isArray(g))return v.warn(`"${u}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!ho.valid(i.version))return v.warn(`Library manifest version "${i.version}" is not a valid semantic version - skipped normalizing "${u}/package.json".`),!1;rE(g,i,u,v);let q=tE(g,i.version);g=q.pkg;let _=q.changed;_&&v.warn(`Patched version "${q.oldVersion??"<none>"}" -> "${i.version}" in "${u}/package.json" (studio.json is the source of truth).`);let $=iE(i);if(nE(g,$,u,v)&&(_=!0),!_)return!1;let T=aE(m.raw),M=m.raw.endsWith(`
2644
2644
  `),N=JSON.stringify(g,null,T)+(M?`
2645
- `:"");try{await a.writeFile(c,N)}catch(z){return l.warn(`Could not write "${u}/package.json": ${z}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,a,i,l){for(let c of r.PART_DIST_PATHS){let u=Ji.Utils.joinPath(t,c);await A(u,a,i,l)}}r.normalizeLibraryParts=e})(st||={});async function zc(x,A,e,r){try{let t=await x.readFile(A),a=T0.convertBlobToString(t),i=JSON.parse(a);return{raw:a,pkg:i}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function Vc(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function Wc(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function Xc(x,A,e,r){let t=!1;for(let a of Jc){let i=x[a];if(!i)continue;let l=!1;for(let c of Object.keys(i)){if(!A.has(c))continue;let u=i[c];if(typeof u!="string"||u.startsWith("npm:")||u.includes("://")){r.warn(`Left "${c}" in ${a} of ${e}/package.json untouched - its value "${u}" does not look like a Studio library reference.`);continue}delete i[c],l=!0,t=!0,r.warn(`Removed "${c}" from ${a} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}l&&Object.keys(i).length===0&&delete x[a]}return t}function Yc(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function Qc(x){let A=x.path.replace(/\\/g,"/");for(let e of st.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function Zc(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:Kc}var xE=require("tinytar-fix"),AE=require("pako"),Ne=".studio/libdeps",Or="package.json",eE="package-lock.json";function Ki(x){let A=x.dlo?.mainFile,e=[{partName:"blo",partDistPath:"blo",workingPath:jo(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:jo(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?rE(A):void 0}],r=[],t=[],a=new Set;for(let i of e){if(i.workingPath!==void 0){if(a.has(i.workingPath)){t.push(i);continue}a.add(i.workingPath)}r.push(i)}return{parts:r,duplicates:t}}function zi(x,A){for(let e of x)A.warn(`Skipping npm part "${e.partName}" - its working path (${e.workingPath}) is already used by another part in studio.json`)}function dn(x){let A=x.replace(/\\/g,"/").split("/").filter(e=>e!==""&&e!==".");if(!A.some(e=>e===".."))return A.join("/")}function jo(x){if(x)return dn(x)||void 0}function rE(x){let A=dn(x);if(A===void 0)return;let e=A.lastIndexOf("/");return e===-1?void 0:A.slice(0,e)}function ho(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(px.dependencyIdToName)}async function tE(x,A,e,r){let t=_x.Utils.joinPath(x,Ne,r);try{return await A.stat(_x.Utils.joinPath(t,X.fileName))?await X.readRaw(t,A):null}catch(a){return e.warn(`Could not read manifest for library "${r}": ${a}`),null}}async function nE(x,A,e,r){let t=new Set,a=ho(r),i=null;for(;a.length>0;){let l=a.shift();if(t.has(l))continue;t.add(l);let c=await tE(x,A,e,l);if(!c)continue;let u=c.engines?.backend;u&&(!i||X.compareBackendVersion(u,i.backend)>0)&&(i={backend:u,requiredBy:`${c.publisher}/${c.name}`}),a.push(...ho(c))}return i}var px;(R=>{async function x(k,O=!1){let W={...k.libraryDependencies||{}};return O||Object.assign(W,k.libraryDevDependencies||{}),W}R.getAll=x;function A(k){return k.split("/")[1]}R.dependencyIdToName=A;function e(k,O){let W=A(O);return _x.Utils.joinPath(k,Ne,W)}R.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}R.rangeToVersion=r;function t(k,O,W){if(!de.satisfies(O,W,{includePrerelease:!0}))throw new Error(`${k}, version ${O} does not satisfy required constraint ${W}`)}R.satisfiesSemverRange=t;async function a(k,O,W={},Y=!1){let H=await X.read(k,O),V=H.libraryDependencies||{};Y&&Object.assign(V,H.libraryDevDependencies);let n0=Object.keys(W);for(let r0 of n0)if(Object.hasOwn(V,r0)){let x0=W[r0],f0=V[r0],U=r(x0),v0=r(f0),c0=de.compare(U,v0);c0===1?(V[r0]=x0,t(r0,U,f0)):c0===-1&&(V[r0]=f0,t(r0,v0,x0))}else V[r0]=W[r0];return V}R.validateDependencyTree=a;async function i(k,O,W,Y,H){let V=r(H),n0=_x.Utils.joinPath(k,Ne,Y);try{let r0=await X.read(n0,O);return de.gte(r0.version,V)&&r0.publisher.toLowerCase()===W.toLowerCase()}catch{return!1}}R.isDependencyInstalled=i;async function l(k,O,W,Y){let H=_x.Utils.joinPath(k,Ne,Y);await O.rm(H).catch(V=>{W.error("removeExisting",V)})}R.removeExisting=l;async function c(k,O,W,Y,H){let V=xE.untar(AE.ungzip(H));await l(k,O,W,Y);for(let n0 of V.values())try{let r0=_x.Utils.joinPath(k,Ne,Y,n0.name);await O.writeFile(r0,n0.data)}catch(r0){W.error("Extracting lib",r0)}}R.extractLibraryContent=c;async function u(k,O,W,Y,H,V,n0,r0=!1){let[x0,f0]=V.split("/");if(n0&&await i(k,O,x0,f0,n0))return;await l(k,O,W,f0);let U=await hx.getLibraryProfile(H,x0,f0,Y),v0=n0?U.versions?.find(G0=>de.eq(G0.name,R.rangeToVersion(n0))):U.versions[0];if(!v0)throw new Error(`Library ${V} with version ${n0} does not exist!`);let c0=v0.files.find(G0=>G0.name==="studio.json"),b0=(await iE(H,c0.downloadUrl)).libraryDependencies||{},I0={...b0};I0[V]=`^${v0.name}`,await a(k,O,I0,r0);for(let[G0,ox]of Object.entries(b0))await u(k,O,W,Y,H,G0,ox,r0);let L0=v0.files.find(G0=>G0.name==="library.tar.gz");if(!L0)throw new Error(`Library ${V} has no content!`);let dx=await hx.fetchCustomContent(H,L0.downloadUrl);await c(k,O,W,f0,dx),await z(k,O,W,f0,r0);let iA=await X.read(k,O),LA=iA.libraryDependencies||{},Kx=iA.libraryDevDependencies||{},H0=r0?Kx:LA;H0[V]=`^${v0.name}`,iA.libraryDependencies=LA,iA.libraryDevDependencies=Kx,await X.write(k,O,iA)}R.installDependency=u;async function b(k,O,W,Y,H){let V=await X.read(k,O),n0=V.libraryDependencies||{},r0=V.libraryDevDependencies||{},x0=Object.assign(n0,r0);for(let[f0,U]of Object.entries(x0)){let v0=Object.hasOwn(r0,f0);await u(k,O,W,Y,H,f0,U,v0)}for(let[f0]of Object.entries(x0)){let U=A(f0),v0=Object.hasOwn(r0,f0);await z(k,O,W,U,v0)}W.done(`Installed ${Object.entries(x0).length} dependencies`)}R.installDependencies=b;async function m(k,O,W,Y,H){let V=await X.read(k,O),n0=V.libraryDependencies||{},r0=V.libraryDevDependencies||{},x0=Object.assign(n0,r0),f0=`${Y}/${H}`;delete x0[f0];let U=await sE(k,O,x0);if(!Object.hasOwn(U,f0))await F0(k,O,W,H),await l(k,O,W,H),delete r0[f0],delete n0[f0],await X.write(k,O,V);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}R.uninstallDependency=m;async function g(k,O){try{let Y=(await _o(_x.Utils.joinPath(k,Or),O)).workspaces;if(Array.isArray(Y)&&Y.every(V=>typeof V=="string")&&Y.length>0)return Y;let H=Y?.packages;return Array.isArray(H)&&H.every(V=>typeof V=="string")&&H.length>0?H:null}catch{return null}}R.readNpmWorkspacePatterns=g;function q(k,O){let W=dn(k);return W===void 0?!1:O.some(Y=>{let H=dn(Y);return H===void 0?!1:H===W||(0,yo.minimatch)(W,H)})}R.isPathInWorkspaces=q;function _(k,O){if(!O)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let W=[],Y=!1;for(let H of k)q(H.workingPath,O)?Y=!0:W.push(H.workingPath);return{rootInstall:Y,partInstalls:W}}R.planNpmInstalls=_;async function $(k,O,W){let Y=await X.read(k,O),H=new Set([...Object.keys(Y.libraryDependencies||{}),...Object.keys(Y.libraryDevDependencies||{})].map(A)),V=new Set,n0=[...H];for(;n0.length>0;){let r0=n0.shift();if(V.has(r0))continue;V.add(r0);let x0=_x.Utils.joinPath(k,Ne,r0);try{let f0=_x.Utils.joinPath(x0,X.fileName);if(!await O.stat(f0))continue;let U=await X.readRaw(x0,O);await st.normalizeLibraryParts(x0,O,U,W),n0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(f0){W.warn(`Could not normalize library parts for "${r0}": ${f0}`)}}}R.normalizeInstalledLibraryParts=$;async function T(k,O,W){let Y=await X.read(k,O),H=await nE(k,O,W,Y);if(!H)return;let V=Y.engines?.backend;if(!V||X.compareBackendVersion(H.backend,V)>0){let n0=V?`"${V}"`:"none",r0=X.isLibrary(Y)?"library":"application",x0=X.isLibrary(Y)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${r0} "${Y.publisher}/${Y.name}" declares ${n0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${x0}`)}}R.validateMinimumBackendVersion=T;async function M(k,O,W){await $(k,O,W);let Y=await X.read(k,O),{parts:H,duplicates:V}=Ki(Y);zi(V,W);let n0=H.filter(({workingPath:v0})=>!!v0).map(({partName:v0,workingPath:c0})=>({name:v0,workingPath:c0})),r0=[];for(let v0 of n0){let c0=_x.Utils.joinPath(k,v0.workingPath),p0=_x.Utils.joinPath(c0,Or);await O.stat(p0)&&r0.push(v0)}if(r0.length===0)return;let x0=await g(k,O),{rootInstall:f0,partInstalls:U}=_(r0,x0);if(f0){let v0=r0.filter(c0=>!U.includes(c0.workingPath)).map(c0=>c0.workingPath).join(", ");W.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${v0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await Cn(k,["install","--no-audit","--no-fund"],W)}for(let v0 of r0){if(!U.includes(v0.workingPath))continue;x0?W.warn(`${v0.workingPath} (${v0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):W.info(`Installing npm dependencies for ${v0.name} (${v0.workingPath})...`);let c0=_x.Utils.joinPath(k,v0.workingPath);await FE(c0,O,W)}}R.installNpmInApmParts=M;async function N(k,O,W,Y=!1){let H=await X.read(k,O),V=await x(H,Y),n0=[],r0=s0.filePaths[W].path,x0=W===_0.Part.dlo?"inc":"dfiles";for(let f0 in V){let U=R.dependencyToPath(k,f0),v0=R.dependencyIdToName(f0),c0=_x.Utils.joinPath(U,r0,`${v0}.${x0}`);await O.stat(c0)&&n0.push({name:v0,path:c0})}if(X.isLibrary(H)){let f0=_x.Utils.joinPath(k,r0,`${H.name}.${x0}`);await O.stat(f0)&&n0.push({name:H.name,path:f0})}return n0}R.getApmPartDependencies=N;async function z(k,O,W,Y,H){let V=await X.read(k,O),{parts:n0,duplicates:r0}=Ki(V);zi(r0,W);for(let{partName:x0,partDistPath:f0,workingPath:U}of n0){if(!U)continue;let v0=_x.Utils.joinPath(k,Ne,Y,"dist",...f0.split("/"),Or);if(!await O.stat(v0))continue;let p0=_x.Utils.joinPath(k,U,Or);if(!await O.stat(p0)){W.info(`${U} (${x0}) has no package.json, skipping link`);continue}try{let b0=await go(k,O,U),I0=H?"devDependencies":"dependencies";b0[I0]=b0[I0]||{};let L0=U.split("/").length,dx=Array(L0).fill("..").join("/");b0[I0][Y]=`file:${dx}/${Ne}/${Y}/dist/${f0}`,await ko(k,O,U,b0),W.info(`Linked ${Y} to ${x0} (${U})`)}catch(b0){W.warn(`Could not link ${Y} to ${x0}: ${b0}`)}}}R.linkLibraryApmParts=z;async function F0(k,O,W,Y){let H=await X.read(k,O),{parts:V,duplicates:n0}=Ki(H);zi(n0,W);for(let{partName:r0,workingPath:x0}of V){if(!x0)continue;let f0=_x.Utils.joinPath(k,x0,Or);if(await O.stat(f0))try{let U=await go(k,O,x0),v0=!1;U.dependencies?.[Y]?.startsWith("file:")&&(delete U.dependencies[Y],v0=!0),U.devDependencies?.[Y]?.startsWith("file:")&&(delete U.devDependencies[Y],v0=!0),v0&&(await ko(k,O,x0,U),W.info(`Unlinked ${Y} from ${r0}`))}catch(U){W.warn(`Could not unlink ${Y} from ${r0}: ${U}`)}}}R.unlinkLibraryApmParts=F0})(px||={});async function _o(x,A){let e=await A.readFile(x);return JSON.parse(T0.convertBlobToString(e))}function go(x,A,e){return _o(_x.Utils.joinPath(x,e,Or),A)}async function ko(x,A,e,r){let t=_x.Utils.joinPath(x,e,Or),a=JSON.stringify(r,null," ")+`
2646
- `;await A.writeFile(t,a)}async function iE(x,A){return await hx.fetchCustomContent(x,A,!0)}async function sE(x,A,e){let r={};function t(u,b,m,g=!1){let q=r[u],_=px.rangeToVersion(m),$=px.rangeToVersion(m);(!q||de.gt(_,$))&&(r[u]={publisherId:b,version:m,installed:g})}let a=Object.entries(e).map(([u,b])=>{let[m,g]=u.split("/");return t(g,m,b,!0),g}),i={};for(let u of a)try{let b=await aE(x,A,u);i[u]=Object.entries(b).map(([m,g])=>{let[q,_]=m.split("/");return t(_,q,g),_}),a.push(...i[u])}catch{let m=r[u];throw new Error(`Please import "${m.publisherId}/${u}" first.`)}let l=[];for(;;){let u=a.filter(b=>l.includes(b)?!1:(i[b]||[]).every(g=>l.includes(g)));if(l.push(...u),a.length===l.length||!u.length)break}let c={};return[...new Set(l)].forEach(u=>{let{version:b,publisherId:m}=r[u],g=oE(m,u,b);c[g.libraryId]=g.libraryVersion}),c}async function aE(x,A,e){let r=_x.Utils.joinPath(x,Ne,e);return(await X.read(r,A))?.libraryDependencies||{}}function oE(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function Cn(x,A,e){let r=$e.resolveNpm();return $e.run(x,{file:r.file,args:[...r.args,...A]},e)}async function FE(x,A,e){let r=_x.Utils.joinPath(x,eE);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await Cn(x,["install"],e);return}try{await Cn(x,["ci"],e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await Cn(x,["install"],e)}}var qo=Y0(require("ini"));var vE=T0.convertBlobToString,fE=s0.filePaths.dlo.path,gx;(t=>{let x;(c=>(c.lucky="lucky",c.wynni="wynni",c.production="production"))(x=t.ENV||={});async function A(a,i,l){let c=await X.read(a,i),u=await px.getAll(c),b={},m={},g={};for(let N in u){let z=px.dependencyToPath(a,N),F0=px.dependencyIdToName(N),R=Fr.Utils.joinPath(z,fE,`${F0}.ini`);await at(i,R,b,m,g,F0);let k=Fr.Utils.joinPath(z,s0.filePaths.defaultsIni);await at(i,k,b,m,g,F0)}if(X.isLibrary(c)){let N=Fr.Utils.joinPath(a,s0.filePaths.dlo.path,`${c.name}.ini`);l&&await i.stat(N)&&l.warn(`dlo/${c.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await at(i,N,b,m,g,c.name)}let q=c.dlo?.iniFile||s0.filePaths.dlo.mainINI,_=Fr.Utils.joinPath(a,q);l&&await i.stat(_)&&l.warn(`${q} is deprecated. Please migrate your defines to app.ini in the project root.`);let $=BE(q);if(await at(i,_,b,m,g,$),X.isLibrary(c)){let N=Fr.Utils.joinPath(a,s0.filePaths.defaultsIni);await at(i,N,b,m,g,"defaults")}let T=lE(c,b,m,g),M=Fr.Utils.joinPath(a,s0.filePaths.appIni);return await at(i,M,b,m,g,"app"),{flat:b,sections:m,definesWithSource:g,defaultsOnly:T}}t.read=A;async function e(a,i,l,c){let u=Object.entries(l.flat),b=[];for(let[q,_]of u){let $=l.definesWithSource[q];if($?.comment){let M=wo($.comment);for(let N of M.split(`
2647
- `))b.push(` ${N}`)}let T=So(_)?"number":"string";b.push(` ${q}: ${T};`)}let m=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...b," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[q,_]of u){let $=l.definesWithSource[q];if($?.comment&&m.push(wo($.comment)),So(_))m.push(`globalThis.STUDIO_DEFINES['${q}'] = ${Number(_)};`);else{let T=_.replace(/\\/g,"\\\\").replace(/'/g,"\\'");m.push(`globalThis.STUDIO_DEFINES['${q}'] = '${T}';`)}}m.push(""),m.push("export {};"),m.push("");let g=Fr.Utils.joinPath(a,c??s0.filePaths.dist.definesTs);await i.writeFile(g,m.join(`
2648
- `))}t.exportDefinesTs=e;function r(a,i){let l=[];return{result:a.replace(/\{\{([^}]+)\}\}/g,(u,b)=>{let m=b.trim();return Object.hasOwn(i,m)?i[m]:(l.push(m),u)}),unresolvedKeys:l}}t.replaceDefineTemplates=r})(gx||={});function lE(x,A,e,r){if(X.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function cE(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function EE(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let a of e){let i=cE(a.trim());if(i.kind==="empty"||i.kind==="other"){r=[];continue}if(i.kind==="comment"){r.push(i.text);continue}if(i.kind==="section"){t=i.name;continue}let l=t?`${t}_${i.key}`:i.key;r.length>0&&(A[l]=r.join(`
2649
- `)),r=[]}return A}function wo(x){let A=x.split(`
2645
+ `:"");try{await s.writeFile(c,N)}catch(z){return v.warn(`Could not write "${u}/package.json": ${z}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,i,v){for(let c of r.PART_DIST_PATHS){let u=zi.Utils.joinPath(t,c);await A(u,s,i,v)}}r.normalizeLibraryParts=e})(st||={});async function eE(x,A,e,r){try{let t=await x.readFile(A),s=T0.convertBlobToString(t),i=JSON.parse(s);return{raw:s,pkg:i}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function rE(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function tE(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function nE(x,A,e,r){let t=!1;for(let s of xE){let i=x[s];if(!i)continue;let v=!1;for(let c of Object.keys(i)){if(!A.has(c))continue;let u=i[c];if(typeof u!="string"||u.startsWith("npm:")||u.includes("://")){r.warn(`Left "${c}" in ${s} of ${e}/package.json untouched - its value "${u}" does not look like a Studio library reference.`);continue}delete i[c],v=!0,t=!0,r.warn(`Removed "${c}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}v&&Object.keys(i).length===0&&delete x[s]}return t}function iE(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function sE(x){let A=x.path.replace(/\\/g,"/");for(let e of st.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function aE(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:AE}var oE=require("tinytar-fix"),FE=require("pako"),Ie=".studio/libdeps",Or="package.json",vE="package-lock.json";function Vi(x){let A=x.dlo?.mainFile,e=[{partName:"blo",partDistPath:"blo",workingPath:go(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:go(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?fE(A):void 0}],r=[],t=[],s=new Set;for(let i of e){if(i.workingPath!==void 0){if(s.has(i.workingPath)){t.push(i);continue}s.add(i.workingPath)}r.push(i)}return{parts:r,duplicates:t}}function Wi(x,A){for(let e of x)A.warn(`Skipping npm part "${e.partName}" - its working path (${e.workingPath}) is already used by another part in studio.json`)}function Dn(x){let A=x.replace(/\\/g,"/").split("/").filter(e=>e!==""&&e!==".");if(!A.some(e=>e===".."))return A.join("/")}function go(x){if(x)return Dn(x)||void 0}function fE(x){let A=Dn(x);if(A===void 0)return;let e=A.lastIndexOf("/");return e===-1?void 0:A.slice(0,e)}function ko(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(px.dependencyIdToName)}async function lE(x,A,e,r){let t=_x.Utils.joinPath(x,Ie,r);try{return await A.stat(_x.Utils.joinPath(t,X.fileName))?await X.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function cE(x,A,e,r){let t=new Set,s=ko(r),i=null;for(;s.length>0;){let v=s.shift();if(t.has(v))continue;t.add(v);let c=await lE(x,A,e,v);if(!c)continue;let u=c.engines?.backend;u&&(!i||X.compareBackendVersion(u,i.backend)>0)&&(i={backend:u,requiredBy:`${c.publisher}/${c.name}`}),s.push(...ko(c))}return i}var px;(L=>{async function x(k,O=!1){let V={...k.libraryDependencies||{}};return O||Object.assign(V,k.libraryDevDependencies||{}),V}L.getAll=x;function A(k){return k.split("/")[1]}L.dependencyIdToName=A;function e(k,O){let V=A(O);return _x.Utils.joinPath(k,Ie,V)}L.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}L.rangeToVersion=r;function t(k,O,V){if(!De.satisfies(O,V,{includePrerelease:!0}))throw new Error(`${k}, version ${O} does not satisfy required constraint ${V}`)}L.satisfiesSemverRange=t;async function s(k,O,V={},Y=!1){let H=await X.read(k,O),W=H.libraryDependencies||{};Y&&Object.assign(W,H.libraryDevDependencies);let n0=Object.keys(V);for(let r0 of n0)if(Object.hasOwn(W,r0)){let x0=V[r0],f0=W[r0],U=r(x0),v0=r(f0),c0=De.compare(U,v0);c0===1?(W[r0]=x0,t(r0,U,f0)):c0===-1&&(W[r0]=f0,t(r0,v0,x0))}else W[r0]=V[r0];return W}L.validateDependencyTree=s;async function i(k,O,V,Y,H){let W=r(H),n0=_x.Utils.joinPath(k,Ie,Y);try{let r0=await X.read(n0,O);return De.gte(r0.version,W)&&r0.publisher.toLowerCase()===V.toLowerCase()}catch{return!1}}L.isDependencyInstalled=i;async function v(k,O,V,Y){let H=_x.Utils.joinPath(k,Ie,Y);await O.rm(H).catch(W=>{V.error("removeExisting",W)})}L.removeExisting=v;async function c(k,O,V,Y,H){let W=oE.untar(FE.ungzip(H));await v(k,O,V,Y);for(let n0 of W.values())try{let r0=_x.Utils.joinPath(k,Ie,Y,n0.name);await O.writeFile(r0,n0.data)}catch(r0){V.error("Extracting lib",r0)}}L.extractLibraryContent=c;async function u(k,O,V,Y,H,W,n0,r0=!1){let[x0,f0]=W.split("/");if(n0&&await i(k,O,x0,f0,n0))return;await v(k,O,V,f0);let U=await hx.getLibraryProfile(H,x0,f0,Y),v0=n0?U.versions?.find(G0=>De.eq(G0.name,L.rangeToVersion(n0))):U.versions[0];if(!v0)throw new Error(`Library ${W} with version ${n0} does not exist!`);let c0=v0.files.find(G0=>G0.name==="studio.json"),b0=(await EE(H,c0.downloadUrl)).libraryDependencies||{},I0={...b0};I0[W]=`^${v0.name}`,await s(k,O,I0,r0);for(let[G0,ox]of Object.entries(b0))await u(k,O,V,Y,H,G0,ox,r0);let L0=v0.files.find(G0=>G0.name==="library.tar.gz");if(!L0)throw new Error(`Library ${W} has no content!`);let dx=await hx.fetchCustomContent(H,L0.downloadUrl);await c(k,O,V,f0,dx),await z(k,O,V,f0,r0);let iA=await X.read(k,O),LA=iA.libraryDependencies||{},Kx=iA.libraryDevDependencies||{},H0=r0?Kx:LA;H0[W]=`^${v0.name}`,iA.libraryDependencies=LA,iA.libraryDevDependencies=Kx,await X.write(k,O,iA)}L.installDependency=u;async function b(k,O,V,Y,H){let W=await X.read(k,O),n0=W.libraryDependencies||{},r0=W.libraryDevDependencies||{},x0=Object.assign(n0,r0);for(let[f0,U]of Object.entries(x0)){let v0=Object.hasOwn(r0,f0);await u(k,O,V,Y,H,f0,U,v0)}for(let[f0]of Object.entries(x0)){let U=A(f0),v0=Object.hasOwn(r0,f0);await z(k,O,V,U,v0)}V.done(`Installed ${Object.entries(x0).length} dependencies`)}L.installDependencies=b;async function m(k,O,V,Y,H){let W=await X.read(k,O),n0=W.libraryDependencies||{},r0=W.libraryDevDependencies||{},x0=Object.assign(n0,r0),f0=`${Y}/${H}`;delete x0[f0];let U=await BE(k,O,x0);if(!Object.hasOwn(U,f0))await F0(k,O,V,H),await v(k,O,V,H),delete r0[f0],delete n0[f0],await X.write(k,O,W);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}L.uninstallDependency=m;async function g(k,O){try{let Y=(await So(_x.Utils.joinPath(k,Or),O)).workspaces;if(Array.isArray(Y)&&Y.every(W=>typeof W=="string")&&Y.length>0)return Y;let H=Y?.packages;return Array.isArray(H)&&H.every(W=>typeof W=="string")&&H.length>0?H:null}catch{return null}}L.readNpmWorkspacePatterns=g;function q(k,O){let V=Dn(k);return V===void 0?!1:O.some(Y=>{let H=Dn(Y);return H===void 0?!1:H===V||(0,wo.minimatch)(V,H)})}L.isPathInWorkspaces=q;function _(k,O){if(!O)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let V=[],Y=!1;for(let H of k)q(H.workingPath,O)?Y=!0:V.push(H.workingPath);return{rootInstall:Y,partInstalls:V}}L.planNpmInstalls=_;async function $(k,O,V){let Y=await X.read(k,O),H=new Set([...Object.keys(Y.libraryDependencies||{}),...Object.keys(Y.libraryDevDependencies||{})].map(A)),W=new Set,n0=[...H];for(;n0.length>0;){let r0=n0.shift();if(W.has(r0))continue;W.add(r0);let x0=_x.Utils.joinPath(k,Ie,r0);try{let f0=_x.Utils.joinPath(x0,X.fileName);if(!await O.stat(f0))continue;let U=await X.readRaw(x0,O);await st.normalizeLibraryParts(x0,O,U,V),n0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(f0){V.warn(`Could not normalize library parts for "${r0}": ${f0}`)}}}L.normalizeInstalledLibraryParts=$;async function T(k,O,V){let Y=await X.read(k,O),H=await cE(k,O,V,Y);if(!H)return;let W=Y.engines?.backend;if(!W||X.compareBackendVersion(H.backend,W)>0){let n0=W?`"${W}"`:"none",r0=X.isLibrary(Y)?"library":"application",x0=X.isLibrary(Y)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${r0} "${Y.publisher}/${Y.name}" declares ${n0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${x0}`)}}L.validateMinimumBackendVersion=T;async function M(k,O,V){await $(k,O,V);let Y=await X.read(k,O),{parts:H,duplicates:W}=Vi(Y);Wi(W,V);let n0=H.filter(({workingPath:v0})=>!!v0).map(({partName:v0,workingPath:c0})=>({name:v0,workingPath:c0})),r0=[];for(let v0 of n0){let c0=_x.Utils.joinPath(k,v0.workingPath),p0=_x.Utils.joinPath(c0,Or);await O.stat(p0)&&r0.push(v0)}if(r0.length===0)return;let x0=await g(k,O),{rootInstall:f0,partInstalls:U}=_(r0,x0);if(f0){let v0=r0.filter(c0=>!U.includes(c0.workingPath)).map(c0=>c0.workingPath).join(", ");V.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${v0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await un(k,["install","--no-audit","--no-fund"],V)}for(let v0 of r0){if(!U.includes(v0.workingPath))continue;x0?V.warn(`${v0.workingPath} (${v0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):V.info(`Installing npm dependencies for ${v0.name} (${v0.workingPath})...`);let c0=_x.Utils.joinPath(k,v0.workingPath);await uE(c0,O,V)}}L.installNpmInApmParts=M;async function N(k,O,V,Y=!1){let H=await X.read(k,O),W=await x(H,Y),n0=[],r0=s0.filePaths[V].path,x0=V===_0.Part.dlo?"inc":"dfiles";for(let f0 in W){let U=L.dependencyToPath(k,f0),v0=L.dependencyIdToName(f0),c0=_x.Utils.joinPath(U,r0,`${v0}.${x0}`);await O.stat(c0)&&n0.push({name:v0,path:c0})}if(X.isLibrary(H)){let f0=_x.Utils.joinPath(k,r0,`${H.name}.${x0}`);await O.stat(f0)&&n0.push({name:H.name,path:f0})}return n0}L.getApmPartDependencies=N;async function z(k,O,V,Y,H){let W=await X.read(k,O),{parts:n0,duplicates:r0}=Vi(W);Wi(r0,V);for(let{partName:x0,partDistPath:f0,workingPath:U}of n0){if(!U)continue;let v0=_x.Utils.joinPath(k,Ie,Y,"dist",...f0.split("/"),Or);if(!await O.stat(v0))continue;let p0=_x.Utils.joinPath(k,U,Or);if(!await O.stat(p0)){V.info(`${U} (${x0}) has no package.json, skipping link`);continue}try{let b0=await yo(k,O,U),I0=H?"devDependencies":"dependencies";b0[I0]=b0[I0]||{};let L0=U.split("/").length,dx=Array(L0).fill("..").join("/");b0[I0][Y]=`file:${dx}/${Ie}/${Y}/dist/${f0}`,await _o(k,O,U,b0),V.info(`Linked ${Y} to ${x0} (${U})`)}catch(b0){V.warn(`Could not link ${Y} to ${x0}: ${b0}`)}}}L.linkLibraryApmParts=z;async function F0(k,O,V,Y){let H=await X.read(k,O),{parts:W,duplicates:n0}=Vi(H);Wi(n0,V);for(let{partName:r0,workingPath:x0}of W){if(!x0)continue;let f0=_x.Utils.joinPath(k,x0,Or);if(await O.stat(f0))try{let U=await yo(k,O,x0),v0=!1;U.dependencies?.[Y]?.startsWith("file:")&&(delete U.dependencies[Y],v0=!0),U.devDependencies?.[Y]?.startsWith("file:")&&(delete U.devDependencies[Y],v0=!0),v0&&(await _o(k,O,x0,U),V.info(`Unlinked ${Y} from ${r0}`))}catch(U){V.warn(`Could not unlink ${Y} from ${r0}: ${U}`)}}}L.unlinkLibraryApmParts=F0})(px||={});async function So(x,A){let e=await A.readFile(x);return JSON.parse(T0.convertBlobToString(e))}function yo(x,A,e){return So(_x.Utils.joinPath(x,e,Or),A)}async function _o(x,A,e,r){let t=_x.Utils.joinPath(x,e,Or),s=JSON.stringify(r,null," ")+`
2646
+ `;await A.writeFile(t,s)}async function EE(x,A){return await hx.fetchCustomContent(x,A,!0)}async function BE(x,A,e){let r={};function t(u,b,m,g=!1){let q=r[u],_=px.rangeToVersion(m),$=px.rangeToVersion(m);(!q||De.gt(_,$))&&(r[u]={publisherId:b,version:m,installed:g})}let s=Object.entries(e).map(([u,b])=>{let[m,g]=u.split("/");return t(g,m,b,!0),g}),i={};for(let u of s)try{let b=await CE(x,A,u);i[u]=Object.entries(b).map(([m,g])=>{let[q,_]=m.split("/");return t(_,q,g),_}),s.push(...i[u])}catch{let m=r[u];throw new Error(`Please import "${m.publisherId}/${u}" first.`)}let v=[];for(;;){let u=s.filter(b=>v.includes(b)?!1:(i[b]||[]).every(g=>v.includes(g)));if(v.push(...u),s.length===v.length||!u.length)break}let c={};return[...new Set(v)].forEach(u=>{let{version:b,publisherId:m}=r[u],g=dE(m,u,b);c[g.libraryId]=g.libraryVersion}),c}async function CE(x,A,e){let r=_x.Utils.joinPath(x,Ie,e);return(await X.read(r,A))?.libraryDependencies||{}}function dE(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function un(x,A,e){let r=Ne.resolveNpm();return Ne.run(x,{file:r.file,args:[...r.args,...A]},e)}async function uE(x,A,e){let r=_x.Utils.joinPath(x,vE);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await un(x,["install"],e);return}try{await un(x,["ci"],e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await un(x,["install"],e)}}var Po=Y0(require("ini"));var DE=T0.convertBlobToString,pE=s0.filePaths.dlo.path,gx;(t=>{let x;(c=>(c.lucky="lucky",c.wynni="wynni",c.production="production"))(x=t.ENV||={});async function A(s,i,v){let c=await X.read(s,i),u=await px.getAll(c),b={},m={},g={};for(let N in u){let z=px.dependencyToPath(s,N),F0=px.dependencyIdToName(N),L=Fr.Utils.joinPath(z,pE,`${F0}.ini`);await at(i,L,b,m,g,F0);let k=Fr.Utils.joinPath(z,s0.filePaths.defaultsIni);await at(i,k,b,m,g,F0)}if(X.isLibrary(c)){let N=Fr.Utils.joinPath(s,s0.filePaths.dlo.path,`${c.name}.ini`);v&&await i.stat(N)&&v.warn(`dlo/${c.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await at(i,N,b,m,g,c.name)}let q=c.dlo?.iniFile||s0.filePaths.dlo.mainINI,_=Fr.Utils.joinPath(s,q);v&&await i.stat(_)&&v.warn(`${q} is deprecated. Please migrate your defines to app.ini in the project root.`);let $=hE(q);if(await at(i,_,b,m,g,$),X.isLibrary(c)){let N=Fr.Utils.joinPath(s,s0.filePaths.defaultsIni);await at(i,N,b,m,g,"defaults")}let T=bE(c,b,m,g),M=Fr.Utils.joinPath(s,s0.filePaths.appIni);return await at(i,M,b,m,g,"app"),{flat:b,sections:m,definesWithSource:g,defaultsOnly:T}}t.read=A;async function e(s,i,v,c){let u=Object.entries(v.flat),b=[];for(let[q,_]of u){let $=v.definesWithSource[q];if($?.comment){let M=qo($.comment);for(let N of M.split(`
2647
+ `))b.push(` ${N}`)}let T=To(_)?"number":"string";b.push(` ${q}: ${T};`)}let m=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...b," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[q,_]of u){let $=v.definesWithSource[q];if($?.comment&&m.push(qo($.comment)),To(_))m.push(`globalThis.STUDIO_DEFINES['${q}'] = ${Number(_)};`);else{let T=_.replace(/\\/g,"\\\\").replace(/'/g,"\\'");m.push(`globalThis.STUDIO_DEFINES['${q}'] = '${T}';`)}}m.push(""),m.push("export {};"),m.push("");let g=Fr.Utils.joinPath(s,c??s0.filePaths.dist.definesTs);await i.writeFile(g,m.join(`
2648
+ `))}t.exportDefinesTs=e;function r(s,i){let v=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(u,b)=>{let m=b.trim();return Object.hasOwn(i,m)?i[m]:(v.push(m),u)}),unresolvedKeys:v}}t.replaceDefineTemplates=r})(gx||={});function bE(x,A,e,r){if(X.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function mE(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function jE(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let i=mE(s.trim());if(i.kind==="empty"||i.kind==="other"){r=[];continue}if(i.kind==="comment"){r.push(i.text);continue}if(i.kind==="section"){t=i.name;continue}let v=t?`${t}_${i.key}`:i.key;r.length>0&&(A[v]=r.join(`
2649
+ `)),r=[]}return A}function qo(x){let A=x.split(`
2650
2650
  `);return A.length===1?`/** ${A[0]} */`:`/**
2651
2651
  ${A.map(r=>` * ${r}`).join(`
2652
2652
  `)}
2653
- */`}function So(x){return x!==""&&!isNaN(Number(x))}function BE(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function To(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
2654
- ${r}`:r||x}function Po(x,A,e,r,t,a,i){let l=t?`${t}_${r}`:r,c={value:x,sourceUri:A,sourceLine:dE(e,r,t)};return a[l]&&(c.comment=`${i}: ${a[l]}`),c}function CE(x,A,e,r,t,a,i,l,c){r[x]||(r[x]={});for(let[u,b]of Object.entries(A)){let m=`${x}_${u}`,g=l[m],q=`${b}`;e[m]=q,r[x][u]=q;let _=Po(q,a,i,u,x,l,c);_.comment=To(t[m]?.comment,g,c),t[m]=_}}async function at(x,A,e,r,t,a){if(!await x.stat(A))return;let i=await x.readFile(A),l=vE(i),c=qo.parse(l),u=A.toString(),b=l.split(/\r?\n/),m=EE(l);for(let[g,q]of Object.entries(c))if(typeof q=="object"&&q!==null)CE(g,q,e,r,t,u,b,m,a);else{let _=m[g],$=`${q}`;e[g]=$;let T=Po($,u,b,g,null,m,a);T.comment=To(t[g]?.comment,_,a),t[g]=T}}function dE(x,A,e){let r=e===null,t=e?`[${e}]`:null,a=new RegExp(`^\\s*${uE(A)}\\s*=`);for(let i=0;i<x.length;i++){let l=x[i].trim();if(t&&l===t){r=!0;continue}if(r&&l.startsWith("[")&&l.endsWith("]")&&e!==null){r=!1;continue}if(r&&a.test(x[i]))return i}return 0}function uE(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Dn=Y0(require("semver/preload")),{GET:Vi,POST:un,PUT:$o}=(0,No.default)();function SA(x){if(x)return{authorization:`Bearer ${x}`}}var hx;(q=>{q.getAPIUrl=_=>{let $="https://api.registry.microtronics.com";return _===gx.ENV.lucky?$="https://api.registry.lucky.ci.microtronics.com":_===gx.ENV.wynni&&($="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:$+"/v1"}};async function A(_,$,T,M){let{data:N,error:z}=await Vi("/publisher/{publisherId}/libraries/{libraryId}",{...(0,q.getAPIUrl)(M),headers:{...SA(_)},params:{path:{publisherId:$,libraryId:T}}});if(z)throw new Error(z.reason);return N}q.getLibraryProfile=A;async function e(_,$,T=!1){let M=await fetch($,{headers:{...SA(_),...g(!0)}});if(M.status===200)return T?await M.json():await M.arrayBuffer();throw new Error("Failed to fetch the library content")}q.fetchCustomContent=e;async function r(_,$,T){try{let{data:M,error:N}=await Vi("/publisher/{publisherId}",{...(0,q.getAPIUrl)(T),headers:{...SA(_)},params:{path:{publisherId:$}}});return N?(console.error(N),null):M}catch(M){return console.error(M),null}}q.getPublisher=r;async function t(_,$,T,M){try{let{data:N,error:z}=await un("/packages/{publisherId}/applications",{...(0,q.getAPIUrl)(M),headers:{...SA(_),...g(!0)},params:{path:{publisherId:$}},body:{...T}});if(z)throw new Error(z.reason);return N.id}catch{return null}}q.createNewApplication=t;async function a(_,$,T,M){let{data:N,error:z}=await Vi("/publisher/{publisherId}/applications/{applicationId}",{...(0,q.getAPIUrl)(M),headers:{...SA(_),...g(!0)},params:{path:{publisherId:$,applicationId:T}}});if(z)throw new Error(z.reason);return N}q.getExistingApplication=a;async function i(_,$,T,M,N){try{let{error:z}=await $o("/packages/{publisherId}/applications/{applicationId}",{...(0,q.getAPIUrl)(N),headers:{...SA(_),...g(!0)},params:{path:{publisherId:$,applicationId:T}},body:{...M}});if(z)throw new Error(z.reason);return}catch{return null}}q.updateExistingApplication=i;async function l(_,$,T,M,N,z){let F0=!!Dn.default.valid(M);try{let{error:R}=await $o("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,q.getAPIUrl)(z),headers:{...SA(_),...g(F0)},params:{path:{publisherId:$,applicationId:T,applicationVersion:M}},body:{...N}});if(R)throw new Error(R.reason);return}catch{return null}}q.updateExistingApplicationVersion=l;async function c(_,$,T,M,N,z){let F0=!!Dn.default.valid(M),{data:R,error:k}=await un("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,q.getAPIUrl)(z),headers:{...SA(_),...g(F0)},params:{path:{publisherId:$,applicationId:T,applicationVersion:M}},body:{},bodySerializer(){return N}});if(k)throw new Error(k.reason||k.err||k);return R}q.publishApplicationVersion=c;let u={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function b(_,$,T,M,N,z){try{let{error:F0}=await un("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,q.getAPIUrl)(z),headers:{...SA(_),...g(!0)},params:{path:{publisherId:$,libraryId:T,libraryVersion:M}},body:{...N},bodySerializer(R){let k=new FormData;for(let[O,W]of Object.entries(R))W!==void 0&&k.append(O,new Blob([W],{type:u[O]}),O);return k}});if(F0)throw new Error(F0.reason)}catch(F0){throw console.error(F0),F0}}q.publishLibraryVersion=b;async function m(_,$,T,M,N,z,F0){let R=!!Dn.default.valid(M),{error:k}=await un("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,q.getAPIUrl)(F0),headers:{...SA(_),...g(R),"Content-Type":"application/octet-stream"},params:{path:{publisherId:$,applicationId:T,applicationVersion:M,applicationFileName:N}},body:{},bodySerializer(){return z}});if(k)throw new Error(k.reason)}q.updateApplicationFile=m;function g(_=!1){return _?{"X-Semver":"true"}:{}}q.injectSemverHeader=g})(hx||={});var Oo=Y0(require("semver/preload"));var Go=require("deepmerge-ts"),DE=T0.isNumeric,Io="52v007",Mo="53v001",pE="54v001",bE="56v001",qA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Go.deepmerge)(structuredClone(this._manifest),qA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},X;(f0=>{let x=T0.convertBlobToString;f0.fileName="studio.json";let e;(L0=>(L0.m22x="m22x",L0.m23x="m23x",L0.nrf91="nrf91",L0.m2blegw="m2blegw",L0.m2easyv3="m2easyv3",L0.m2easyiot="m2easyiot"))(e=f0.DeviceProfiles||={});let r;(b0=>(b0.app="app",b0.library="library",b0.addon="addon",b0.analytics="analytics"))(r=f0.ProjectTypes||={});let t;(c0=>(c0.restricted="restricted",c0.global="global"))(t=f0.BloAccessLevel||={});let a;(c0=>(c0.embedded="$embedded",c0.pure="$pure"))(a=f0.PovLocation||={});function i(U){qA.overwrites=U}f0.setOverwrites=i;function l(){qA.overwrites=null}f0.clearOverwrites=l;async function c(U,v0){let c0=ot.Utils.joinPath(U,f0.fileName),p0=await v0.stat(c0);if(qA.manifest===null||c0?.fsPath!==qA.stat?.path.fsPath||p0?.ctime!==qA.stat?.ctime||p0?.mtime!==qA.stat?.mtime||p0?.size!==qA.stat?.size){let b0=await v0.readFile(c0),I0=x(b0);qA.manifest=JSON.parse(I0),qA.stat={...p0,path:c0}}return qA.manifest}f0.read=c;async function u(U,v0){return await v0.readFile(ot.Utils.joinPath(U,f0.fileName))}f0.readAsBlob=u;async function b(U,v0){let c0=ot.Utils.joinPath(U,f0.fileName),p0=await v0.readFile(c0),b0=x(p0);return JSON.parse(b0)}f0.readRaw=b;async function m(U,v0,c0){return qA.clear(),_E(c0),v0.writeFile(ot.Utils.joinPath(U,f0.fileName),JSON.stringify(c0,null," "))}f0.write=m;function g(U){return U.library!==void 0?U.library:U.type==="library"}f0.isLibrary=g;function q(U){return U.type==="addon"}f0.isAddon=q;function _(U){return U.type===void 0&&!g(U)?!0:U.type==="app"}f0.isApp=_;function $(U){return U.type===void 0?!0:U.type==="app"}f0.isIotApp=$;function T(U){return U.type==="analytics"}f0.isAnalytics=T;async function M(U,v0,c0){c0||(c0=await c(U,v0)),yE(c0),mE(c0),jE(c0),kE(c0)}f0.validateBasicManifest=M;function N(U){let v0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let p0=["-","_"];if(p0.includes(U[0])||p0.includes(U[U.length-1]))return v0}else return v0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}f0.validateLibraryName=N;function z(U,v0){if(v0)return N(U);{let c0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return c0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let b0=["-","_"," "];return b0.includes(U[0])||b0.includes(U[U.length-1])?c0:null}}f0.validateProjectName=z;function F0(U){return U.length<5?"The description must have at least 5 characters.":null}f0.validateDescription=F0;function R(U){if(!U)return"No publisher set yet";let v0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let p0=["_"];if(p0.includes(U[0])||p0.includes(U[U.length-1]))return v0}else return v0;return null}f0.validatePublisherId=R;async function k(U,v0,c0){return await hx.getPublisher(U,v0,c0)?null:`Publisher '${v0}' does not exist.`}f0.validatePublisherOnline=k;let O=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function W(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let c0 of v0)if(!c0.match(O))return`Domain "${c0}" is invalid`}else if(!U?.match(O)&&U!=="*")return'Invalid value for "allowedBackends"';return null}f0.validateRegistryAllowedBackends=W;let Y=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let c0 of v0)if(!c0.match(Y))return`Application id "${c0}" is invalid`}else if(!U?.match(Y)&&U!=="*")return'Invalid value for "allowedApplications"';return null}f0.validateRegistryAllowedApplications=H;async function V(U,v0,c0){let p0=c0.icon;if(!p0)throw new Error("App icon is required for publishing an application!");let b0=ot.Utils.joinPath(U,p0);if(!await v0.stat(b0))throw new Error(`Could not load icon "${p0}"`);let L0=await v0.readFile(b0),dx=(0,Ro.imageDimensionsFromData)(L0);if(!dx)throw new Error("App icon could not be validated!");if(dx?.width!==dx?.height)throw new Error("App icon has to be a square!");if(dx.width>512||dx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Lo.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}f0.validateApplicationIcon=V;function n0(U){let{engines:v0}=U;if(v0?.backend&&!v0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');hE(U),gE(U)}f0.validateEngineSettings=n0;function r0(U,v0){let c0=I0=>{let L0=/^(\d+)v(\d+)$/.exec(I0);return L0?[Number(L0[1]),Number(L0[2])]:null},p0=c0(U),b0=c0(v0);return p0&&b0?p0[0]-b0[0]||p0[1]-b0[1]:U===v0?0:U<v0?-1:1}f0.compareBackendVersion=r0;async function x0(U,v0,c0,p0){p0||(p0=await f0.read(U,v0));let b0=f0.isAddon(p0),I0=f0.isAnalytics(p0);switch(c0){case _0.Part.dlo:return!!p0?.dlo?.mainFile&&!b0&&!I0;case _0.Part.blo:return!!(p0.blo?.buildCommand&&p0.blo?.workingPath);case _0.Part.pov:return!!(p0.pov?.details?.buildCommand&&p0.pov.details.workingPath);case _0.Part.dde:case _0.Part.dfiles:return!0;default:return!1}}f0.isApmPartEnabled=x0})(X||={});function mE(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function jE(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function hE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(X.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Io){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${Io}"`)}function gE(x){if(!X.isAddon(x)&&!X.isAnalytics(x))return;let{backend:A}=x.engines,e=X.isAddon(x)?pE:bE;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function kE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(X.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!X.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function yE(x){if((x.engines?.backend||"00v000")>=Mo||X.isLibrary(x)){if(!Oo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Mo} onwards "version" has to be a semantic version string!"`)}else if(!DE(x.version))throw new Error('"version" has to be a number!')}function _E(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var xt=require("vscode-uri");var qx=require("vscode-uri");var El=Y0(require("ajv")),Bl=Y0(require("ajv-formats"));var Uo={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
2653
+ */`}function To(x){return x!==""&&!isNaN(Number(x))}function hE(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function $o(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
2654
+ ${r}`:r||x}function No(x,A,e,r,t,s,i){let v=t?`${t}_${r}`:r,c={value:x,sourceUri:A,sourceLine:kE(e,r,t)};return s[v]&&(c.comment=`${i}: ${s[v]}`),c}function gE(x,A,e,r,t,s,i,v,c){r[x]||(r[x]={});for(let[u,b]of Object.entries(A)){let m=`${x}_${u}`,g=v[m],q=`${b}`;e[m]=q,r[x][u]=q;let _=No(q,s,i,u,x,v,c);_.comment=$o(t[m]?.comment,g,c),t[m]=_}}async function at(x,A,e,r,t,s){if(!await x.stat(A))return;let i=await x.readFile(A),v=DE(i),c=Po.parse(v),u=A.toString(),b=v.split(/\r?\n/),m=jE(v);for(let[g,q]of Object.entries(c))if(typeof q=="object"&&q!==null)gE(g,q,e,r,t,u,b,m,s);else{let _=m[g],$=`${q}`;e[g]=$;let T=No($,u,b,g,null,m,s);T.comment=$o(t[g]?.comment,_,s),t[g]=T}}function kE(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${yE(A)}\\s*=`);for(let i=0;i<x.length;i++){let v=x[i].trim();if(t&&v===t){r=!0;continue}if(r&&v.startsWith("[")&&v.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(x[i]))return i}return 0}function yE(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var bn=Y0(require("semver/preload")),{GET:Xi,POST:pn,PUT:Io}=(0,Mo.default)();function qA(x){if(x)return{authorization:`Bearer ${x}`}}var hx;(q=>{q.getAPIUrl=_=>{let $="https://api.registry.microtronics.com";return _===gx.ENV.lucky?$="https://api.registry.lucky.ci.microtronics.com":_===gx.ENV.wynni&&($="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:$+"/v1"}};async function A(_,$,T,M){let{data:N,error:z}=await Xi("/publisher/{publisherId}/libraries/{libraryId}",{...(0,q.getAPIUrl)(M),headers:{...qA(_)},params:{path:{publisherId:$,libraryId:T}}});if(z)throw new Error(z.reason);return N}q.getLibraryProfile=A;async function e(_,$,T=!1){let M=await fetch($,{headers:{...qA(_),...g(!0)}});if(M.status===200)return T?await M.json():await M.arrayBuffer();throw new Error("Failed to fetch the library content")}q.fetchCustomContent=e;async function r(_,$,T){try{let{data:M,error:N}=await Xi("/publisher/{publisherId}",{...(0,q.getAPIUrl)(T),headers:{...qA(_)},params:{path:{publisherId:$}}});return N?(console.error(N),null):M}catch(M){return console.error(M),null}}q.getPublisher=r;async function t(_,$,T,M){try{let{data:N,error:z}=await pn("/packages/{publisherId}/applications",{...(0,q.getAPIUrl)(M),headers:{...qA(_),...g(!0)},params:{path:{publisherId:$}},body:{...T}});if(z)throw new Error(z.reason);return N.id}catch{return null}}q.createNewApplication=t;async function s(_,$,T,M){let{data:N,error:z}=await Xi("/publisher/{publisherId}/applications/{applicationId}",{...(0,q.getAPIUrl)(M),headers:{...qA(_),...g(!0)},params:{path:{publisherId:$,applicationId:T}}});if(z)throw new Error(z.reason);return N}q.getExistingApplication=s;async function i(_,$,T,M,N){try{let{error:z}=await Io("/packages/{publisherId}/applications/{applicationId}",{...(0,q.getAPIUrl)(N),headers:{...qA(_),...g(!0)},params:{path:{publisherId:$,applicationId:T}},body:{...M}});if(z)throw new Error(z.reason);return}catch{return null}}q.updateExistingApplication=i;async function v(_,$,T,M,N,z){let F0=!!bn.default.valid(M);try{let{error:L}=await Io("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,q.getAPIUrl)(z),headers:{...qA(_),...g(F0)},params:{path:{publisherId:$,applicationId:T,applicationVersion:M}},body:{...N}});if(L)throw new Error(L.reason);return}catch{return null}}q.updateExistingApplicationVersion=v;async function c(_,$,T,M,N,z){let F0=!!bn.default.valid(M),{data:L,error:k}=await pn("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,q.getAPIUrl)(z),headers:{...qA(_),...g(F0)},params:{path:{publisherId:$,applicationId:T,applicationVersion:M}},body:{},bodySerializer(){return N}});if(k)throw new Error(k.reason||k.err||k);return L}q.publishApplicationVersion=c;let u={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function b(_,$,T,M,N,z){try{let{error:F0}=await pn("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,q.getAPIUrl)(z),headers:{...qA(_),...g(!0)},params:{path:{publisherId:$,libraryId:T,libraryVersion:M}},body:{...N},bodySerializer(L){let k=new FormData;for(let[O,V]of Object.entries(L))V!==void 0&&k.append(O,new Blob([V],{type:u[O]}),O);return k}});if(F0)throw new Error(F0.reason)}catch(F0){throw console.error(F0),F0}}q.publishLibraryVersion=b;async function m(_,$,T,M,N,z,F0){let L=!!bn.default.valid(M),{error:k}=await pn("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,q.getAPIUrl)(F0),headers:{...qA(_),...g(L),"Content-Type":"application/octet-stream"},params:{path:{publisherId:$,applicationId:T,applicationVersion:M,applicationFileName:N}},body:{},bodySerializer(){return z}});if(k)throw new Error(k.reason)}q.updateApplicationFile=m;function g(_=!1){return _?{"X-Semver":"true"}:{}}q.injectSemverHeader=g})(hx||={});var Uo=Y0(require("semver/preload"));var Ho=require("deepmerge-ts"),_E=T0.isNumeric,Ro="52v007",Lo="53v001",wE="54v001",SE="56v001",TA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Ho.deepmerge)(structuredClone(this._manifest),TA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},X;(f0=>{let x=T0.convertBlobToString;f0.fileName="studio.json";let e;(L0=>(L0.m22x="m22x",L0.m23x="m23x",L0.nrf91="nrf91",L0.m2blegw="m2blegw",L0.m2easyv3="m2easyv3",L0.m2easyiot="m2easyiot"))(e=f0.DeviceProfiles||={});let r;(b0=>(b0.app="app",b0.library="library",b0.addon="addon",b0.analytics="analytics"))(r=f0.ProjectTypes||={});let t;(c0=>(c0.restricted="restricted",c0.global="global"))(t=f0.BloAccessLevel||={});let s;(c0=>(c0.embedded="$embedded",c0.pure="$pure"))(s=f0.PovLocation||={});function i(U){TA.overwrites=U}f0.setOverwrites=i;function v(){TA.overwrites=null}f0.clearOverwrites=v;async function c(U,v0){let c0=ot.Utils.joinPath(U,f0.fileName),p0=await v0.stat(c0);if(TA.manifest===null||c0?.fsPath!==TA.stat?.path.fsPath||p0?.ctime!==TA.stat?.ctime||p0?.mtime!==TA.stat?.mtime||p0?.size!==TA.stat?.size){let b0=await v0.readFile(c0),I0=x(b0);TA.manifest=JSON.parse(I0),TA.stat={...p0,path:c0}}return TA.manifest}f0.read=c;async function u(U,v0){return await v0.readFile(ot.Utils.joinPath(U,f0.fileName))}f0.readAsBlob=u;async function b(U,v0){let c0=ot.Utils.joinPath(U,f0.fileName),p0=await v0.readFile(c0),b0=x(p0);return JSON.parse(b0)}f0.readRaw=b;async function m(U,v0,c0){return TA.clear(),ME(c0),v0.writeFile(ot.Utils.joinPath(U,f0.fileName),JSON.stringify(c0,null," "))}f0.write=m;function g(U){return U.library!==void 0?U.library:U.type==="library"}f0.isLibrary=g;function q(U){return U.type==="addon"}f0.isAddon=q;function _(U){return U.type===void 0&&!g(U)?!0:U.type==="app"}f0.isApp=_;function $(U){return U.type===void 0?!0:U.type==="app"}f0.isIotApp=$;function T(U){return U.type==="analytics"}f0.isAnalytics=T;async function M(U,v0,c0){c0||(c0=await c(U,v0)),IE(c0),qE(c0),TE(c0),NE(c0)}f0.validateBasicManifest=M;function N(U){let v0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let p0=["-","_"];if(p0.includes(U[0])||p0.includes(U[U.length-1]))return v0}else return v0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}f0.validateLibraryName=N;function z(U,v0){if(v0)return N(U);{let c0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return c0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let b0=["-","_"," "];return b0.includes(U[0])||b0.includes(U[U.length-1])?c0:null}}f0.validateProjectName=z;function F0(U){return U.length<5?"The description must have at least 5 characters.":null}f0.validateDescription=F0;function L(U){if(!U)return"No publisher set yet";let v0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let p0=["_"];if(p0.includes(U[0])||p0.includes(U[U.length-1]))return v0}else return v0;return null}f0.validatePublisherId=L;async function k(U,v0,c0){return await hx.getPublisher(U,v0,c0)?null:`Publisher '${v0}' does not exist.`}f0.validatePublisherOnline=k;let O=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function V(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let c0 of v0)if(!c0.match(O))return`Domain "${c0}" is invalid`}else if(!U?.match(O)&&U!=="*")return'Invalid value for "allowedBackends"';return null}f0.validateRegistryAllowedBackends=V;let Y=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let c0 of v0)if(!c0.match(Y))return`Application id "${c0}" is invalid`}else if(!U?.match(Y)&&U!=="*")return'Invalid value for "allowedApplications"';return null}f0.validateRegistryAllowedApplications=H;async function W(U,v0,c0){let p0=c0.icon;if(!p0)throw new Error("App icon is required for publishing an application!");let b0=ot.Utils.joinPath(U,p0);if(!await v0.stat(b0))throw new Error(`Could not load icon "${p0}"`);let L0=await v0.readFile(b0),dx=(0,Oo.imageDimensionsFromData)(L0);if(!dx)throw new Error("App icon could not be validated!");if(dx?.width!==dx?.height)throw new Error("App icon has to be a square!");if(dx.width>512||dx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Go.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}f0.validateApplicationIcon=W;function n0(U){let{engines:v0}=U;if(v0?.backend&&!v0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');PE(U),$E(U)}f0.validateEngineSettings=n0;function r0(U,v0){let c0=I0=>{let L0=/^(\d+)v(\d+)$/.exec(I0);return L0?[Number(L0[1]),Number(L0[2])]:null},p0=c0(U),b0=c0(v0);return p0&&b0?p0[0]-b0[0]||p0[1]-b0[1]:U===v0?0:U<v0?-1:1}f0.compareBackendVersion=r0;async function x0(U,v0,c0,p0){p0||(p0=await f0.read(U,v0));let b0=f0.isAddon(p0),I0=f0.isAnalytics(p0);switch(c0){case _0.Part.dlo:return!!p0?.dlo?.mainFile&&!b0&&!I0;case _0.Part.blo:return!!(p0.blo?.buildCommand&&p0.blo?.workingPath);case _0.Part.pov:return!!(p0.pov?.details?.buildCommand&&p0.pov.details.workingPath);case _0.Part.dde:case _0.Part.dfiles:return!0;default:return!1}}f0.isApmPartEnabled=x0})(X||={});function qE(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function TE(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function PE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(X.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Ro){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${Ro}"`)}function $E(x){if(!X.isAddon(x)&&!X.isAnalytics(x))return;let{backend:A}=x.engines,e=X.isAddon(x)?wE:SE;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function NE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(X.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!X.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function IE(x){if((x.engines?.backend||"00v000")>=Lo||X.isLibrary(x)){if(!Uo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Lo} onwards "version" has to be a semantic version string!"`)}else if(!_E(x.version))throw new Error('"version" has to be a number!')}function ME(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var xt=require("vscode-uri");var Tx=require("vscode-uri");var jl=Y0(require("ajv")),hl=Y0(require("ajv-formats"));var Jo={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
2655
2655
 
2656
2656
  \u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
2657
2657
 
@@ -2749,41 +2749,54 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
2749
2749
 
2750
2750
  \u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
2751
2751
 
2752
- Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var yi=require("yaml");var ur=require("yaml");var pn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(pn||={});var Ax;(H=>{let x;(p0=>(p0.state="state",p0.result="result",p0.aloha="aloha",p0.volatile="volatile",p0.setting="setting",p0.command="command",p0.storage="storage",p0.relations="relations"))(x=H.DDEContainerName||={});let A;(C0=>(C0.configA="configA",C0.configB="configB",C0.configC="configC",C0.config0="config0",C0.config1="config1",C0.config2="config2",C0.config3="config3",C0.config4="config4",C0.config5="config5",C0.config6="config6",C0.config7="config7",C0.config8="config8",C0.config9="config9",C0.histdata0="histdata0",C0.histdata1="histdata1",C0.histdata2="histdata2",C0.histdata3="histdata3",C0.histdata4="histdata4",C0.histdata5="histdata5",C0.histdata6="histdata6",C0.histdata7="histdata7",C0.histdata8="histdata8",C0.histdata9="histdata9",C0.aloha="aloha",C0.alerts="alerts",C0.applog="applog"))(A=H.ContainerName||={});let e;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(e=H.ContainerType||={});let r;(I0=>(I0.up="up",I0.down="down",I0.upPlus="up+",I0.downPlus="down+",I0.none="none",I0.backendOnly="backend-only",I0.deviceOnly="device-only",I0.both="both",I0.bothPlus="both+",I0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(V,n0){return V==="cx"&&!["backend-only"].includes(n0)?"DDE_CID_CONFIG":V==="hx"?"DDE_CID_HISTDATA":V==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let a=["up","up+","down","down+","both","none","both+","backend-only","device-only"],i=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:a},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:a},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:a},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:a},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:a},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:a},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:a},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:a},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:a},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:a},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:i},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:i},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:i},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:i},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:i},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:i},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:i},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:i},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:i},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:i},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let g=["astring","nstring","cstring","wstring","ustring"],q=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:g,unit:g,chartMinimum:q,chartMaximum:q,scale:q,offset:q,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:q,chartAlarmHigh:q,chartWarningLow:q,chartWarningHigh:q,chartHysteresis:q,chartTriggerThreshold:q,chartTriggerRelation:q,chartSetPoint:q};function $(V,n0,r0){let x0=n0[V];if(x0!==void 0)if(H.regexRelation.exec(`${x0}`)){let f0=V==="chartSetPoint",[U,...v0]=x0.split("."),[,c0]=U.split("@"),p0=Object.values(r0.containers).find(dx=>dx.title===c0),b0=v0.join("."),I0=f0?";":"%",L0=(f0?"":"%")+(p0?.name||c0)+I0;if(L0=L0+`${b0}`,f0){let dx=r0.setPointList[n0.name];L0=L0+`;actual_output_value_${dx}`}return L0}else return x0}H.parseXMLValueWithRelation=$;function T(V){let{bitmask:n0}=V;if(!n0)return;let r0="$",x0=n0.replaceAll(" ","");if(n0.startsWith("0x"))r0+=x0.substring(2);else if(x0.startsWith("0b")){let f0=x0.substring(2).replaceAll(" ","");r0+=parseInt(f0,2).toString(16).toUpperCase()}return r0}H.parseXMLBitmask=T;function M(V){return V.type==="binary"?V.defaultValue.substring(2):V.defaultValue==="NaN"?"NAN":V.defaultValue}H.parseXMLDefaultValue=M,H.TDEF_NUMBER={xmlOut(V,n0,r0){V.decpl=$("decimalPlaces",n0,r0),V.decpl===void 0&&(V.decpl=0),V.vscale=$("scale",n0,r0),V.vofs=$("offset",n0,r0),V.min=$("chartMinimum",n0,r0),V.max=$("chartMaximum",n0,r0)}};let z={isBlob:1,xmlOut(V,n0){V.max=n0.byteSize}},F0={xmlOut(V){V.decpl=-1,V.param0="local",V.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...F0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...F0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let O=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function W(V){let n0=V.toLowerCase();return O.includes(n0)||/^field\d+$/.test(n0)||/^ch\d+$/.test(n0)}H.checkForReservedFieldName=W;function Y(V){return!!V.fields.find(n0=>n0.library===null&&n0.type!=="shadow")}H.hasContainerAppFields=Y})(Ax||={});var Ft={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},Wi={max_size:1e5,max_fields:1e3},ue={max_size:4e3,max_fields:1e3},ZA={max_size:1024,max_fields:1e3},vt={configA:Wi,configB:Wi,configC:Wi,config0:ue,config1:ue,config2:ue,config3:ue,config4:ue,config5:ue,config6:ue,config7:ue,config8:ue,config9:ue,histdata0:ZA,histdata1:ZA,histdata2:ZA,histdata3:ZA,histdata4:ZA,histdata5:ZA,histdata6:ZA,histdata7:ZA,histdata8:ZA,histdata9:ZA,aloha:{...ZA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Xi={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var Yi=require("vscode-uri");var ft=class{dloFileMap={};rootUri=Yi.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=T0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Yi.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var Wo=require("vscode-uri");function Qi(x){return x.replace(/\\/g,"/").split("/").pop()??""}function vr(x){return/\.spec\.dlo$/i.test(Qi(x))}function Pt(x,A){let e=Qi(x);if(!e)return!1;if(vr(e))return!0;let r=A?.dlo?.mainFile;return r?Qi(r)===e:e==="main.dlo"}var SE=/^\s*#define\s+TEST_OWN_MAIN\b/m;function qE(x){return SE.test(x)}function bn(x,A){if(!vr(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&qE(A)&&e.push("TEST_OWN_MAIN=1"),e}var $t="__it_";var jn=31-$t.length-4;function Ho(x){return x.replace(/^_+/,"").replace(/_+$/,"")}function mn(x,A=jn){let e=Ho(x.toLowerCase().replace(/[^a-zA-Z0-9_]+/g,"_"));return Ho(e.substring(0,Math.max(0,A)))}function hn(x,A){let e=mn(x);if(!e||!A.has(e))return e;for(let r=2;;r++){let t=`_${r}`,a=`${mn(x,jn-t.length)}${t}`;if(!A.has(a))return a}}function gn(x){return`${$t}${x}`}function kn(x,A){return`${$t}${x}__${A}`}function yn(x,A){return`// @it ${x} "${A}"`}var Jo=/\/\/\s*@it\s+([A-Za-z0-9_]+)\s+"((?:[^"\\]|\\.)*)"/;var PE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,$E=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,NE=/^(?:\s*#ifdef\s+)(.*)$/,IE=/^(?:\s*#ifndef\s+)(.*)$/,ME=/^(?:\s*#elseifdef\s+)(.*)$/,RE=/^(?:\s*#elseifndef\s+)(.*)$/,Xo=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,Yo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Qo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Zo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,xF=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,LE=/^\s*#include\s*</,OE=/^\s*#endinput\s*/,GE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,AF=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,eF=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Ko(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var rF=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,tF=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(tF||{}),UE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,HE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,JE=/^(.*)(^|\s*)onUplinkEvent/,KE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,zE=/^\s*#callback\s+\w+\s*\(/;function zo(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let a=x[t];if(e){if(a==="\\"){t++;continue}a===r&&(e=!1);continue}if(a==='"'||a==="'"){e=!0,r=a;continue}a==="("?A++:a===")"&&A--}return A}function nF(x){return Xo.test(x)||Zo.test(x)||Yo.test(x)||Qo.test(x)||xF.test(x)||AF.test(x)||eF.test(x)||rF.test(x)}function VE(x,A,e){if(!(KE.test(e)||zE.test(e)))return null;let t=zo(e);if(t<=0)return null;let a=t,i=[x[A]],l=[e],c=A+1,u=100;for(;a>0&&c<x.length&&c-A<u;){let g=x[c],q=g.split("//",1)[0];i.push(g),l.push(q),a+=zo(q),c++}if(i.length<=1||a>0)return null;let b=i.map((g,q)=>q===0?g:g.trim()).join(" "),m=l.map((g,q)=>q===0?g:g.trim()).join(" ");return nF(m)?{joinedOriginal:b,joinedStripped:m,extraLineCount:i.length-1}:null}var iF=String.raw`[A-Za-z_@][A-Za-z0-9_@]*`,sF=String.raw`"((?:[^"\\]|\\.)*)"`,WE=new RegExp(String.raw`^(\s*)IT\s*\(\s*${sF}\s*\)(.*)$`),XE=new RegExp(String.raw`^\s*IT\s*\(\s*${iF}\s*,\s*${sF}\s*\)`),YE=/^(\s*)STEP\s*\(\s*(\d+)\s*\)(.*)$/,QE=new RegExp(String.raw`^\s*STEP\s*\(\s*${iF}\s*,(\s*)\d+\s*\)`),Zi=class{slugs=new Set;stepsOfCurrent=new Set;currentSlug=null;currentIsMacroForm=!1;rewrite(A){return this.rewriteIt(A)??this.rewriteStep(A)}rewriteIt(A){let e=WE.exec(A);if(!e)return this.checkItTwoArg(A);let[,r,t,a]=e,i=hn(t,this.slugs);return i?(this.slugs.add(i),this.currentSlug=i,this.currentIsMacroForm=!1,this.stepsOfCurrent.clear(),{line:`${Vo(r,gn(i),a)} ${yn(i,t)}`,diagnostics:[]}):{line:null,diagnostics:[{level:"error",message:`IT("${t}") has no name to generate: a title needs at least one letter, digit or underscore, or use the IT(id, "title") form.`}]}}checkItTwoArg(A){let e=XE.exec(A);return!e||(this.currentSlug=null,this.currentIsMacroForm=!0,this.stepsOfCurrent.clear(),!e[1].includes(","))?null:{line:null,diagnostics:[{level:"warning",message:`A comma in an IT() title splits the macro argument - write it as IT("${e[1]}") without an id, or drop the comma.`}]}}rewriteStep(A){let e=YE.exec(A);if(!e)return this.checkStepTwoArg(A);let[,r,t,a]=e,i=Number(t),l=this.stepError(i);return l?{line:null,diagnostics:[{level:"error",message:l}]}:(this.stepsOfCurrent.add(i),{line:Vo(r,kn(this.currentSlug,i),a),diagnostics:[]})}stepError(A){return A<2?`STEP(${A}) is not a continuation step - step 1 is the IT() body itself, steps start at 2.`:this.currentIsMacroForm?`STEP(${A}) continues an IT("title"); an IT(id, "title") is continued by STEP(id,${A}).`:this.currentSlug?this.stepsOfCurrent.has(A)?`STEP(${A}) is already declared for this IT().`:null:`STEP(${A}) has no IT() before it - a step continues the most recent IT("title").`}checkStepTwoArg(A){let e=QE.exec(A);return!e||!e[1]?null:{line:null,diagnostics:[{level:"warning",message:"Remove the space after the comma in STEP(id, n) - pawncc pastes it into the public name."}]}}};function ZE(x){let A="";for(let e=0;e<x.length;e++){let r=x[e];if(A)r==="\\"?e++:r===A&&(A="");else if(r==='"'||r==="'")A=r;else if(r==="/"&&x[e+1]==="/")return x.substring(0,e)}return x}function Vo(x,A,e){let r=e.trim(),t=r?" "+r:"";return`${x}public ${A}()${t}`}var lt=class{pragmaDynamic=null;dloFileSequencer=new ft;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,a){this.dloFileSequencer.workspacePath=A;let i=[],l=t.path,c=!1,u=Wo.Utils.basename(t);if(l.includes(s0.filePaths.studio.auto.dlo.path)){let $=u.substring(0,u.length-8);!["app","main"].includes($)&&u.endsWith("-dde.inc")&&(c=T0.generateHashForLibraryName($))}else if(l.includes(s0.filePaths.studio.libdeps)){let $=l.split("libdeps/")[1],[T]=$.split("/");["dlo-core"].includes(T)||(c=T0.generateHashForLibraryName(T))}else X.isLibrary(r)&&(u.endsWith(".dlo")||l.includes("/dlo/examples/")||l.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",u):c=T0.generateHashForLibraryName(r.name));if(l.endsWith(".auto/default.inc"))return{data:a.join(`
2753
- `),diagnostics:i};let b=[],m=vr(l)?new Zi:null,g=this.dloFileSequencer.getSequenceForFile(l);b.push(`stock static __file{} = "${g}";`),b.push(`stock static __refid{} = "${g}";`),b.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),b.push("#line 0");let _=0;for(let $=0;$<a.length;$++){let T=a[$],M=T.split("//",1)[0],N=null,z=0;if(!nF(M)){let R=VE(a,$,M);R&&(T=R.joinedOriginal,M=R.joinedStripped,z=R.extraLineCount)}let F0=m?.rewrite(ZE(T))??null;for(let R of F0?.diagnostics??[])i.push({file:t,level:R.level,line:$,message:R.message});if(F0?.line!==null&&F0?.line!==void 0)T=F0.line;else if(N=PE.exec(M))T="// "+T,i.push({file:t,level:"error",line:$,message:"#options is not supported here. Use the DLO settings instead."});else if(N=$E.exec(M))T="// "+T,i.push({file:t,level:"error",line:$,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=GE.exec(M)){let R=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(R)||R<64?i.push({file:t,level:"error",line:$,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||R>this.pragmaDynamic)&&(this.pragmaDynamic=R)}else if(N=NE.exec(M))T=T.replace("#ifdef ","#if defined ");else if(N=IE.exec(M))T=T.replace("#ifndef ","#if !defined ");else if(N=ME.exec(M))T=T.replace("#elseifdef ","#elseif defined ");else if(N=RE.exec(M))T=T.replace("#elseifndef ","#elseif !defined ");else if(N=Xo.exec(M)){let[,R,k,O,W]=N;T=`${R}#define ${k} _catch_funcidx( "___${k}")
2752
+ Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var wi=require("yaml");var ur=require("yaml");var mn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(mn||={});var Ax;(H=>{let x;(p0=>(p0.state="state",p0.result="result",p0.aloha="aloha",p0.volatile="volatile",p0.setting="setting",p0.command="command",p0.storage="storage",p0.relations="relations"))(x=H.DDEContainerName||={});let A;(C0=>(C0.configA="configA",C0.configB="configB",C0.configC="configC",C0.config0="config0",C0.config1="config1",C0.config2="config2",C0.config3="config3",C0.config4="config4",C0.config5="config5",C0.config6="config6",C0.config7="config7",C0.config8="config8",C0.config9="config9",C0.histdata0="histdata0",C0.histdata1="histdata1",C0.histdata2="histdata2",C0.histdata3="histdata3",C0.histdata4="histdata4",C0.histdata5="histdata5",C0.histdata6="histdata6",C0.histdata7="histdata7",C0.histdata8="histdata8",C0.histdata9="histdata9",C0.aloha="aloha",C0.alerts="alerts",C0.applog="applog"))(A=H.ContainerName||={});let e;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(e=H.ContainerType||={});let r;(I0=>(I0.up="up",I0.down="down",I0.upPlus="up+",I0.downPlus="down+",I0.none="none",I0.backendOnly="backend-only",I0.deviceOnly="device-only",I0.both="both",I0.bothPlus="both+",I0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(W,n0){return W==="cx"&&!["backend-only"].includes(n0)?"DDE_CID_CONFIG":W==="hx"?"DDE_CID_HISTDATA":W==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let s=["up","up+","down","down+","both","none","both+","backend-only","device-only"],i=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:s},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:s},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:s},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:s},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:s},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:s},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:s},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:s},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:s},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:s},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:i},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:i},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:i},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:i},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:i},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:i},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:i},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:i},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:i},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:i},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let g=["astring","nstring","cstring","wstring","ustring"],q=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:g,unit:g,chartMinimum:q,chartMaximum:q,scale:q,offset:q,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:q,chartAlarmHigh:q,chartWarningLow:q,chartWarningHigh:q,chartHysteresis:q,chartTriggerThreshold:q,chartTriggerRelation:q,chartSetPoint:q};function $(W,n0,r0){let x0=n0[W];if(x0!==void 0)if(H.regexRelation.exec(`${x0}`)){let f0=W==="chartSetPoint",[U,...v0]=x0.split("."),[,c0]=U.split("@"),p0=Object.values(r0.containers).find(dx=>dx.title===c0),b0=v0.join("."),I0=f0?";":"%",L0=(f0?"":"%")+(p0?.name||c0)+I0;if(L0=L0+`${b0}`,f0){let dx=r0.setPointList[n0.name];L0=L0+`;actual_output_value_${dx}`}return L0}else return x0}H.parseXMLValueWithRelation=$;function T(W){let{bitmask:n0}=W;if(!n0)return;let r0="$",x0=n0.replaceAll(" ","");if(n0.startsWith("0x"))r0+=x0.substring(2);else if(x0.startsWith("0b")){let f0=x0.substring(2).replaceAll(" ","");r0+=parseInt(f0,2).toString(16).toUpperCase()}return r0}H.parseXMLBitmask=T;function M(W){return W.type==="binary"?W.defaultValue.substring(2):W.defaultValue==="NaN"?"NAN":W.defaultValue}H.parseXMLDefaultValue=M,H.TDEF_NUMBER={xmlOut(W,n0,r0){W.decpl=$("decimalPlaces",n0,r0),W.decpl===void 0&&(W.decpl=0),W.vscale=$("scale",n0,r0),W.vofs=$("offset",n0,r0),W.min=$("chartMinimum",n0,r0),W.max=$("chartMaximum",n0,r0)}};let z={isBlob:1,xmlOut(W,n0){W.max=n0.byteSize}},F0={xmlOut(W){W.decpl=-1,W.param0="local",W.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...F0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...F0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...z,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...z,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...z,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let O=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function V(W){let n0=W.toLowerCase();return O.includes(n0)||/^field\d+$/.test(n0)||/^ch\d+$/.test(n0)}H.checkForReservedFieldName=V;function Y(W){return!!W.fields.find(n0=>n0.library===null&&n0.type!=="shadow")}H.hasContainerAppFields=Y})(Ax||={});var Ft={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},Yi={max_size:1e5,max_fields:1e3},pe={max_size:4e3,max_fields:1e3},xe={max_size:1024,max_fields:1e3},vt={configA:Yi,configB:Yi,configC:Yi,config0:pe,config1:pe,config2:pe,config3:pe,config4:pe,config5:pe,config6:pe,config7:pe,config8:pe,config9:pe,histdata0:xe,histdata1:xe,histdata2:xe,histdata3:xe,histdata4:xe,histdata5:xe,histdata6:xe,histdata7:xe,histdata8:xe,histdata9:xe,aloha:{...xe,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Qi={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:vt,auto_inc:{...Ft,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var Zi=require("vscode-uri");var ft=class{dloFileMap={};rootUri=Zi.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=T0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Zi.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var eF=require("vscode-uri");function xs(x){return x.replace(/\\/g,"/").split("/").pop()??""}function vr(x){return/\.spec\.dlo$/i.test(xs(x))}function $t(x,A){let e=xs(x);if(!e)return!1;if(vr(e))return!0;let r=A?.dlo?.mainFile;return r?xs(r)===e:e==="main.dlo"}var LE=/^\s*#define\s+TEST_OWN_MAIN\b/m;function OE(x){return LE.test(x)}function jn(x,A){if(!vr(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&OE(A)&&e.push("TEST_OWN_MAIN=1"),e}var Nt="__it_";var gn=31-Nt.length-4;function Ko(x){return x.replace(/^_+/,"").replace(/_+$/,"")}function hn(x,A=gn){let e=Ko(x.toLowerCase().replace(/[^a-zA-Z0-9_]+/g,"_"));return Ko(e.substring(0,Math.max(0,A)))}function kn(x,A){let e=hn(x);if(!e||!A.has(e))return e;for(let r=2;;r++){let t=`_${r}`,s=`${hn(x,gn-t.length)}${t}`;if(!A.has(s))return s}}function yn(x){return`${Nt}${x}`}function It(x,A){return`${Nt}${x}__${A}`}function _n(x,A){return`// @it ${x} "${A}"`}var zo=/\/\/\s*@it\s+([A-Za-z0-9_]+)\s+"((?:[^"\\]|\\.)*)"/;var wn=class{quote="";step(A,e){let r=A[e];return this.quote?r==="\\"&&e+1<A.length?{insideString:!0,nextIndex:e+2}:(this.quote=r===this.quote?"":this.quote,{insideString:!0,nextIndex:e+1}):r==='"'||r==="'"?(this.quote=r,{insideString:!0,nextIndex:e+1}):{insideString:!1,nextIndex:e+1}}};function Vo(x,A){let e=new wn,r=0;for(let t=A;t<x.length;){let{insideString:s,nextIndex:i}=e.step(x,t);if(!s){if(x[t]==="(")r++;else if(x[t]===")"&&--r===0)return t}t=i}return-1}function Sn(x){let A=new wn,e=[],r=0,t="";for(let s=0;s<x.length;){let{insideString:i,nextIndex:v}=A.step(x,s),c=x[s];!i&&c===","&&r===0?(e.push(t),t=""):(!i&&(c==="("||c==="{")?r++:!i&&(c===")"||c==="}")&&r--,t+=x.slice(s,v)),s=v}return e.push(t),e}var UE=/^[A-Za-z_@][A-Za-z0-9_@]*$/;function Wo(x){return UE.test(x.trim())}function Xo(x){return/^\{[\s\S]*\}$/.test(x.trim())}var HE=/^(?:0[xX][0-9a-fA-F]+|\d+|xx)$/;function Yo(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty byte list {} is not valid"};let e=[];for(let r of Sn(A)){let t=r.trim();if(!HE.test(t))return{error:`"${t}" is not a byte literal (decimal, 0x hex, or xx)`};if(t==="xx"){e.push("xx");continue}let s=t.startsWith("0x")||t.startsWith("0X")?parseInt(t,16):parseInt(t,10);if(s>255)return{error:`${t} is out of range 0..255 for a byte list`};e.push(s.toString(16).toUpperCase().padStart(2,"0"))}return{packed:e.join("")}}function Qo(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty list {} is not valid"};let e=[];for(let r of Sn(A)){let t=r.trim();if(!/^-?(?:0[xX][0-9a-fA-F]+|\d+)$/.test(t))return{error:`"${t}" is not an integer literal`};let s=t.startsWith("-"),i=s?t.substring(1):t,v=(i.startsWith("0x")||i.startsWith("0X")?parseInt(i,16):parseInt(i,10))*(s?-1:1);e.push(v.toString(10))}return{packed:e.join("|")}}var JE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,KE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,zE=/^(?:\s*#ifdef\s+)(.*)$/,VE=/^(?:\s*#ifndef\s+)(.*)$/,WE=/^(?:\s*#elseifdef\s+)(.*)$/,XE=/^(?:\s*#elseifndef\s+)(.*)$/,rF=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,tF=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,nF=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,iF=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,sF=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,YE=/^\s*#include\s*</,QE=/^\s*#endinput\s*/,ZE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,aF=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,oF=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Zo(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var FF=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,vF=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(vF||{}),xB=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,AB=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,eB=/^(.*)(^|\s*)onUplinkEvent/,rB=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,tB=/^\s*#callback\s+\w+\s*\(/;function xF(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function fF(x){return rF.test(x)||iF.test(x)||tF.test(x)||nF.test(x)||sF.test(x)||aF.test(x)||oF.test(x)||FF.test(x)}function nB(x,A,e){if(!(rB.test(e)||tB.test(e)))return null;let t=xF(e);if(t<=0)return null;let s=t,i=[x[A]],v=[e],c=A+1,u=100;for(;s>0&&c<x.length&&c-A<u;){let g=x[c],q=g.split("//",1)[0];i.push(g),v.push(q),s+=xF(q),c++}if(i.length<=1||s>0)return null;let b=i.map((g,q)=>q===0?g:g.trim()).join(" "),m=v.map((g,q)=>q===0?g:g.trim()).join(" ");return fF(m)?{joinedOriginal:b,joinedStripped:m,extraLineCount:i.length-1}:null}var lF=String.raw`[A-Za-z_@][A-Za-z0-9_@]*`,cF=String.raw`"((?:[^"\\]|\\.)*)"`,iB=new RegExp(String.raw`^(\s*)IT\s*\(\s*${cF}\s*\)(.*)$`),sB=new RegExp(String.raw`^\s*IT\s*\(\s*${lF}\s*,\s*${cF}\s*\)`),aB=/^(\s*)STEP\s*\(\s*(\d+)\s*\)(.*)$/,oB=new RegExp(String.raw`^\s*STEP\s*\(\s*${lF}\s*,(\s*)\d+\s*\)`),FB=/^(\s*)AFTER_LOOP\b(.*)$/,vB=/\b(?:RUN_LOOP|MOCK_DELIVER|MOCK_DELIVER_SEC|MOCK_DELIVER_IMMEDIATES)\s*\(/,fB=/^\s*DESCRIBE\s*\(/,lB=/^(\s*)TEST_SETUP\s*\(\s*\)(.*)$/,cB=/^(\s*)TEST_TEARDOWN\s*\(\s*\)(.*)$/,EB={MOCK_RETURN:{nativeNameArgs:[1]},MOCK_RETURN_SEQ:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_RETURN_SEQ_STRICT:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_BYTES:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_BYTES_RET:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_SEQ:{nativeNameArgs:[1]},MOCK_SEQ_STRICT:{nativeNameArgs:[1]},MOCK_REG:{nativeNameArgs:[1],listArgs:{4:"bytes"}},MOCK_REG_MASKED:{nativeNameArgs:[1],listArgs:{5:"bytes"}},MOCK_REG_RW:{nativeNameArgs:[1]},MOCK_RESET:{nativeNameArgs:[1]},EXPECT_CALLED:{nativeNameArgs:[1]},EXPECT_ARG_INT:{nativeNameArgs:[1]},EXPECT_ARG_BYTES:{nativeNameArgs:[1],listArgs:{4:"bytes"}},EXPECT_REG:{nativeNameArgs:[1]},EXPECT_REG_WRITES:{nativeNameArgs:[1]},EXPECT_CALL_ORDER:{nativeNameArgs:[1,3]},EXPECT_RECORD_BYTES:{listArgs:{2:"bytes"}}},As=class{slugs=new Set;stepsOfCurrent=new Set;currentSlug=null;currentIsMacroForm=!1;sawLoopAdvance=!1;describeCount=0;sawFileWideSetup=!1;sawFileWideTeardown=!1;setupSeenForGroup=new Set;teardownSeenForGroup=new Set;rewrite(A){let e=BB(A),r=A.substring(e.length);return vB.test(e)&&(this.sawLoopAdvance=!0),fB.test(e)&&this.describeCount++,this.rewriteIt(e,r)??this.rewriteAfterLoop(e,r)??this.rewriteStep(e,r)??this.rewriteTestSetup(e,r)??this.rewriteTestTeardown(e,r)??this.rewriteMacroArgs(e,r)}finishDeclaration(A,e,r,t,s,i){let{text:v,diagnostics:c}=this.applyMacroArgRewrite(r),u=t?`${AF(A,e,v)} ${t}`:AF(A,e,v);return{line:s?`${u} ${s}`:u,diagnostics:[...i,...c]}}rewriteIt(A,e){let r=iB.exec(A);if(!r)return this.checkItTwoArg(A);let[,t,s,i]=r,v=kn(s,this.slugs);return v?(this.slugs.add(v),this.currentSlug=v,this.currentIsMacroForm=!1,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,this.finishDeclaration(t,yn(v),i,_n(v,s),e,[])):{line:null,diagnostics:[{level:"error",message:`IT("${s}") has no name to generate: a title needs at least one letter, digit or underscore, or use the IT(id, "title") form.`}]}}checkItTwoArg(A){let e=sB.exec(A);return!e||(this.currentSlug=null,this.currentIsMacroForm=!0,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,!e[1].includes(","))?null:{line:null,diagnostics:[{level:"warning",message:`A comma in an IT() title splits the macro argument - write it as IT("${e[1]}") without an id, or drop the comma.`}]}}rewriteStep(A,e){let r=aB.exec(A);if(!r)return this.checkStepTwoArg(A);let[,t,s,i]=r,v=Number(s),c=this.stepError(v);return c?{line:null,diagnostics:[{level:"error",message:c}]}:(this.stepsOfCurrent.add(v),this.sawLoopAdvance=!1,this.finishDeclaration(t,It(this.currentSlug,v),i,null,e,[]))}rewriteAfterLoop(A,e){let r=FB.exec(A);if(!r)return null;let[,t,s]=r;if(this.currentIsMacroForm)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP continues an IT("title"); an IT(id, "title") is continued by STEP(id,n).'}]};if(!this.currentSlug)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP has no IT() before it - it continues the most recent IT("title") after the firmware main loop ran.'}]};let i=this.sawLoopAdvance,v=this.stepsOfCurrent.size?Math.max(...this.stepsOfCurrent)+1:2;this.stepsOfCurrent.add(v),this.sawLoopAdvance=!1;let c=[];return i||c.push({level:"warning",message:"AFTER_LOOP splits the test but the block before it never let the main loop run - add RUN_LOOP(ms) at its end, or merge the blocks"}),this.finishDeclaration(t,It(this.currentSlug,v),s,null,e,c)}rewriteTestSetup(A,e){let r=lB.exec(A);if(!r)return null;let[,t,s]=r;if(this.describeCount===0)return this.sawFileWideSetup?{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this spec."}]}:(this.sawFileWideSetup=!0,null);let i=this.describeCount;if(this.setupSeenForGroup.has(i))return{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this DESCRIBE group."}]};this.setupSeenForGroup.add(i);let v=`__tsetup_${i}`;return this.finishDeclaration(t,v,s,`// @setup ${i}`,e,[])}rewriteTestTeardown(A,e){let r=cB.exec(A);if(!r)return null;let[,t,s]=r;if(this.describeCount===0)return this.sawFileWideTeardown?{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this spec."}]}:(this.sawFileWideTeardown=!0,null);let i=this.describeCount;if(this.teardownSeenForGroup.has(i))return{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this DESCRIBE group."}]};this.teardownSeenForGroup.add(i);let v=`__tteardown_${i}`;return this.finishDeclaration(t,v,s,`// @teardown ${i}`,e,[])}rewriteMacroArgs(A,e){let{text:r,diagnostics:t,changed:s}=this.applyMacroArgRewrite(A);return s?{line:r+e,diagnostics:t}:t.length?{line:null,diagnostics:t}:null}applyMacroArgRewrite(A){let e=A,r=!1,t=[];for(let[s,i]of Object.entries(EB))e=this.rewriteMacroCallsOf(e,s,i,t,()=>r=!0);return{text:e,diagnostics:t,changed:r}}rewriteMacroCallsOf(A,e,r,t,s){let i=new RegExp(String.raw`\b${e}\b\s*\(`,"g"),v="",c=0,u=null;for(;u=i.exec(A);){let b=u.index+u[0].length-1,m=Vo(A,b);if(m<0)continue;let g=dB(A.slice(b+1,m),e,r,t);g&&(v+=A.slice(c,b+1)+g+")",c=m+1,s()),i.lastIndex=m+1}return v+=A.slice(c),v}stepError(A){return A<2?`STEP(${A}) is not a continuation step - step 1 is the IT() body itself, steps start at 2.`:this.currentIsMacroForm?`STEP(${A}) continues an IT("title"); an IT(id, "title") is continued by STEP(id,${A}).`:this.currentSlug?this.stepsOfCurrent.has(A)?`STEP(${A}) is already declared for this IT().`:null:`STEP(${A}) has no IT() before it - a step continues the most recent IT("title").`}checkStepTwoArg(A){let e=oB.exec(A);return!e||!e[1]?null:{line:null,diagnostics:[{level:"warning",message:"Remove the space after the comma in STEP(id, n) - pawncc pastes it into the public name."}]}}};function BB(x){let A="";for(let e=0;e<x.length;e++){let r=x[e];if(A)r==="\\"?e++:r===A&&(A="");else if(r==='"'||r==="'")A=r;else if(r==="/"&&x[e+1]==="/")return x.substring(0,e)}return x}function CB(x,A,e,r,t){let s=x.match(/^\s*/)?.[0]??"",i=x.trim();if(r.nativeNameArgs?.includes(A)&&Wo(i))return{text:`${s}"${i}"`,changed:!0};let v=r.listArgs?.[A];if(v&&Xo(i)){let c=v==="bytes"?Yo(i):Qo(i);return c.error?(t.push({level:"error",message:`${e}(): argument ${A} - ${c.error}`}),{text:x,changed:!1}):{text:`${s}"${c.packed}"`,changed:!0}}return{text:x,changed:!1}}function dB(x,A,e,r){let t=x.length?Sn(x):[],s=!1,i=t.map((v,c)=>{let u=CB(v,c+1,A,e,r);return s=s||u.changed,u.text});return s?i.join(","):null}function AF(x,A,e){let r=e.trim(),t=r?" "+r:"";return`${x}public ${A}()${t}`}var lt=class{pragmaDynamic=null;dloFileSequencer=new ft;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let i=[],v=t.path,c=!1,u=eF.Utils.basename(t);if(v.includes(s0.filePaths.studio.auto.dlo.path)){let $=u.substring(0,u.length-8);!["app","main"].includes($)&&u.endsWith("-dde.inc")&&(c=T0.generateHashForLibraryName($))}else if(v.includes(s0.filePaths.studio.libdeps)){let $=v.split("libdeps/")[1],[T]=$.split("/");["dlo-core"].includes(T)||(c=T0.generateHashForLibraryName(T))}else X.isLibrary(r)&&(u.endsWith(".dlo")||v.includes("/dlo/examples/")||v.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",u):c=T0.generateHashForLibraryName(r.name));if(v.endsWith(".auto/default.inc"))return{data:s.join(`
2753
+ `),diagnostics:i};let b=[],m=vr(v)?new As:null,g=this.dloFileSequencer.getSequenceForFile(v);b.push(`stock static __file{} = "${g}";`),b.push(`stock static __refid{} = "${g}";`),b.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),b.push("#line 0");let _=0;for(let $=0;$<s.length;$++){let T=s[$],M=T.split("//",1)[0],N=null,z=0;if(!fF(M)){let L=nB(s,$,M);L&&(T=L.joinedOriginal,M=L.joinedStripped,z=L.extraLineCount)}let F0=m?.rewrite(T)??null;for(let L of F0?.diagnostics??[])i.push({file:t,level:L.level,line:$,message:L.message});if(F0?.line!==null&&F0?.line!==void 0)T=F0.line;else if(N=JE.exec(M))T="// "+T,i.push({file:t,level:"error",line:$,message:"#options is not supported here. Use the DLO settings instead."});else if(N=KE.exec(M))T="// "+T,i.push({file:t,level:"error",line:$,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=ZE.exec(M)){let L=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(L)||L<64?i.push({file:t,level:"error",line:$,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||L>this.pragmaDynamic)&&(this.pragmaDynamic=L)}else if(N=zE.exec(M))T=T.replace("#ifdef ","#if defined ");else if(N=VE.exec(M))T=T.replace("#ifndef ","#if !defined ");else if(N=WE.exec(M))T=T.replace("#elseifdef ","#elseif defined ");else if(N=XE.exec(M))T=T.replace("#elseifndef ","#elseif !defined ");else if(N=rF.exec(M)){let[,L,k,O,V]=N;T=`${L}#define ${k} _catch_funcidx( "___${k}")
2754
2754
  forward ___${k}( ${O});
2755
2755
  #line
2756
2756
  ${_}
2757
- public ___${k}( ${O})${W}`}else if(N=Zo.exec(M)){let[,R,k]=N;T=`${R}${k}{_log_string="";_assert(__refid,__line);}`}else if(N=Yo.exec(M)){let[,R,k,O,W]=N;T=`${R}${k}{ if (!(${O})) { sprintf(_log_string,_,${W.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=Qo.exec(M)){let[,R,k,O]=N;T=`${R}${k}{ if (!(${O})) { _log_string="";_assert(__refid,__line); }}`}else if(N=xF.exec(M)){let[,R,k,O]=N;T=`${R}${k}_catch(__refid,__line,${O});`}else if(N=AF.exec(M)){let[,R,k,O,W,Y]=N,{priority:H,code:V}=Ko(W,O.substring(1));H!==null&&(T=`${R}${k}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${Y});DDE_applog_write(${H}, ${V}, params_str, __applog_src_id);}`)}else if(N=eF.exec(M)){let[,R,k,O,W]=N,{priority:Y,code:H}=Ko(W,O.substring(1));Y!==null&&(T=`${R}${k}DDE_applog_write(${Y}, ${H}, "", __applog_src_id);`)}else if(N=rF.exec(M)){let[,R,k,O,W]=N,Y=O.substring(1),H=tF[Y];T=`${R}${k}{ if(_log_level <= ${H}){ sprintf(_log_string,_,${W.replace(/%%/g,"\xFF")}); _log${O}(__refid,__line); }}`}else(N=LE.exec(M))&&!l.includes(s0.filePaths.studio.auto.path)&&!Pt(l,r)?(l.includes(s0.filePaths.studio.libdeps)||i.push({file:t,level:"warning",line:$,message:"Libraries are included automatically - remove this #include line"}),T="// Libraries are included automatically! - "+M):(N=OE.exec(M))&&(i.push({file:t,level:"error",line:$,message:"#endinput is not supported - use #if/#endif instead"}),T=M);c&&!r.legacyProject&&(UE.exec(M)&&(T=T.replaceAll("DDE_",`_${c}`)),HE.exec(M)&&(T=T.replace("onUplink",`_${c}`)),JE.exec(M)&&(T=T.replace("onUplink",`_${c}Uplink`))),b.push(T),_++;for(let R=0;R<z;R++)b.push(""),_++,$++}if(!Pt(l,r)){let $=u.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),T=`_inc_${$}`.substring(0,31),M=`_inc_${$}_inc`.substring(0,31);b.push(`#if defined ${T}`),b.push(`#undef ${T}`),b.push("#endif"),b.push(`#if defined ${M}`),b.push(`#undef ${M}`),b.push("#endif")}return{data:b.join(`
2758
- `),diagnostics:i}}};var De=require("vscode-uri");var U0=Y0(require("fs")),mx=require("vscode-uri");var vF=Y0(require("iconv-lite")),xB=T0.convertBlobToStringArray,fF=16384,lF=511,xs=fF|lF,AB=32768,eB=438,aF=AB|eB,rB=new lt,ct={};function wn(){let x=[];for(let A of Object.keys(ct))x.push(...ct[A].diagnostics);return x}var _n=!!process.env.DLO_PROFILE,Ie={precompileCount:0,cacheHits:0,precompileMs:0};function cF(x){_n&&(x.log(`[DLO_PROFILE] precompile: ${Ie.precompileCount} runs, ${Ie.cacheHits} cache hits, ${Ie.precompileMs.toFixed(1)}ms`),Ie.precompileCount=0,Ie.cacheHits=0,Ie.precompileMs=0)}var As=(x,A,e,r)=>{let t={getattr(i){let l=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)),c=l.fsPath;if(!U0.existsSync(c))throw new x.ErrnoError(44);let u=FF(A,r,e,l),b=U0.statSync(c),m=u?.length||b.size;return{mode:b.isDirectory()?xs:aF,size:m,atime:b.atime,mtime:b.mtime,ctime:b.ctime}},setattr(i,l){let c=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)).fsPath;if(!U0.existsSync(c))throw new x.ErrnoError(44);if(typeof l.size=="number"&&U0.truncateSync(c,l.size),typeof l.mode=="number"&&U0.chmodSync(c,l.mode),l.atime||l.mtime){let u=U0.statSync(c);U0.utimesSync(c,l.atime??u.atime,l.mtime??u.mtime)}},lookup(i,l){let u=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),l).fsPath;if(!U0.existsSync(u))throw new x.ErrnoError(44);let b=U0.statSync(u),m=x.createNode(i,l,b.isDirectory()?xs:aF,0);return m.node_ops=i.node_ops,m.stream_ops=i.stream_ops,m},readdir(i){let l=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)).fsPath;return[".","..",...U0.readdirSync(l)]},mknod(i,l,c,u){let b=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),l).fsPath;U0.writeFileSync(b,"");let m=x.createNode(i,l,c,u);return m.node_ops=i.node_ops,m.stream_ops=i.stream_ops,m},unlink(i,l){let c=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),l).fsPath;U0.unlinkSync(c)},mkdir(i,l,c){let u=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),l).fsPath;U0.mkdirSync(u,{mode:c});let b=x.createNode(i,l,c|xs,0);return b.node_ops=i.node_ops,b.stream_ops=i.stream_ops,b},rmdir(i,l){let c=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),l).fsPath;U0.rmdirSync(c)},rename(i,l,c){let u=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)).fsPath,b=mx.Utils.joinPath(mx.URI.parse(l.mount.opts.root),x.getPath(l),c).fsPath;U0.renameSync(u,b)}},a={open(i){let l=mx.Utils.joinPath(mx.URI.parse(i.node.mount.opts.root),x.getPath(i.node));i.modifiedContent=FF(A,r,e,l),i.modifiedContent||(i.nfd=U0.openSync(l.fsPath,oF(i.flags)))},close(i){i.nfd&&U0.closeSync(i.nfd)},read(i,l,c,u,b){if(!i.modifiedContent)return U0.readSync(i.nfd,l,c,u,b);let m=i.modifiedContent;if(b>=m.length)return 0;let g=m.length-b,q=Math.min(u,g);return tB(m,l,c,b,b+q),q},write(i,l,c,u,b){return U0.writeSync(i.nfd,l,c,u,b)},flagsToMode:oF,llseek(i,l,c){let u=l;if(c===1)u+=i.position;else if(c===2){let b=U0.fstatSync(i.nfd);u+=b.size}if(u<0)throw new x.ErrnoError(28);return i.position=u,u}};return{mount(){let i=Me(A),l=x.createNode(null,i,fF|lF,0);return l.node_ops=t,l.stream_ops=a,l},node_ops:t,stream_ops:a}};function oF(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function tB(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let a=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,a,e):A.set(a,e)}}function FF(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let a=nB(t);if(!a){delete ct[t];return}let i=ct[t];if(i&&i.mtimeMs===a.mtimeMs&&i.size===a.size)return _n&&Ie.cacheHits++,i.buffer;let l=_n?performance.now():0,c=iB(x,A,e,r);return _n&&(Ie.precompileCount++,Ie.precompileMs+=performance.now()-l),ct[t]={buffer:c.buffer,mtimeMs:a.mtimeMs,size:a.size,diagnostics:c.diagnostics},ct[t].buffer}function nB(x){try{return U0.statSync(x)}catch{return null}}function iB(x,A,e,r){let t=U0.readFileSync(r.fsPath),a=xB(t),i=rB.preCompileDloFile(x,A,e,r,a);return{buffer:vF.encode(i.data,"cp1252"),diagnostics:i.diagnostics}}function Me(x){return x.fsPath.replace(/\\/g,"/")}function Nt(x,A){let e=Me(x);return Me(A).replace(e,"")}var DF=uF(),Mt=DF.createPawnCC,pF=DF.createPawnDbg;var Et=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await Mt({noExitRuntime:A,print:i=>{let l=ts(this.cwd,i);this.logger.log(l?l.message:i),this.stdout.push(i)},printErr:i=>{let l=ts(this.cwd,i);i.includes(": warning")?this.logger.warn(l?l.message:i):this.logger.error(l?l.message:i),this.stderr.push(i),this.stdout.push(i)}});let e=Me(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,a=await X.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=As(t,this.cwd,a,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(Me(this.cwd))}async compile(A,e){let r=await X.read(A,e);if(!await X.isApmPartEnabled(A,e,_0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(De.Utils.joinPath(A,"dist/dlo"));let t=De.Utils.joinPath(A,r.dlo?.mainFile||s0.filePaths.dlo.mainDLO),a=[],i=De.Utils.joinPath(A,s0.filePaths.studio.auto.dlo.cfg),l=Nt(A,i);if(a.push(`-T.${l}`),vr(t.path)){let u="";try{u=T0.convertBlobToString(await e.readFile(t))}catch(b){this.logger.error(b)}a.push(...bn(t.path,u))}let c=0;try{let u=`.${Nt(A,t)}`;c=await this.dloCC.callMain([u,...a])}catch(u){this.logger.error(u)}return{code:c,stdout:this.stdout,stderr:this.stderr,diagnostics:[...wn(),...ns(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(m=>{let g=m.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(g)?`${g}.${m.substring(2)}`:m}),t=!!process.env.DLO_PROFILE,a=t?performance.now():0,{compiler:i,print:l}=await this.getSymbolCompiler(),c=t?performance.now()-a:0,u=t?performance.now():0,b=0;try{b=await i.callMain(["."+A,...r,"-R"])||0}catch(m){if(m.stack?.startsWith("RuntimeError"))return null;throw m}finally{if(t){let m=performance.now()-u;this.logger.log(`[DLO_PROFILE] instantiate: ${c.toFixed(1)}ms, callMain: ${m.toFixed(1)}ms`),cF(this.logger)}}return{exitCode:b,lines:[...l.stdout,...l.stderr]}}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await Mt({noExitRuntime:!1,print:l=>{A.stdout.push(l)},printErr:l=>{A.stderr.push(l)}}),r=Me(this.cwd),[t]=r.split("/"),a=e.FS,i=await X.read(this.cwd,this.fs);return a.filesystems.NODEFS_TS=As(a,this.cwd,i,this.logger),a.mkdir(t),a.mount(a.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function ns(x,A,e){let r=[],t=A.filter(a=>!!a.trim());for(let a of t){if((a.includes("Assertion failed:")||a.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:a});continue}let i=ts(x,a);i&&r.push({file:De.URI.parse(`file:///${i?.posixPath}`),level:i.level,line:Number(i.lineNumber)-1,message:i.msg})}return r}function ts(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),a=A.substring(e+3,r).trim(),i=A.substring(r+2).trim();if(!t||!a||!i)return null;let[l,c]=t.split(/[()(-)]/),u=a.split(" "),b=u[u.length-2],g=De.Utils.joinPath(x,l).fsPath.replace(/\\/g,"/");g.startsWith("/")&&(g=g.substring(1));let q=A.replace(l,g);return{level:b,msg:i,posixPath:g,lineNumber:c,message:q}}async function bF(x,A,e){let r=["-M","-v2"],t=De.Utils.joinPath(x,s0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${Nt(x,t)}`);let a=await px.getApmPartDependencies(x,A,_0.Part.dlo);for(let l of a){let c=De.Utils.dirname(l.path);r.push(`-i.${Nt(x,c)}`)}let i=e.dlo;return i&&r.push(...i.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:De.Utils.joinPath(x,s0.filePaths.studio.auto.dlo.cfg),data:r.join(`
2759
- `)}}var Sn;(R=>{R.createPawnCC=Mt,R.createPawnDbg=pF,R.FileSequencer=ft,R.PreCompiler=lt;function t(k,O){return Pt(k,O)}R.isDloRootFile=t;function a(k){return vr(k)}R.isDloSpecFile=a;function i(k,O){return bn(k,O)}R.getSpecCompileDefines=i,R.itSlug=mn,R.uniqueItSlug=hn,R.itPublicName=gn,R.stepPublicName=kn,R.IT_PREFIX=$t,R.IT_SLUG_MAX=jn,R.PUBLIC_NAME_MAX=31,R.itMarkerComment=yn,R.IT_MARKER_RE=Jo,R.Compiler=Et,R.uriToMemFs=Me,R.getPrecompilerDiagnostics=wn,R.parseCompilerWarningsAndErrors=ns;async function F0(k,O,W){let Y=await X.read(k,O),H=await bF(k,O,Y);await O.writeFile(H.path,H.data),W.log("Generated",s0.filePaths.studio.auto.dlo.cfg)}R.exportDloConfig=F0})(Sn||={});var jF=require("vscode-uri");var ss=require("minimatch");var hF=require("@gera2ld/tarjs"),hB=T0.convertBlobToString,gB=require("pako"),gF=".studioignore",kF=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];kF.push("**/.studio/**","**/node_modules/**",gF,"dist/defines.app.ts");var mF={dot:!0},Bt;(r=>{async function x(t,a){let i=new hF.TarWriter;(await A(t,a)).forEach(u=>{i.addFile(u.name,u.data)});let c=await i.write();return gB.gzip(await c.arrayBuffer())}r.createArchive=x;async function A(t,a){let i=[],{ignore:l,negate:c}=await kB(t,a),b=(await a.findFiles(t,"**/*")).filter(({path:m})=>{let g=m.slice(t.path.length+1);return!l.some(q=>(0,ss.minimatch)(g,q,mF))||c.some(q=>(0,ss.minimatch)(g,q.slice(1),mF))});for(let m of b){let g=m.path.slice(t.path.length+1),[q,_]=await Promise.all([a.stat(m),a.readFile(m)]);q&&i.push({name:g,data:_,modifyTime:new Date(q.mtime)})}return i}r.getFilesForArchive=A;async function e(t,a,i,l=gx.ENV.production){let{publisher:c,name:u,version:b}=a,m=await Sx.readFilesFromTarGz(i,["CHANGELOG.md","README.md","studio.json"]),g={"CHANGELOG.md":await is(m["CHANGELOG.md"]),"README.md":await is(m["README.md"]),"studio.json":await is(m["studio.json"]),"library.tar.gz":i};return await hx.publishLibraryVersion(t,c,u,b,g,l)}r.publishPackage=e})(Bt||={});async function kB(x,A){let e=["!studio.json","!README.md"],t=(await yB(x,A)).split(/[\n\r]/).map(u=>u.trim()).filter(u=>!!u).filter(u=>!/^\s*#/.test(u)),a=[...t,...t.filter(u=>!/(^|\/)[^/]*\*[^/]*$/.test(u)).map(u=>/\/$/.test(u)?`${u}**`:`${u}/**`)],i=[...kF,...a,...e],[l,c]=i.reduce((u,b)=>/^\s*!/.test(b)?[u[0],[...u[1],b]]:[[...u[0],b],u[1]],[[],[]]);return{ignore:l,negate:c}}async function yB(x,A){let e=jF.Utils.joinPath(x,gF);if(await A.stat(e)){let t=await A.readFile(e);return hB(t)}else return""}async function is(x){return new Uint8Array(await x.arrayBuffer())}var pe=require("vscode-uri");var fr=require("yaml");var _B=T0.convertBlobToString,qn=T0.yamlRangeToLineInformation,Tn;(i=>{let x;(b=>(b.static="static",b.dynamic="dynamic",b.appDynamic="app-dynamic"))(x=i.Type||={});let A;(m=>(m.crcStamp="crc_stamp",m.stampOnly="stamp_only",m.onlyDown="only_down",m.onlyUp="only_up"))(A=i.SyncLogic||={});let e;(b=>(b.down="down",b.up="up",b.off="off"))(e=i.Force||={});async function r(l,c,u){let{properties:b,diagnostics:m,libraryFiles:g}=await t(l,c),q=pe.Utils.joinPath(l,s0.filePaths.dist.dfilesPath);await c.stat(q)&&await c.rm(q);for(let[_,$]of Object.entries(b))await SB(l,c,_,$,g);return Object.keys(b).length&&(u.done(`${Object.keys(b).length} dfiles processed.`),await c.writeFile(pe.Utils.joinPath(l,s0.filePaths.dist.dfilesProperties),JSON.stringify(b,null," "))),m}i.process=r;async function t(l,c){let u=[],b={},m=await px.getApmPartDependencies(l,c,_0.Part.dfiles);for(let _ of m){let{properties:$,diagnostics:T}=await a(c,_.path,_.name);Object.assign(b,$),u.push(...T)}let{properties:g,diagnostics:q}=await a(c,pe.Utils.joinPath(l,s0.filePaths.dfiles.mainDFILES),null);return Object.assign(b,g),u.push(...q),{properties:b,diagnostics:u,libraryFiles:m}}i.parseDfile=t;async function a(l,c,u){let b=[],m={};if(!await l.stat(c))return{properties:m,diagnostics:b};let g=await l.readFile(c),q=_B(g),_=new fr.LineCounter,T=(0,fr.parseDocument)(q,{lineCounter:_}).contents||new fr.YAMLMap;for(let M of T.items){let N=M.key.value,z=(0,fr.isMap)(M.value)?M.value:null,F0=qn(_,M.key.range),R=z?z.has("syncMode"):!1,k=R?z.get("syncMode"):"crc_stamp";if(R){let V=Object.values(i.SyncLogic);if(!V.includes(k)){let n0=z.items.find(x0=>x0.key.value==="syncMode"),r0=qn(_,n0.key.range);b.push({file:c,code:"",message:`Property syncMode does not match any of "${V.join(", ")}"`,line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"})}}else b.push({file:c,code:"",message:'Property "syncMode" missing',line:F0.line,startCharacter:F0.startCharacter,endCharacter:F0.endCharacter,level:"error"});let O=z?z.has("type"):!1,W=O?z.get("type"):"static";if(O){let V=Object.values(i.Type);if(!V.includes(W)){let n0=z.items.find(x0=>x0.key.value==="type"),r0=qn(_,n0.key.range);b.push({file:c,code:"",message:`Property type does not match any of "${V.join(", ")}"`,line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"})}}N.match(/^[a-z0-9._-]*$/)||b.push({file:c,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:F0.line,startCharacter:F0.startCharacter,endCharacter:F0.endCharacter,level:"error"});let Y=pe.Utils.joinPath(pe.Utils.dirname(c),N),H=await wB(l,Y);if(H)m[N]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:W,library:u};else{let V=qn(_,M.key.range);b.push({file:c,code:"",message:`Could not find file "${N}"`,line:V.line,startCharacter:V.startCharacter,endCharacter:V.endCharacter,level:"error"})}}return{properties:m,diagnostics:b}}i.parseYamlFile=a})(Tn||={});async function wB(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:T0.generateCRC32ForFileContent(r)}}async function SB(x,A,e,r,t){let i=r.library!==null?pe.Utils.dirname(t.find(u=>u.name===r.library).path):pe.Utils.joinPath(x,s0.filePaths.dfiles.path),l=pe.Utils.joinPath(x,s0.filePaths.dist.dfilesPath,e),c=pe.Utils.joinPath(i,e);await A.copy(c,l)}var yF=Y0(require("dotenv")),_F=require("vscode-uri");var qB=".env.local",wF;(A=>{async function x(e,r){let t=_F.Utils.joinPath(e,qB);if(await r.stat(t)){let a=await r.readFile(t);return yF.default.parse(T0.convertBlobToString(a))}return{}}A.read=x})(wF||={});var Ct=Y0(require("chalk")),be;(r=>{let x;(b=>(b[b.log=0]="log",b[b.done=1]="done",b[b.info=2]="info",b[b.warning=3]="warning",b[b.error=4]="error",b[b.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Ct.default.bgGreen.black(" DONE "),0:"",2:Ct.default.bgBlueBright.black(" INFO "),3:Ct.default.bgYellow.black(" WARNING "),4:Ct.default.bgRed.black(" ERROR "),5:Ct.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(a=console){this._logHandler=a}_log(a,i,...l){this._silent&&a!==4||(l=[r.LOG_PREFIX[a],i,...l],this._logHandler.log(...l))}set silent(a){this._silent=a}set output(a){this._logHandler=a}log(a,...i){this._log(0,a,...i)}debug(a,...i){this._debugEnabled&&this._log(5,a,...i)}set debugEnabled(a){this._debugEnabled=a}error(a,...i){this._log(4,a,...i)}info(a,...i){this._log(2,a,...i)}warn(a,...i){this._log(3,a,...i)}done(a,...i){this._log(1,a,...i)}}r.Logger=e})(be||={});var If=require("node:child_process");var Mf=require("node:fs"),Rf=Y0(require("node:path")),gt=require("vscode-uri");var vf=require("node:events"),ba=require("vscode-uri"),bx=Y0(Br());var cA=Y0(Br());var ua=Y0(Br()),Vv=2e3;function A7(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function e7(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var ii=class{interface="usb";#A=new Set;#e;#r;#i;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(a=>a.direction==="in"),this.#i=t.find(a=>a.direction==="out"),this.#t=e7(A,e)}async write(A){await this.#e.transferOut(this.#i.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#s(),()=>{this.#A.delete(e)}}#s(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,Vv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,A7(Vv)])}},si=class extends ii{constructor(A){super(A,ua.USB_CONFIGURATION.utoInterface)}},ai=class extends ii{constructor(A){super(A,ua.USB_CONFIGURATION.debugInterface)}};var r7=9540,Da;function Wv(){if(!Da){let{WebUSB:x}=require("usb");Da=new x({allowedDevices:[{vendorId:r7}]})}return Da}async function t7(){return(await Wv().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function Xv(x){let A=await t7();if(A.length===0){x.info("No USB devices found.");return}x.info("Available USB devices:"),A.forEach((e,r)=>{let t=e.productName||`Unknown Device (VID: 0x${e.vendorId.toString(16)}, PID: 0x${e.productId.toString(16)})`,a=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${a}`)})}async function pa(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await Wv().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function Fi(x){return`Device not found with serial number: ${x}`}var n7=500;function i7(x){if(x instanceof oi)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(Fi(""))}var oi=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function s7(x,A){try{return{uto:new si(x),debug:A?new ai(x):void 0}}catch(e){throw new oi("Device descriptors not ready",e)}}function a7(x){return async(A,e=!0)=>{let r=await pa(A,x);if(!r)throw new Error(Fi(A));try{await r.open(),await r.selectConfiguration(cA.USB_CONFIGURATION.configurationNumber),await r.claimInterface(cA.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(cA.USB_CONFIGURATION.debugInterface);let{uto:t,debug:a}=s7(r,e);return{uto:t,debug:a,async close(){await t.stop(),await a?.stop(),r.opened&&(await r.releaseInterface(cA.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(cA.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function o7(x){return new Promise(A=>setTimeout(A,x))}async function F7(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(a){if(!i7(a)||Date.now()>=t)throw a;await o7(n7)}}function Yr(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function vi(x,A={}){let e=A.logger??new be.Logger,r=A.transportFactory??a7(e),t=A.needDebug!==!1,a=await F7(r,x,t,A.retryMs??0),i=t?a.debug:void 0,l=Yr(e),c=i?new cA.AtCommandHandler(i,l):void 0,u=new cA.UtoMaster(a.uto,l);return{utoMaster:u,atHandler:c,transports:a,serial:x,close:async()=>{try{await u.dispose(c)}catch{}c?.dispose(),await a.close()}}}async function jt(x,A,e,r,t=!1,a=0,i){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let c=await e.readFile(A),u;try{u=await vi(x,{logger:r,debug:t,needDebug:!1,retryMs:a,transportFactory:i});let{utoMaster:b}=u;if(t){b.on("mdnCom",g=>{r.debug("mdnCom",g)}),b.on("mdnComError",g=>{r.debug("mdnComError",g)});let m=-1;b.on("installing",g=>{g&&g!==m&&(m=g,r.info(`Upload progress: ${g}%`))})}return await b.init(),await b.requestDeviceInfo(),r.info("Device connected, starting upload..."),await b.sendFile(cA.UtoFileType.pawn,new Uint8Array(c.buffer,c.byteOffset,c.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(b){let m=b instanceof Error?b.message:String(b);return{success:!1,message:m===Fi(x)?m:`Upload failed: ${m}`}}finally{await u?.close()}}async function Yv(x,A,e=!1){let r,t;try{r=await vi(x,{logger:A,debug:e});let{atHandler:a,transports:i}=r;if(!a)throw new Error("The debug interface is required for a sync");t=new cA.SyncManager(i.uto,a,A),t.on("syncError",c=>A.error(`Sync error: ${c.message}`)),e&&(t.on("syncStart",({mode:c})=>A.log(`Sync mode: ${c}`)),t.on("syncPhase",({phase:c})=>A.log(`Sync phase: ${c}`)),t.on("syncComplete",c=>A.info(`Sync complete (mode: ${c.mode}, messages: ${c.serverMessageCount})`))),A.info("Syncing device...");let l=new AbortController;return await t.sync({serialNumber:x,signal:l.signal}),{success:!0,message:"Sync completed successfully"}}catch(a){let i=a instanceof Error?a.message:String(a);return{success:!1,message:i===Fi(x)?i:`Sync failed: ${i}`}}finally{t?.dispose(),await r?.close()}}var Qv=require("vscode-uri"),fi=Y0(Br());var li=class x{constructor(A,e,r,t,a){this.fs=r;this.persist=t;this.logger=a;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=Qv.Utils.joinPath(A,s0.filePaths.studio.dev.mirror),a=new fi.MemoryStorage;if(r.persist&&await e.stat(t))try{let i=new TextDecoder().decode(await e.readFile(t));a=fi.MemoryStorage.fromJSON(JSON.parse(i))}catch(i){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${i instanceof Error?i.message:i}`),a=new fi.MemoryStorage}return new x(a,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var Af=require("node:events"),ci=require("node:fs/promises"),ef=require("node:path"),rf=Y0(require("iconv-lite")),Qr=Y0(Br());var v7=5e3,Zv=500;function xf(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function f7(x){let A=x.level===Qr.DebugLogLevel.info?"":`${Qr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function l7(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var ht=class extends Af.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??v7,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,ci.mkdir)((0,ef.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,ci.appendFile)(e,`${JSON.stringify(A)}
2760
- `,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=Zv){let r=e>0?e:Zv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==Qr.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new Qr.DebugMaster(A,Yr(this.logger??new be.Logger));e.on("message",r=>{let t=f7(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[xf(rf.default.decode(Buffer.from(e),"win1252")),xf(Buffer.from(e).toString("utf8"))].find(l7);if(t){this.push(A,t);return}let a=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${a}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var nf=require("node:events"),xe=Y0(Br()),c7=1e3,E7=1e4,B7=200,tf=new Set([xe.UtoTag.HISTDATA_RAW,xe.UtoTag.LOG,xe.UtoTag.ALERTS]),Ei=class extends nf.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,xe.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||tf.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:c7,E7),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],a=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let i=await this.mirrorStamp(A);return(a===void 0?t>i:t!==a)?this.pull(A,r,i,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},a=await this.mirrorStamp(r),i=await this.pull(r,t,t.historic?a:0,this.deviceStamp(r)??0);i&&(e.push(r),this.emit("container-changed",i))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,xe.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||tf.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,xe.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?C7(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),a=0,i=e,l=async c=>{let u=c.filter(b=>b.stamp40>e).map(b=>(i=Math.max(i,b.stamp40),{tag:A,stamp:(0,xe.stamp40ToDbHex)(b.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:b.data}));await this.opts.storage.insertHistoricRows(u),a+=u.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,B7,l),a===0?null:this.describeChange(A,i||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function C7(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var ax=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},d7=2e3,u7=3e3,D7=3e4,p7=1e4,b7=3e4,m7=1e3,ma="dev",sf=`/api/1/sites/${ma}`,af="local",Bi="Device not connected",of="device_id",ja=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(a=>{t=a});try{await j7(r,e)}catch(a){throw this.depth--,r.then(t,t),a}try{return await A()}finally{this.depth--,t()}}};function j7(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new ax(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Cr=class extends vf.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new ja;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??bx.systemTimeSource,this.logStream=new ht({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new ax("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new ax("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new ax(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await li.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new bx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new ax(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=ba.Utils.joinPath(this.opts.cwd,s0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new ax(`No DDE model at ${s0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,bx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await vi(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let a=t instanceof Error?t.message:String(t);throw new ax(`Could not open device ${this.opts.serial}: ${a}`,/not found/i.test(a)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new ax(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(of)===null&&await this.storage.setMetadataValue(of,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new ax(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=Yr(this.logger);this.stateManager=new bx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new bx.LocalDataManager(e,r),this.offlineSync=new bx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Ei({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??d7,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new ax(Bi,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new ax(Bi,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,a)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(bx.UtoCommand.DATA,r,t,a))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:ma,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,bx.createSiteInfoFromDde)(this.ddeModel,{siteUid:ma,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:af}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,bx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let a=t.alias??t.name;r[a.toLowerCase()]={alias:a}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new ax("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let a=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!a)return null;let i=(0,bx.resolveTagInModel)(this.ddeModel,decodeURIComponent(a[1]));return i===null||!(0,bx.isDevicePushableTag)(i)||this.poller?.knowsTag(i)===!1?null:i}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??u7,t=this.poller;if(r<=0||!t)return!0;let a=Date.now()+r;for(;;){let l=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(l!==null&&l>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=a)return!1;await Ff(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await X.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await Sx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??gx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof Sx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=ba.Utils.joinPath(this.opts.cwd,A??s0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??jt)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,p7,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+b7;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await Ff(m7)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(a=>a.outcome==="upload").map(a=>a.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new ax(Bi,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new ax(Bi,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:af,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,bx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let a=await this.handleApi({path:`${sf}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=a.status<400&&a.body?JSON.parse(a.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let a=this.ddeModel.byNameOrAlias(r);if(!a||a.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let i=await this.handleApi({path:`${sf}/containers/${encodeURIComponent(a.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=i.status>=400?{ok:!1,err:h7(i.body)}:i.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,bx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??D7)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function Ff(x){return new Promise(A=>setTimeout(A,x))}function h7(x){try{return JSON.parse(x).err??x}catch{return x}}var Cf=Y0(require("node:http")),df=require("vscode-uri"),uf=Y0(require("yaml"));var Df=["log","state","sync","build","uto","container-changed","error"],g7=15e3,ff=4*1024*1024,k7="127.0.0.1",y7=8765,pf="no-store",bf="E_NOT_FOUND",lf="E_BAD_REQUEST",_7=2e3,w7=20;function Zr(x,A){return JSON.stringify({err:`${x} ${A}`})}function ge(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":pf,...r}),x.end(e)}function S7(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function q7(x,A){if(!(S7(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function T7(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function P7(x,A){let e=x.headers.origin;typeof e=="string"&&T7(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function $7(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let a=process.env.MYDATANET_TOKEN;return t===A||a!==void 0&&a!==""&&t===a}var dr=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function mf(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>ff)throw x.pause(),new dr(413,"E_TOO_LARGE",`request body exceeds ${ff} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function jf(x){return x!=="GET"&&x!=="HEAD"}function cf(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new dr(400,lf,"malformed JSON body")}if(typeof A!="object"||A===null)throw new dr(400,lf,"JSON body must be an object");return A}function Ef(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function N7(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function Bf(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var ha=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
2757
+ public ___${k}( ${O})${V}`}else if(N=iF.exec(M)){let[,L,k]=N;T=`${L}${k}{_log_string="";_assert(__refid,__line);}`}else if(N=tF.exec(M)){let[,L,k,O,V]=N;T=`${L}${k}{ if (!(${O})) { sprintf(_log_string,_,${V.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=nF.exec(M)){let[,L,k,O]=N;T=`${L}${k}{ if (!(${O})) { _log_string="";_assert(__refid,__line); }}`}else if(N=sF.exec(M)){let[,L,k,O]=N;T=`${L}${k}_catch(__refid,__line,${O});`}else if(N=aF.exec(M)){let[,L,k,O,V,Y]=N,{priority:H,code:W}=Zo(V,O.substring(1));H!==null&&(T=`${L}${k}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${Y});DDE_applog_write(${H}, ${W}, params_str, __applog_src_id);}`)}else if(N=oF.exec(M)){let[,L,k,O,V]=N,{priority:Y,code:H}=Zo(V,O.substring(1));Y!==null&&(T=`${L}${k}DDE_applog_write(${Y}, ${H}, "", __applog_src_id);`)}else if(N=FF.exec(M)){let[,L,k,O,V]=N,Y=O.substring(1),H=vF[Y];T=`${L}${k}{ if(_log_level <= ${H}){ sprintf(_log_string,_,${V.replace(/%%/g,"\xFF")}); _log${O}(__refid,__line); }}`}else(N=YE.exec(M))&&!v.includes(s0.filePaths.studio.auto.path)&&!$t(v,r)?(v.includes(s0.filePaths.studio.libdeps)||i.push({file:t,level:"warning",line:$,message:"Libraries are included automatically - remove this #include line"}),T="// Libraries are included automatically! - "+M):(N=QE.exec(M))&&(i.push({file:t,level:"error",line:$,message:"#endinput is not supported - use #if/#endif instead"}),T=M);c&&!r.legacyProject&&(xB.exec(M)&&(T=T.replaceAll("DDE_",`_${c}`)),AB.exec(M)&&(T=T.replace("onUplink",`_${c}`)),eB.exec(M)&&(T=T.replace("onUplink",`_${c}Uplink`))),b.push(T),_++;for(let L=0;L<z;L++)b.push(""),_++,$++}if(!$t(v,r)){let $=u.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),T=`_inc_${$}`.substring(0,31),M=`_inc_${$}_inc`.substring(0,31);b.push(`#if defined ${T}`),b.push(`#undef ${T}`),b.push("#endif"),b.push(`#if defined ${M}`),b.push(`#undef ${M}`),b.push("#endif")}return{data:b.join(`
2758
+ `),diagnostics:i}}};var EF=require("vscode-uri");function uB(x){let A=x.dlo?.mainFile;if(!A)return{dir:"dlo",mainFileBaseName:null};let e=A.replace(/\\/g,"/").split("/"),r=e.pop()??null;return{dir:e.join("/")||".",mainFileBaseName:r}}var DB=/^[A-Za-z0-9_.-]+$/;function pB(x){if(!DB.test(x)||x.startsWith("."))throw new Error(`"${x}" is not a valid spec name: only letters, digits, "_", "-" and "." are allowed, and it must not start with a dot.`)}function bB(x,A){return`${A?`#include "${A}"`:"// no dlo.mainFile in studio.json - #include the module this spec exercises"}
2761
2759
 
2762
- `),g7),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
2760
+ DESCRIBE("${x}")
2761
+
2762
+ TEST_SETUP()
2763
+ {
2764
+ // mocks that every test of this file needs, e.g. MOCK_RETURN(rM2M_GetTime, 1000);
2765
+ }
2766
+
2767
+ IT("does the first thing")
2768
+ {
2769
+ EXPECT_TRUE(true);
2770
+ }
2771
+ `}async function BF(x,A,e,r){pB(r);let{dir:t,mainFileBaseName:s}=uB(e),i=t==="."?`${r}.spec.dlo`:`${t}/${r}.spec.dlo`,v=EF.Utils.joinPath(x,i);if(await A.stat(v))throw new Error(`${i} already exists - refusing to overwrite it.`);return await A.writeFile(v,bB(r,s)),i}var be=require("vscode-uri");var U0=Y0(require("fs")),mx=require("vscode-uri");var DF=Y0(require("iconv-lite")),mB=T0.convertBlobToStringArray,pF=16384,bF=511,es=pF|bF,jB=32768,hB=438,CF=jB|hB,gB=new lt,ct={};function Tn(){let x=[];for(let A of Object.keys(ct))x.push(...ct[A].diagnostics);return x}var qn=!!process.env.DLO_PROFILE,Me={precompileCount:0,cacheHits:0,precompileMs:0};function mF(x){qn&&(x.log(`[DLO_PROFILE] precompile: ${Me.precompileCount} runs, ${Me.cacheHits} cache hits, ${Me.precompileMs.toFixed(1)}ms`),Me.precompileCount=0,Me.cacheHits=0,Me.precompileMs=0)}var rs=(x,A,e,r)=>{let t={getattr(i){let v=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)),c=v.fsPath;if(!U0.existsSync(c))throw new x.ErrnoError(44);let u=uF(A,r,e,v),b=U0.statSync(c),m=u?.length||b.size;return{mode:b.isDirectory()?es:CF,size:m,atime:b.atime,mtime:b.mtime,ctime:b.ctime}},setattr(i,v){let c=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)).fsPath;if(!U0.existsSync(c))throw new x.ErrnoError(44);if(typeof v.size=="number"&&U0.truncateSync(c,v.size),typeof v.mode=="number"&&U0.chmodSync(c,v.mode),v.atime||v.mtime){let u=U0.statSync(c);U0.utimesSync(c,v.atime??u.atime,v.mtime??u.mtime)}},lookup(i,v){let u=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),v).fsPath;if(!U0.existsSync(u))throw new x.ErrnoError(44);let b=U0.statSync(u),m=x.createNode(i,v,b.isDirectory()?es:CF,0);return m.node_ops=i.node_ops,m.stream_ops=i.stream_ops,m},readdir(i){let v=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)).fsPath;return[".","..",...U0.readdirSync(v)]},mknod(i,v,c,u){let b=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),v).fsPath;U0.writeFileSync(b,"");let m=x.createNode(i,v,c,u);return m.node_ops=i.node_ops,m.stream_ops=i.stream_ops,m},unlink(i,v){let c=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),v).fsPath;U0.unlinkSync(c)},mkdir(i,v,c){let u=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),v).fsPath;U0.mkdirSync(u,{mode:c});let b=x.createNode(i,v,c|es,0);return b.node_ops=i.node_ops,b.stream_ops=i.stream_ops,b},rmdir(i,v){let c=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i),v).fsPath;U0.rmdirSync(c)},rename(i,v,c){let u=mx.Utils.joinPath(mx.URI.parse(i.mount.opts.root),x.getPath(i)).fsPath,b=mx.Utils.joinPath(mx.URI.parse(v.mount.opts.root),x.getPath(v),c).fsPath;U0.renameSync(u,b)}},s={open(i){let v=mx.Utils.joinPath(mx.URI.parse(i.node.mount.opts.root),x.getPath(i.node));i.modifiedContent=uF(A,r,e,v),i.modifiedContent||(i.nfd=U0.openSync(v.fsPath,dF(i.flags)))},close(i){i.nfd&&U0.closeSync(i.nfd)},read(i,v,c,u,b){if(!i.modifiedContent)return U0.readSync(i.nfd,v,c,u,b);let m=i.modifiedContent;if(b>=m.length)return 0;let g=m.length-b,q=Math.min(u,g);return kB(m,v,c,b,b+q),q},write(i,v,c,u,b){return U0.writeSync(i.nfd,v,c,u,b)},flagsToMode:dF,llseek(i,v,c){let u=v;if(c===1)u+=i.position;else if(c===2){let b=U0.fstatSync(i.nfd);u+=b.size}if(u<0)throw new x.ErrnoError(28);return i.position=u,u}};return{mount(){let i=Re(A),v=x.createNode(null,i,pF|bF,0);return v.node_ops=t,v.stream_ops=s,v},node_ops:t,stream_ops:s}};function dF(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function kB(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let s=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,s,e):A.set(s,e)}}function uF(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=yB(t);if(!s){delete ct[t];return}let i=ct[t];if(i&&i.mtimeMs===s.mtimeMs&&i.size===s.size)return qn&&Me.cacheHits++,i.buffer;let v=qn?performance.now():0,c=_B(x,A,e,r);return qn&&(Me.precompileCount++,Me.precompileMs+=performance.now()-v),ct[t]={buffer:c.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:c.diagnostics},ct[t].buffer}function yB(x){try{return U0.statSync(x)}catch{return null}}function _B(x,A,e,r){let t=U0.readFileSync(r.fsPath),s=mB(t),i=gB.preCompileDloFile(x,A,e,r,s);return{buffer:DF.encode(i.data,"cp1252"),diagnostics:i.diagnostics}}function Re(x){return x.fsPath.replace(/\\/g,"/")}function Mt(x,A){let e=Re(x);return Re(A).replace(e,"")}var _F=yF(),Lt=_F.createPawnCC,wF=_F.createPawnDbg;var Et=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await Lt({noExitRuntime:A,print:i=>{let v=is(this.cwd,i);this.logger.log(v?v.message:i),this.stdout.push(i)},printErr:i=>{let v=is(this.cwd,i);i.includes(": warning")?this.logger.warn(v?v.message:i):this.logger.error(v?v.message:i),this.stderr.push(i),this.stdout.push(i)}});let e=Re(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await X.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=rs(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(Re(this.cwd))}async compile(A,e){let r=await X.read(A,e);if(!await X.isApmPartEnabled(A,e,_0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(be.Utils.joinPath(A,"dist/dlo"));let t=be.Utils.joinPath(A,r.dlo?.mainFile||s0.filePaths.dlo.mainDLO),s=[],i=be.Utils.joinPath(A,s0.filePaths.studio.auto.dlo.cfg),v=Mt(A,i);if(s.push(`-T.${v}`),vr(t.path)){let u="";try{u=T0.convertBlobToString(await e.readFile(t))}catch(b){this.logger.error(b)}s.push(...jn(t.path,u))}let c=0;try{let u=`.${Mt(A,t)}`;c=await this.dloCC.callMain([u,...s])}catch(u){this.logger.error(u)}return{code:c,stdout:this.stdout,stderr:this.stderr,diagnostics:[...Tn(),...ss(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(m=>{let g=m.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(g)?`${g}.${m.substring(2)}`:m}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:i,print:v}=await this.getSymbolCompiler(),c=t?performance.now()-s:0,u=t?performance.now():0,b=0;try{b=await i.callMain(["."+A,...r,"-R"])||0}catch(m){if(m.stack?.startsWith("RuntimeError"))return null;throw m}finally{if(t){let m=performance.now()-u;this.logger.log(`[DLO_PROFILE] instantiate: ${c.toFixed(1)}ms, callMain: ${m.toFixed(1)}ms`),mF(this.logger)}}return{exitCode:b,lines:[...v.stdout,...v.stderr]}}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await Lt({noExitRuntime:!1,print:v=>{A.stdout.push(v)},printErr:v=>{A.stderr.push(v)}}),r=Re(this.cwd),[t]=r.split("/"),s=e.FS,i=await X.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=rs(s,this.cwd,i,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function ss(x,A,e){let r=[],t=A.filter(s=>!!s.trim());for(let s of t){if((s.includes("Assertion failed:")||s.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:s});continue}let i=is(x,s);i&&r.push({file:be.URI.parse(`file:///${i?.posixPath}`),level:i.level,line:Number(i.lineNumber)-1,message:i.msg})}return r}function is(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),s=A.substring(e+3,r).trim(),i=A.substring(r+2).trim();if(!t||!s||!i)return null;let[v,c]=t.split(/[()(-)]/),u=s.split(" "),b=u[u.length-2],g=be.Utils.joinPath(x,v).fsPath.replace(/\\/g,"/");g.startsWith("/")&&(g=g.substring(1));let q=A.replace(v,g);return{level:b,msg:i,posixPath:g,lineNumber:c,message:q}}async function SF(x,A,e){let r=["-M","-v2"],t=be.Utils.joinPath(x,s0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${Mt(x,t)}`);let s=await px.getApmPartDependencies(x,A,_0.Part.dlo);for(let v of s){let c=be.Utils.dirname(v.path);r.push(`-i.${Mt(x,c)}`)}let i=e.dlo;return i&&r.push(...i.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:be.Utils.joinPath(x,s0.filePaths.studio.auto.dlo.cfg),data:r.join(`
2772
+ `)}}var Bt;(k=>{k.createPawnCC=Lt,k.createPawnDbg=wF,k.FileSequencer=ft,k.PreCompiler=lt;function t(O,V){return $t(O,V)}k.isDloRootFile=t;function s(O){return vr(O)}k.isDloSpecFile=s;function i(O,V){return jn(O,V)}k.getSpecCompileDefines=i,k.itSlug=hn,k.uniqueItSlug=kn,k.itPublicName=yn,k.stepPublicName=It,k.IT_PREFIX=Nt,k.IT_SLUG_MAX=gn,k.PUBLIC_NAME_MAX=31,k.itMarkerComment=_n,k.IT_MARKER_RE=zo,k.scaffoldSpec=BF,k.Compiler=Et,k.uriToMemFs=Re,k.getPrecompilerDiagnostics=Tn,k.parseCompilerWarningsAndErrors=ss;async function L(O,V,Y){let H=await X.read(O,V),W=await SF(O,V,H);await V.writeFile(W.path,W.data),Y.log("Generated",s0.filePaths.studio.auto.dlo.cfg)}k.exportDloConfig=L})(Bt||={});var TF=require("vscode-uri");var os=require("minimatch");var PF=require("@gera2ld/tarjs"),VB=T0.convertBlobToString,WB=require("pako"),$F=".studioignore",NF=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];NF.push("**/.studio/**","**/node_modules/**",$F,"dist/defines.app.ts");var qF={dot:!0},Ct;(r=>{async function x(t,s){let i=new PF.TarWriter;(await A(t,s)).forEach(u=>{i.addFile(u.name,u.data)});let c=await i.write();return WB.gzip(await c.arrayBuffer())}r.createArchive=x;async function A(t,s){let i=[],{ignore:v,negate:c}=await XB(t,s),b=(await s.findFiles(t,"**/*")).filter(({path:m})=>{let g=m.slice(t.path.length+1);return!v.some(q=>(0,os.minimatch)(g,q,qF))||c.some(q=>(0,os.minimatch)(g,q.slice(1),qF))});for(let m of b){let g=m.path.slice(t.path.length+1),[q,_]=await Promise.all([s.stat(m),s.readFile(m)]);q&&i.push({name:g,data:_,modifyTime:new Date(q.mtime)})}return i}r.getFilesForArchive=A;async function e(t,s,i,v=gx.ENV.production){let{publisher:c,name:u,version:b}=s,m=await qx.readFilesFromTarGz(i,["CHANGELOG.md","README.md","studio.json"]),g={"CHANGELOG.md":await as(m["CHANGELOG.md"]),"README.md":await as(m["README.md"]),"studio.json":await as(m["studio.json"]),"library.tar.gz":i};return await hx.publishLibraryVersion(t,c,u,b,g,v)}r.publishPackage=e})(Ct||={});async function XB(x,A){let e=["!studio.json","!README.md"],t=(await YB(x,A)).split(/[\n\r]/).map(u=>u.trim()).filter(u=>!!u).filter(u=>!/^\s*#/.test(u)),s=[...t,...t.filter(u=>!/(^|\/)[^/]*\*[^/]*$/.test(u)).map(u=>/\/$/.test(u)?`${u}**`:`${u}/**`)],i=[...NF,...s,...e],[v,c]=i.reduce((u,b)=>/^\s*!/.test(b)?[u[0],[...u[1],b]]:[[...u[0],b],u[1]],[[],[]]);return{ignore:v,negate:c}}async function YB(x,A){let e=TF.Utils.joinPath(x,$F);if(await A.stat(e)){let t=await A.readFile(e);return VB(t)}else return""}async function as(x){return new Uint8Array(await x.arrayBuffer())}var me=require("vscode-uri");var fr=require("yaml");var QB=T0.convertBlobToString,Pn=T0.yamlRangeToLineInformation,$n;(i=>{let x;(b=>(b.static="static",b.dynamic="dynamic",b.appDynamic="app-dynamic"))(x=i.Type||={});let A;(m=>(m.crcStamp="crc_stamp",m.stampOnly="stamp_only",m.onlyDown="only_down",m.onlyUp="only_up"))(A=i.SyncLogic||={});let e;(b=>(b.down="down",b.up="up",b.off="off"))(e=i.Force||={});async function r(v,c,u){let{properties:b,diagnostics:m,libraryFiles:g}=await t(v,c),q=me.Utils.joinPath(v,s0.filePaths.dist.dfilesPath);await c.stat(q)&&await c.rm(q);for(let[_,$]of Object.entries(b))await xC(v,c,_,$,g);return Object.keys(b).length&&(u.done(`${Object.keys(b).length} dfiles processed.`),await c.writeFile(me.Utils.joinPath(v,s0.filePaths.dist.dfilesProperties),JSON.stringify(b,null," "))),m}i.process=r;async function t(v,c){let u=[],b={},m=await px.getApmPartDependencies(v,c,_0.Part.dfiles);for(let _ of m){let{properties:$,diagnostics:T}=await s(c,_.path,_.name);Object.assign(b,$),u.push(...T)}let{properties:g,diagnostics:q}=await s(c,me.Utils.joinPath(v,s0.filePaths.dfiles.mainDFILES),null);return Object.assign(b,g),u.push(...q),{properties:b,diagnostics:u,libraryFiles:m}}i.parseDfile=t;async function s(v,c,u){let b=[],m={};if(!await v.stat(c))return{properties:m,diagnostics:b};let g=await v.readFile(c),q=QB(g),_=new fr.LineCounter,T=(0,fr.parseDocument)(q,{lineCounter:_}).contents||new fr.YAMLMap;for(let M of T.items){let N=M.key.value,z=(0,fr.isMap)(M.value)?M.value:null,F0=Pn(_,M.key.range),L=z?z.has("syncMode"):!1,k=L?z.get("syncMode"):"crc_stamp";if(L){let W=Object.values(i.SyncLogic);if(!W.includes(k)){let n0=z.items.find(x0=>x0.key.value==="syncMode"),r0=Pn(_,n0.key.range);b.push({file:c,code:"",message:`Property syncMode does not match any of "${W.join(", ")}"`,line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"})}}else b.push({file:c,code:"",message:'Property "syncMode" missing',line:F0.line,startCharacter:F0.startCharacter,endCharacter:F0.endCharacter,level:"error"});let O=z?z.has("type"):!1,V=O?z.get("type"):"static";if(O){let W=Object.values(i.Type);if(!W.includes(V)){let n0=z.items.find(x0=>x0.key.value==="type"),r0=Pn(_,n0.key.range);b.push({file:c,code:"",message:`Property type does not match any of "${W.join(", ")}"`,line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"})}}N.match(/^[a-z0-9._-]*$/)||b.push({file:c,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:F0.line,startCharacter:F0.startCharacter,endCharacter:F0.endCharacter,level:"error"});let Y=me.Utils.joinPath(me.Utils.dirname(c),N),H=await ZB(v,Y);if(H)m[N]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:V,library:u};else{let W=Pn(_,M.key.range);b.push({file:c,code:"",message:`Could not find file "${N}"`,line:W.line,startCharacter:W.startCharacter,endCharacter:W.endCharacter,level:"error"})}}return{properties:m,diagnostics:b}}i.parseYamlFile=s})($n||={});async function ZB(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:T0.generateCRC32ForFileContent(r)}}async function xC(x,A,e,r,t){let i=r.library!==null?me.Utils.dirname(t.find(u=>u.name===r.library).path):me.Utils.joinPath(x,s0.filePaths.dfiles.path),v=me.Utils.joinPath(x,s0.filePaths.dist.dfilesPath,e),c=me.Utils.joinPath(i,e);await A.copy(c,v)}var IF=Y0(require("dotenv")),MF=require("vscode-uri");var AC=".env.local",RF;(A=>{async function x(e,r){let t=MF.Utils.joinPath(e,AC);if(await r.stat(t)){let s=await r.readFile(t);return IF.default.parse(T0.convertBlobToString(s))}return{}}A.read=x})(RF||={});var dt=Y0(require("chalk")),je;(r=>{let x;(b=>(b[b.log=0]="log",b[b.done=1]="done",b[b.info=2]="info",b[b.warning=3]="warning",b[b.error=4]="error",b[b.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:dt.default.bgGreen.black(" DONE "),0:"",2:dt.default.bgBlueBright.black(" INFO "),3:dt.default.bgYellow.black(" WARNING "),4:dt.default.bgRed.black(" ERROR "),5:dt.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,i,...v){this._silent&&s!==4||(v=[r.LOG_PREFIX[s],i,...v],this._logHandler.log(...v))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...i){this._log(0,s,...i)}debug(s,...i){this._debugEnabled&&this._log(5,s,...i)}set debugEnabled(s){this._debugEnabled=s}error(s,...i){this._log(4,s,...i)}info(s,...i){this._log(2,s,...i)}warn(s,...i){this._log(3,s,...i)}done(s,...i){this._log(1,s,...i)}}r.Logger=e})(je||={});var Kf=require("node:child_process");var zf=require("node:fs"),Vf=Y0(require("node:path")),kt=require("vscode-uri");var Df=require("node:events"),ja=require("vscode-uri"),bx=Y0(Br());var cA=Y0(Br());var pa=Y0(Br()),rf=2e3;function j7(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function h7(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var ai=class{interface="usb";#A=new Set;#e;#r;#i;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(s=>s.direction==="in"),this.#i=t.find(s=>s.direction==="out"),this.#t=h7(A,e)}async write(A){await this.#e.transferOut(this.#i.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#s(),()=>{this.#A.delete(e)}}#s(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,rf);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,j7(rf)])}},oi=class extends ai{constructor(A){super(A,pa.USB_CONFIGURATION.utoInterface)}},Fi=class extends ai{constructor(A){super(A,pa.USB_CONFIGURATION.debugInterface)}};var g7=9540,ba;function tf(){if(!ba){let{WebUSB:x}=require("usb");ba=new x({allowedDevices:[{vendorId:g7}]})}return ba}async function k7(){return(await tf().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function nf(x){let A=await k7();if(A.length===0){x.info("No USB devices found.");return}x.info("Available USB devices:"),A.forEach((e,r)=>{let t=e.productName||`Unknown Device (VID: 0x${e.vendorId.toString(16)}, PID: 0x${e.productId.toString(16)})`,s=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${s}`)})}async function ma(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await tf().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function fi(x){return`Device not found with serial number: ${x}`}var y7=500;function _7(x){if(x instanceof vi)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(fi(""))}var vi=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function w7(x,A){try{return{uto:new oi(x),debug:A?new Fi(x):void 0}}catch(e){throw new vi("Device descriptors not ready",e)}}function S7(x){return async(A,e=!0)=>{let r=await ma(A,x);if(!r)throw new Error(fi(A));try{await r.open(),await r.selectConfiguration(cA.USB_CONFIGURATION.configurationNumber),await r.claimInterface(cA.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(cA.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=w7(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(cA.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(cA.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function q7(x){return new Promise(A=>setTimeout(A,x))}async function T7(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!_7(s)||Date.now()>=t)throw s;await q7(y7)}}function Yr(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function li(x,A={}){let e=A.logger??new je.Logger,r=A.transportFactory??S7(e),t=A.needDebug!==!1,s=await T7(r,x,t,A.retryMs??0),i=t?s.debug:void 0,v=Yr(e),c=i?new cA.AtCommandHandler(i,v):void 0,u=new cA.UtoMaster(s.uto,v);return{utoMaster:u,atHandler:c,transports:s,serial:x,close:async()=>{try{await u.dispose(c)}catch{}c?.dispose(),await s.close()}}}async function ht(x,A,e,r,t=!1,s=0,i){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let c=await e.readFile(A),u;try{u=await li(x,{logger:r,debug:t,needDebug:!1,retryMs:s,transportFactory:i});let{utoMaster:b}=u;if(t){b.on("mdnCom",g=>{r.debug("mdnCom",g)}),b.on("mdnComError",g=>{r.debug("mdnComError",g)});let m=-1;b.on("installing",g=>{g&&g!==m&&(m=g,r.info(`Upload progress: ${g}%`))})}return await b.init(),await b.requestDeviceInfo(),r.info("Device connected, starting upload..."),await b.sendFile(cA.UtoFileType.pawn,new Uint8Array(c.buffer,c.byteOffset,c.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(b){let m=b instanceof Error?b.message:String(b);return{success:!1,message:m===fi(x)?m:`Upload failed: ${m}`}}finally{await u?.close()}}async function sf(x,A,e=!1){let r,t;try{r=await li(x,{logger:A,debug:e});let{atHandler:s,transports:i}=r;if(!s)throw new Error("The debug interface is required for a sync");t=new cA.SyncManager(i.uto,s,A),t.on("syncError",c=>A.error(`Sync error: ${c.message}`)),e&&(t.on("syncStart",({mode:c})=>A.log(`Sync mode: ${c}`)),t.on("syncPhase",({phase:c})=>A.log(`Sync phase: ${c}`)),t.on("syncComplete",c=>A.info(`Sync complete (mode: ${c.mode}, messages: ${c.serverMessageCount})`))),A.info("Syncing device...");let v=new AbortController;return await t.sync({serialNumber:x,signal:v.signal}),{success:!0,message:"Sync completed successfully"}}catch(s){let i=s instanceof Error?s.message:String(s);return{success:!1,message:i===fi(x)?i:`Sync failed: ${i}`}}finally{t?.dispose(),await r?.close()}}var af=require("vscode-uri"),ci=Y0(Br());var Ei=class x{constructor(A,e,r,t,s){this.fs=r;this.persist=t;this.logger=s;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=af.Utils.joinPath(A,s0.filePaths.studio.dev.mirror),s=new ci.MemoryStorage;if(r.persist&&await e.stat(t))try{let i=new TextDecoder().decode(await e.readFile(t));s=ci.MemoryStorage.fromJSON(JSON.parse(i))}catch(i){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${i instanceof Error?i.message:i}`),s=new ci.MemoryStorage}return new x(s,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var vf=require("node:events"),Bi=require("node:fs/promises"),ff=require("node:path"),lf=Y0(require("iconv-lite")),Qr=Y0(Br());var P7=5e3,of=500;function Ff(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function $7(x){let A=x.level===Qr.DebugLogLevel.info?"":`${Qr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function N7(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var gt=class extends vf.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??P7,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,Bi.mkdir)((0,ff.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Bi.appendFile)(e,`${JSON.stringify(A)}
2773
+ `,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=of){let r=e>0?e:of;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==Qr.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new Qr.DebugMaster(A,Yr(this.logger??new je.Logger));e.on("message",r=>{let t=$7(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[Ff(lf.default.decode(Buffer.from(e),"win1252")),Ff(Buffer.from(e).toString("utf8"))].find(N7);if(t){this.push(A,t);return}let s=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${s}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Ef=require("node:events"),Ae=Y0(Br()),I7=1e3,M7=1e4,R7=200,cf=new Set([Ae.UtoTag.HISTDATA_RAW,Ae.UtoTag.LOG,Ae.UtoTag.ALERTS]),Ci=class extends Ef.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,Ae.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||cf.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:I7,M7),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],s=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let i=await this.mirrorStamp(A);return(s===void 0?t>i:t!==s)?this.pull(A,r,i,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},s=await this.mirrorStamp(r),i=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);i&&(e.push(r),this.emit("container-changed",i))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,Ae.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||cf.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,Ae.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?L7(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),s=0,i=e,v=async c=>{let u=c.filter(b=>b.stamp40>e).map(b=>(i=Math.max(i,b.stamp40),{tag:A,stamp:(0,Ae.stamp40ToDbHex)(b.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:b.data}));await this.opts.storage.insertHistoricRows(u),s+=u.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,R7,v),s===0?null:this.describeChange(A,i||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function L7(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var ax=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},O7=2e3,G7=3e3,U7=3e4,H7=1e4,J7=3e4,K7=1e3,ha="dev",Bf=`/api/1/sites/${ha}`,Cf="local",di="Device not connected",df="device_id",ga=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(s=>{t=s});try{await z7(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function z7(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new ax(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Cr=class extends Df.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new ga;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??bx.systemTimeSource,this.logStream=new gt({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new ax("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new ax("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new ax(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Ei.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new bx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new ax(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=ja.Utils.joinPath(this.opts.cwd,s0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new ax(`No DDE model at ${s0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,bx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await li(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let s=t instanceof Error?t.message:String(t);throw new ax(`Could not open device ${this.opts.serial}: ${s}`,/not found/i.test(s)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new ax(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(df)===null&&await this.storage.setMetadataValue(df,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new ax(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=Yr(this.logger);this.stateManager=new bx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new bx.LocalDataManager(e,r),this.offlineSync=new bx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Ci({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??O7,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new ax(di,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new ax(di,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(bx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:ha,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,bx.createSiteInfoFromDde)(this.ddeModel,{siteUid:ha,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Cf}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,bx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let s=t.alias??t.name;r[s.toLowerCase()]={alias:s}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new ax("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let s=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!s)return null;let i=(0,bx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return i===null||!(0,bx.isDevicePushableTag)(i)||this.poller?.knowsTag(i)===!1?null:i}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??G7,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let v=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(v!==null&&v>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await uf(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await X.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await qx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??gx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof qx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=ja.Utils.joinPath(this.opts.cwd,A??s0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??ht)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,H7,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+J7;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await uf(K7)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(s=>s.outcome==="upload").map(s=>s.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new ax(di,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new ax(di,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Cf,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,bx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let s=await this.handleApi({path:`${Bf}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=s.status<400&&s.body?JSON.parse(s.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let s=this.ddeModel.byNameOrAlias(r);if(!s||s.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let i=await this.handleApi({path:`${Bf}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=i.status>=400?{ok:!1,err:V7(i.body)}:i.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,bx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??U7)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function uf(x){return new Promise(A=>setTimeout(A,x))}function V7(x){try{return JSON.parse(x).err??x}catch{return x}}var gf=Y0(require("node:http")),kf=require("vscode-uri"),yf=Y0(require("yaml"));var _f=["log","state","sync","build","uto","container-changed","error"],W7=15e3,pf=4*1024*1024,X7="127.0.0.1",Y7=8765,wf="no-store",Sf="E_NOT_FOUND",bf="E_BAD_REQUEST",Q7=2e3,Z7=20;function Zr(x,A){return JSON.stringify({err:`${x} ${A}`})}function ye(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":wf,...r}),x.end(e)}function x6(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function A6(x,A){if(!(x6(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function e6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function r6(x,A){let e=x.headers.origin;typeof e=="string"&&e6(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function t6(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let s=process.env.MYDATANET_TOKEN;return t===A||s!==void 0&&s!==""&&t===s}var dr=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function qf(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>pf)throw x.pause(),new dr(413,"E_TOO_LARGE",`request body exceeds ${pf} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Tf(x){return x!=="GET"&&x!=="HEAD"}function mf(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new dr(400,bf,"malformed JSON body")}if(typeof A!="object"||A===null)throw new dr(400,bf,"JSON body must be an object");return A}function jf(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function n6(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function hf(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var ka=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
2774
+
2775
+ `),W7),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
2763
2776
  data: ${JSON.stringify(e)}
2764
2777
 
2765
- `;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=w7&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),a=t?new Set(t.split(",").map(l=>l.trim()).filter(l=>Df.includes(l))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":pf,connection:"keep-alive"}),e.write(`: connected
2778
+ `;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=Z7&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),s=t?new Set(t.split(",").map(v=>v.trim()).filter(v=>_f.includes(v))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":wf,connection:"keep-alive"}),e.write(`: connected
2766
2779
 
2767
- `);let i={res:e,types:a,stalled:0};this.clients.add(i),A.on("close",()=>this.clients.delete(i)),e.on("close",()=>this.clients.delete(i)),e.on("error",()=>this.clients.delete(i))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function I7(x,A,e,r){let t=A.method??"GET",a={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([l,c])=>[l,Array.isArray(c)?c.join(","):c??""])),body:jf(t)?await mf(A):null},i=await x.handleApi(a);ge(e,i.status,i.body,i.headers)}async function M7(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(Ef(r,"file"));case"POST /dev/sync":return t.sync(N7(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Bf(e,"since",0),Bf(e,"limit",500))};case"POST /dev/at":return R7(t,Ef(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return H7(x);case"GET /dev/configs":return t.configs();default:return}}async function R7(x,A){if(!A)throw new dr(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function L7(x,A,e,r){let[t,a=""]=r.split("?"),i=A.method??"GET",l=jf(i)?await mf(A):"";try{if(i==="PUT"&&t==="/dev/configs"){let u=await x.session.applyConfigs(cf(l)),b=Object.values(u).every(m=>m.ok);ge(e,b?200:400,JSON.stringify({results:u}));return}let c=await M7(x,`${i} ${t}`,new URLSearchParams(a),cf(l));if(c===void 0){ge(e,404,Zr(bf,`no route for ${i} ${t}`));return}ge(e,200,JSON.stringify(c))}catch(c){if(c instanceof dr){ge(e,c.status,Zr(c.code,c.message));return}ge(e,500,Zr("E_DEV",c instanceof Error?c.message:String(c)))}}async function O7(x,A,e,r){if(P7(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",a=t.split("?")[1]??"",i=t==="/events"||t.startsWith("/events?"),l=i?new URLSearchParams(a).get("token")??void 0:void 0;if(!$7(e,x.token,l)){ge(r,401,Zr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await I7(x.session,e,r,t):i?A.subscribe(e,r,a):t.startsWith("/dev/")?await L7(x,e,r,t):ge(r,404,Zr(bf,`no route for ${t}`))}catch(c){if(c instanceof dr&&!r.headersSent){ge(r,c.status,Zr(c.code,c.message),{connection:"close"});return}throw c}}async function ga(x){let{session:A,logger:e}=x,r=x.host??k7;q7(x,r);let t=new ha;for(let l of Df)A.on(l,c=>t.broadcast(l,c));let a=Cf.default.createServer((l,c)=>{O7(x,t,l,c).catch(u=>{let b=u instanceof Error?u.message:String(u);e.error(`Dev server error: ${b}`),c.headersSent||ge(c,500,Zr("E_INTERNAL",b))})});try{await new Promise((l,c)=>{a.once("error",c),a.listen(x.port??y7,r,()=>{a.off("error",c),l()})})}catch(l){throw t.close(),l}a.on("error",l=>e.error(`Dev server socket error: ${l.message}`));let i=a.address().port;return{url:`http://${r}:${i}`,port:i,async close(){t.close(),a.closeIdleConnections(),a.closeAllConnections(),await Promise.race([new Promise(l=>a.close(()=>l())),G7(_7)])}}}function G7(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var U7={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function H7(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=df.Utils.joinPath(x.cwd,s0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=uf.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${s0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...U7},A}var Yt=require("node:fs"),hf=require("node:path"),gf=require("vscode-uri");var J7=300,K7=new Set([s0.fileNames.projectSettings,s0.filePaths.appIni]);function ka(x){return x instanceof Error?x.message:String(x)}function z7(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function V7(x){let A=[],e=r=>{A.push(r);for(let t of(0,Yt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,hf.join)(r,t.name))};try{e(x)}catch{}return A}function kf(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??J7,a=[],i,l=!1,c=!1,u=async()=>{if(l){c=!0;return}l=!0;try{let q=await e.build();if(q.ok!==!0){r.error(`Rebuild failed: ${q.message??"see diagnostics"}`);return}if(x.flash!==!1){let _=await e.flash();if(!_.success){r.error(_.message);return}}await e.sync()}catch(q){r.error(`Watch cycle failed: ${q instanceof Error?q.message:String(q)}`)}finally{l=!1,c&&(c=!1,b())}};function b(){i&&clearTimeout(i),i=setTimeout(()=>{u()},t),i.unref?.()}let m=q=>(_,$)=>{let T=typeof $=="string"?$.replace(/\\/g,"/"):null;(!q||T!==null&&q(T))&&b()},g=(q,_,$)=>{let T=gf.Utils.joinPath(A,q);try{a.push((0,Yt.watch)(T.fsPath,{recursive:_},m($)))}catch(M){if(z7(M))return;if(_){r.warn(`Recursive file watching is not available on this platform (${ka(M)}) \u2014 watching every directory under ${q} individually.`);for(let N of V7(T.fsPath))try{a.push((0,Yt.watch)(N,{recursive:!1},m($)))}catch(z){r.warn(`Could not watch ${N}: ${ka(z)}`)}return}r.warn(`Could not watch ${q}: ${ka(M)}`)}};return g(s0.filePaths.dlo.path,!0),g(s0.filePaths.dde.path,!0),g(".",!1,q=>K7.has(q)),{close(){i&&clearTimeout(i);for(let q of a)q.close()}}}var W7=new Set(["uto-meta","state","console","command","recorder-drop"]),X7=".ndjson",Y7=[".db",".sqlite",".sqlite3"];function _f(x,A,e,r){if(!W7.has(x))return{ts:r,type:x,owner:e??null,bytes:A};try{return{ts:r,type:x,owner:e??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:r,type:x,owner:e??null,bytes:A}}}function Q7(x){let A=x.split(/\r?\n/).filter(e=>e.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function Z7(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),a=new Uint8Array(Buffer.from(t.data,"base64")),i=_f(t.type,a,t.owner,t.ts),l=e.get(t.sessionId);l?l.push(i):e.set(t.sessionId,[i])}return{manifest:A,recordsBySession:e}}function x6(x){if(x.length===0)return;let A=x[0].ts,e=x[0].ts;for(let r of x)r.ts<A&&(A=r.ts),r.ts>e&&(e=r.ts);return{min:A,max:e}}function A6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(l=>l.sessionId===r),a=A.get(r)??[],i=x6(a);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:i?.min??x.exportedTs,endedTs:i?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:a.length}})}async function e6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=Z7(Q7(e));return{sessions:A6(r,t),recordsFor:i=>(t.get(i)??[]).slice().sort((l,c)=>l.ts-c.ts),warnings:[]}}async function r6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function yf(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Qt(x){return x==null?null:String(x)}function ya(x){return typeof x=="number"?x:Number(x)}function t6(x,A,e){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(e.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function n6(x,A){let e=await r6(),r=await A.readFile(x),t=new e.Database(r);try{let a=[],i=new Map;for(let c of yf(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let u=String(c.session_id),b=String(c.type),m=ya(c.ts),g=t6(c.data,`${b}@${m} (session ${u})`,a),q=_f(b,g,Qt(c.owner),m),_=i.get(u);_?_.push(q):i.set(u,[q])}return{sessions:yf(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(c=>{let u=String(c.session_id);return{id:u,serial:Qt(c.serial),deviceId:Qt(c.device_id),startedTs:ya(c.started_ts),endedTs:c.ended_ts===null||c.ended_ts===void 0?null:ya(c.ended_ts),appVersion:Qt(c.app_version),platform:Qt(c.platform),recordCount:(i.get(u)??[]).length}}),recordsFor:c=>i.get(c)??[],warnings:a}}finally{t.close()}}async function _a(x,A){let e=x.path.toLowerCase();if(e.endsWith(X7))return e6(x,A);if(Y7.some(r=>e.endsWith(r)))return n6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function wa(x,A){if(A){let e=x.sessions.find(r=>r.id===A);if(!e){let r=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${r}`)}return e}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((e,r)=>r.recordCount>e.recordCount?r:e)}var Tf=require("node:events"),Pf=Y0(Br());var wf="at-tx",Sa="at-rx",i6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function s6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function Sf(x){let A=i6.exec(s6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function a6(x,A){if(x.length!==A.length)return!1;for(let e=0;e<x.length;e++)if(x[e]!==A[e])return!1;return!0}function o6(x,A){if(a6(x,A))return!0;let e=Sf(x),r=Sf(A);return e!==null&&r!==null&&e===r}function F6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function v6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function qa(x){return`hex[${F6(x)}] ascii["${v6(x)}"]`}function f6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Ta(x){return x===void 0?1:x==="max"||x<=0?0:x}var Ci=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,e={}){this.entries=A.filter(r=>r.type===wf||r.type===Sa).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=Ta(e.speed),this.onWarning=e.onWarning??(()=>{}),this.baseTs=e.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==Sa)continue;let e=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,r=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},e);r.unref?.(),A.timer=r,this.timers.push(r)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==wf;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let e=new Uint8Array(A),r=this.advanceToNextTx();if(!r){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${qa(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!o6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${qa(t)} actual: ${qa(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Sa;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,e=!1){if(A.consumed&&!e)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let r=f6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var di="state",$a="console",$f="command",Nf="uto-meta",Pa="at",l6=new Set([di,$a,$f,Nf]),c6="not available in replay mode",qf="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function E6(x){return x===di?"state":x===$a?"console":x===Nf?"uto":Pa}function B6(x,A){return x===$a&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===$f&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Zt=class extends Tf.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new ht({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let e=A.recording.recordsFor(A.session.id),r=e.length>0?e[0].ts:0;this.transport=new Ci(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(Pa,t)}),this.atHandler=new Pf.AtCommandHandler(this.transport,Yr(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=Ta(this.speed);for(let t of A){if(!l6.has(t.type))continue;let a=r>0?Math.max(0,(t.ts-e)/r):0,i=setTimeout(()=>this.emitAnnotation(t),a);i.unref?.(),this.timers.push(i)}}emitAnnotation(A){A.type===di&&(this.lastState=A.json??null,this.emit(di,this.lastState)),this.logStream.push(E6(A.type),B6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:qf})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new ax(c6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(Pa,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let e={};for(let r of Object.keys(A))e[r]={ok:!1,err:qf};return e}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var C6="details";function d6(){return[_0.Part.dde,_0.Part.dlo,_0.Part.dfiles]}async function Na(x,A,e){let r=e.logger??new be.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return D6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Cr({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??d6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",u=>r.warn(u instanceof Error?u.message:String(u)));try{await t.start()}catch(u){throw await t.stop(),u}let a,i,l;try{a=await ga({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(i=kf({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(l=Lf(x,t,a.url,e.pov,r))}catch(u){throw await a?.close(),await t.stop(),u}let c=a;return{url:c.url,port:c.port,session:t,apmId:t.status().apmId,async close(){i?.close(),Of(l,r),await c.close(),await t.stop()}}}function u6(x,A){return Rf.isAbsolute(A)?gt.URI.file(A):gt.Utils.joinPath(x,A)}async function D6(x,A,e,r){let t=u6(x,e.replay),a=await _a(t,A);for(let m of a.warnings)r.warn(m);let i=wa(a,e.session),l=new Zt({file:t.fsPath,recording:a,session:i,speed:e.speed,logger:r,logFile:e.logFile});l.on("error",m=>r.warn(m instanceof Error?m.message:String(m))),l.start();let c,u;try{c=await ga({session:l,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(u=Lf(x,l,c.url,e.pov,r))}catch(m){throw await c?.close(),await l.stop(),m}let b=c;return{url:b.url,port:b.port,session:l,apmId:l.status().apmId,async close(){Of(u,r),await b.close(),await l.stop()}}}function Lf(x,A,e,r,t){let a=typeof r=="string"&&r.length>0?r:C6,i=gt.Utils.joinPath(x,"pov",a);if(!(0,Mf.existsSync)(gt.Utils.joinPath(i,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${i.fsPath}`);return}let l=$e.spawnNpm(["run","dev"],{cwd:i.fsPath,env:{...process.env,MYDATANET_HOST:e},detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),c=u=>{for(let b of u.toString("utf8").split(/\r?\n/)){let m=b.trim();m&&A.logStream.push("pov",m)}};return l.stdout?.on("data",c),l.stderr?.on("data",c),l.on("error",u=>t.error(`POV dev server failed: ${u.message}`)),t.info(`POV dev server: npm run dev in ${i.fsPath} (MYDATANET_HOST=${e})`),l}function Of(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,If.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var Gf=require("uuid"),p6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var xn=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:a,authHeader:i,logger:l}=A;this.domain=this.normalizeServerUrl(t),this.auth=i||(a?`Bearer ${a}`:""),this.logger=l}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,a={Authorization:this.auth},i={method:A,headers:a};r&&(r instanceof FormData?i.body=r:(a["Content-Type"]="application/json",i.body=JSON.stringify(r)));let l=await fetch(t,i);if(!l.ok){let c=await l.text().catch(()=>"Unknown error");throw new Error(`HTTP ${l.status}: ${c}`)}return l.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let a=await this.getSite(A,e.name.toLowerCase());if(a)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${a._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${a._uid}`),a._uid}catch(i){if(i.message&&!i.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${i.message}`);else return a._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function Uf(x){return(0,Gf.v5)(x,p6)}async function Ia(x,A,e,r,t,a,i){let l=await X.read(x,A),c=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=l.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),b=await X.isApmPartEnabled(x,A,_0.Part.dlo,l),m=b&&r,g=m?r.toUpperCase():`${u}_${c}`,q=m?r:g,_=i||g;return _.length>50&&(e.warn(`Site name "${_}" is too long. Truncating to 50 characters.`),_=_.substring(0,50)),{apmId:Uf(q),applicationId:null,name:_,version:1,serialNumber:b?r:void 0,siteUid:null,customerUid:a}}async function Hf(x,A,e,r,t,a,i=!1){if(a.length>0)for(let l of a){let[c,u]=l.split("@");await px.installDependency(x,A,e,r,t,c,u||null,i)}else await px.installDependencies(x,A,e,r,t);await px.installNpmInApmParts(x,A,e)}async function Jf(x,A,e,r,t=null,a=!0,i){return await X.validateBasicManifest(x,A,null),Sx.buildAll(x,A,e,r,t,a,i)}async function b6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await X.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function Kf(x,A,e,r,t,a,i,l){e.info("Publishing package...");let c=await b6(a);if(l)await Sx.publishArchive(x,A,e,t,r,l,i,c);else return await Sx.validatePublishSettings(x,A,t,r),Sx.release(x,A,e,r,t,i,c)}async function zf(x,A,e,r,t,a){return Sx.pack(x,A,e,r,t,a)}var Oe=Ax.DDEContainerName,Vf=Ax.allowedRelationTypes,m6=Ax.regexRelation,An=Ax.ContainerType,j6=Ax.checkForReservedFieldName,Di=Ax.ContainerName,Ma=Ax.CONTAINER_DEFS,h6=Ax.SERVER_CONTAINER,g6=Ax.HISTDATA_CONTAINER,k6=Ax.CONFIG_CONTAINER,Jx=Ax.TransferDirection,Wf=Ax.fieldTypeDefinitions,EA=T0.yamlRangeToLineInformation,Ra="flexibleContainers",pi;(A=>{class x{constructor(r,t,a){this.manifest=r;this.libraryFiles=t;this.ddeHistory=a}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:a,diagnostics:i,parsedYaml:l}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...i),this.libraryDDE.push(a),this.libraryYaml[t.libraryName]=l}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,a=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(i=>i.title===a)||null}parseMainDDE(r,t){let{parsedDDE:a,diagnostics:i,parsedYaml:l,lineCounter:c}=this.parseYamlFile(r,t);return i.find(m=>m.level==="error")?{ddeJSON:null,diagnostics:i}:{ddeJSON:this.mergeAndFormat(a,r,c,l),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(r,t,a){this.fileDiagnostics.length=0;let i=new ur.LineCounter,l=(0,ur.parseDocument)(t,{lineCounter:i});if(!l.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:i};let c=l.contents||new ur.YAMLMap;return this.validateContainerDefinition(c.items).forEach(b=>{this.validateAllowedContainer(r,b,i,a),this.validateContainerFields(l,r,b,i)}),{parsedDDE:this.yamlDocToDdeJson(l.toJS({mapAsMap:!0}),r,i,l,a),diagnostics:[...this.fileDiagnostics],parsedYaml:l,lineCounter:i}}yamlDocToDdeJson(r,t,a,i,l){l||(this.flexibleContainers=this.readFlexibleContainers(r.get(Ra)));let c={containers:{},setPointList:{}},u=new Map,b=[...Object.values(Oe)];if(r.get("cloudProject")){let g=Object.values(this.previousVersion.containers).map($=>$.title),q=[...r.keys()].filter($=>!this.reservedTopLevelKeys().has($)),_=[...new Set([...b,...g,...q])];b.length=0,b.push(..._)}for(let g of b)r.has(g)&&u.set(g,r.get(g));let m=r.get("timeseries");if(m)for(let[g,q]of m)u.set(g,q);for(let[g,q]of u){let{realContainer:_,transferDirection:$,legacyTitle:T,directionFromHistory:M}=this.getRealContainerInformation(g);if(!_){let R=this.findContainerKeyRange(i,g);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${g}" could not be placed - no free container slot available.`,...R?EA(a,R):{line:0,startCharacter:0,endCharacter:0}});continue}M&&this.isPlusDirection($)&&this.historyPlusDirectionContainers.add(_);let N=Ma[_],z=g.includes("timeseries_")?g.replace("timeseries_",""):g,F0={name:_,title:z,previousTitle:T,containerType:N.ctype,volatile:g===Oe.volatile,transferDirection:$,fieldCount:q.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};l&&F0.libraries.push(l);for(let[R,k]of q){let O=[],W=k.get("type"),Y=Wf[W];if(!(!Y&&W!=="array")){if(W==="array"){let H=[],V=k.get("length"),n0=k.get("fields"),r0={name:R,length:V,library:l||null,fields:[]};F0.arrays[R]=r0;for(let x0=0;x0<V;x0++){let f0={name:R,index:x0};for(let[U,v0]of n0){let c0=Wf[v0.get("type")];if(!c0)continue;r0.fields?.find(L0=>L0.name===U)||r0.fields.push({name:U,type:v0.get("type"),byteSize:c0.len||v0.get("bytes")||v0.get("length")});let p0=`${R}[${x0}].${U}`,{fields:b0,shadowInfo:I0}=this.createDDEJsonFields(p0,l,c0,v0);b0.forEach(L0=>{L0.arrayRef=f0}),I0&&(F0.shadows[I0.name]=I0),H.push(...b0)}}O.push(...H)}else{let{arrayInfo:H,fields:V,shadowInfo:n0}=this.createDDEJsonFields(R,l,Y,k);H&&(F0.arrays[H.name]=H),n0&&(F0.shadows[n0.name]=n0),O.push(...V)}O.forEach(H=>{H.index=++F0.fieldIndex,F0.fields.push(H),F0.size+=H.byteSize})}}c.containers[_]=F0}return c}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",Ra,"timeseries",...Object.values(Oe)])}getRealContainerInformation(r){let t,a,i,l=!1;if(this.previousVersion){let c=r.startsWith("timeseries_")?r.substring(11):r,{name:u,direction:b,previousTitle:m}=this.findPreviousUsedContainer(c);t=u,a=b,i=m,l=a!==void 0}if(!t){let c=Object.entries(this.usedContainerNames).find(([,u])=>u===r);c&&(t=c[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),a||(a=[Oe.setting,Oe.command].includes(r)?Jx.down:Jx.up),t&&[Di.configA,Di.configB].includes(t)&&(a=Jx.backendOnly,l=!1),{realContainer:t,transferDirection:a,legacyTitle:i,directionFromHistory:l}}findContainerKeyRange(r,t){let a=r.contents;return a?.items?t.startsWith("timeseries_")?a.items.find(b=>b.key.value==="timeseries")?.value?.items.find(b=>b.key.value===t)?.key.range:a.items.find(l=>l.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===Di.aloha)return Di.aloha;let t=k6;r.startsWith("timeseries_")?t=g6:[Oe.relations,Oe.storage].includes(r)&&(t=h6);let a=this.previousVersion?.containers;return a&&(t=t.filter(i=>!Object.hasOwn(a,i))),t.find(i=>!Object.hasOwn(this.usedContainerNames,i))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,a=Object.values(t).find(i=>i.title===r);return{name:a?.name,direction:a?.transferDirection,previousTitle:a?.previousTitle}}createDDEJsonFields(r,t,a,i){let l=i.get("array"),c=[],u,b;if(l){u={name:r,library:t||null,length:l};for(let m=0;m<l;m++){let g=`${r.toLowerCase()}[${m}]`;c.push(this.buildDDEJsonField(g,i,{name:r,index:m},a,t,null))}}else{let m=this.buildDDEJsonField(r,i,null,a,t,null);c.push(m);let g=i.get("shadowFields");if(g){b={name:m.name,byteSize:m.byteSize,byteOffset:m.byteOffset};for(let[q,_]of g){let $=q;r.includes(".")&&($=r.split(".")[0]+`.${q}`),c.push(this.buildDDEJsonField($,_,null,a,t,m.name))}}}return{arrayInfo:u,shadowInfo:b,fields:c}}buildDDEJsonField(r,t,a,i,l,c){return{id:r.toLowerCase(),name:r,index:0,library:l||null,byteOffset:0,byteSize:i.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:a,shadowRef:c,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,ur.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(a=>{let l=a.key.value;l==="timeseries"?a.value.items.forEach(c=>{c.key.value=`timeseries_${c.key}`,t.push(c)}):["dde","cloudProject","constants",Ra].includes(l)||t.push(a)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,a,i){if(!t.value)return;let c=t.key.value;if(i&&(c.startsWith("aloha")||c.startsWith("timeseries"))){let u=c.includes("_")?c.split("_")[1]:c;this.fileDiagnostics.push({file:r,level:"error",message:`"${u}" not allowed within a library`,...EA(a,t.key.range)})}if(X.isAnalytics(this.manifest)&&![Oe.relations,Oe.storage].includes(c)){let u=c.includes("_")?c.split("_")[1]:c;this.fileDiagnostics.push({file:r,level:"error",message:`"${u}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...EA(a,t.key.range)})}}validateContainerFields(r,t,a,i){let l=a.value;if(!l)return;let c=a.key.value;Object.hasOwn(this.fieldNamesPerContainer,c)||(this.fieldNamesPerContainer[c]=[]);let u=this.getContainerOfPreviousVersion(c);l.items.forEach(b=>{let g=b.key.value;this.checkForContainerRelation(b,r,t,i),this.validateFieldName(b,c,t,i),this.checkFieldNameLength(b,c,t,i);let q=u?.fields.find(z=>z.id===g.toLowerCase()),_=b.value,$=_.get("type",!0),T=this.resolvePossibleAlias(r,$),M=_.get("bytes",!0),N=this.resolvePossibleAlias(r,M);q&&($&&T&&q.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${q.type}" to "${T}".
2780
+ `);let i={res:e,types:s,stalled:0};this.clients.add(i),A.on("close",()=>this.clients.delete(i)),e.on("close",()=>this.clients.delete(i)),e.on("error",()=>this.clients.delete(i))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function i6(x,A,e,r){let t=A.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([v,c])=>[v,Array.isArray(c)?c.join(","):c??""])),body:Tf(t)?await qf(A):null},i=await x.handleApi(s);ye(e,i.status,i.body,i.headers)}async function s6(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(jf(r,"file"));case"POST /dev/sync":return t.sync(n6(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(hf(e,"since",0),hf(e,"limit",500))};case"POST /dev/at":return a6(t,jf(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return l6(x);case"GET /dev/configs":return t.configs();default:return}}async function a6(x,A){if(!A)throw new dr(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function o6(x,A,e,r){let[t,s=""]=r.split("?"),i=A.method??"GET",v=Tf(i)?await qf(A):"";try{if(i==="PUT"&&t==="/dev/configs"){let u=await x.session.applyConfigs(mf(v)),b=Object.values(u).every(m=>m.ok);ye(e,b?200:400,JSON.stringify({results:u}));return}let c=await s6(x,`${i} ${t}`,new URLSearchParams(s),mf(v));if(c===void 0){ye(e,404,Zr(Sf,`no route for ${i} ${t}`));return}ye(e,200,JSON.stringify(c))}catch(c){if(c instanceof dr){ye(e,c.status,Zr(c.code,c.message));return}ye(e,500,Zr("E_DEV",c instanceof Error?c.message:String(c)))}}async function F6(x,A,e,r){if(r6(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",i=t==="/events"||t.startsWith("/events?"),v=i?new URLSearchParams(s).get("token")??void 0:void 0;if(!t6(e,x.token,v)){ye(r,401,Zr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await i6(x.session,e,r,t):i?A.subscribe(e,r,s):t.startsWith("/dev/")?await o6(x,e,r,t):ye(r,404,Zr(Sf,`no route for ${t}`))}catch(c){if(c instanceof dr&&!r.headersSent){ye(r,c.status,Zr(c.code,c.message),{connection:"close"});return}throw c}}async function ya(x){let{session:A,logger:e}=x,r=x.host??X7;A6(x,r);let t=new ka;for(let v of _f)A.on(v,c=>t.broadcast(v,c));let s=gf.default.createServer((v,c)=>{F6(x,t,v,c).catch(u=>{let b=u instanceof Error?u.message:String(u);e.error(`Dev server error: ${b}`),c.headersSent||ye(c,500,Zr("E_INTERNAL",b))})});try{await new Promise((v,c)=>{s.once("error",c),s.listen(x.port??Y7,r,()=>{s.off("error",c),v()})})}catch(v){throw t.close(),v}s.on("error",v=>e.error(`Dev server socket error: ${v.message}`));let i=s.address().port;return{url:`http://${r}:${i}`,port:i,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(v=>s.close(()=>v())),v6(Q7)])}}}function v6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var f6={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function l6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=kf.Utils.joinPath(x.cwd,s0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=yf.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${s0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...f6},A}var Zt=require("node:fs"),Pf=require("node:path"),$f=require("vscode-uri");var c6=300,E6=new Set([s0.fileNames.projectSettings,s0.filePaths.appIni]);function _a(x){return x instanceof Error?x.message:String(x)}function B6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function C6(x){let A=[],e=r=>{A.push(r);for(let t of(0,Zt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Pf.join)(r,t.name))};try{e(x)}catch{}return A}function Nf(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??c6,s=[],i,v=!1,c=!1,u=async()=>{if(v){c=!0;return}v=!0;try{let q=await e.build();if(q.ok!==!0){r.error(`Rebuild failed: ${q.message??"see diagnostics"}`);return}if(x.flash!==!1){let _=await e.flash();if(!_.success){r.error(_.message);return}}await e.sync()}catch(q){r.error(`Watch cycle failed: ${q instanceof Error?q.message:String(q)}`)}finally{v=!1,c&&(c=!1,b())}};function b(){i&&clearTimeout(i),i=setTimeout(()=>{u()},t),i.unref?.()}let m=q=>(_,$)=>{let T=typeof $=="string"?$.replace(/\\/g,"/"):null;(!q||T!==null&&q(T))&&b()},g=(q,_,$)=>{let T=$f.Utils.joinPath(A,q);try{s.push((0,Zt.watch)(T.fsPath,{recursive:_},m($)))}catch(M){if(B6(M))return;if(_){r.warn(`Recursive file watching is not available on this platform (${_a(M)}) \u2014 watching every directory under ${q} individually.`);for(let N of C6(T.fsPath))try{s.push((0,Zt.watch)(N,{recursive:!1},m($)))}catch(z){r.warn(`Could not watch ${N}: ${_a(z)}`)}return}r.warn(`Could not watch ${q}: ${_a(M)}`)}};return g(s0.filePaths.dlo.path,!0),g(s0.filePaths.dde.path,!0),g(".",!1,q=>E6.has(q)),{close(){i&&clearTimeout(i);for(let q of s)q.close()}}}var d6=new Set(["uto-meta","state","console","command","recorder-drop"]),u6=".ndjson",D6=[".db",".sqlite",".sqlite3"];function Mf(x,A,e,r){if(!d6.has(x))return{ts:r,type:x,owner:e??null,bytes:A};try{return{ts:r,type:x,owner:e??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:r,type:x,owner:e??null,bytes:A}}}function p6(x){let A=x.split(/\r?\n/).filter(e=>e.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function b6(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),s=new Uint8Array(Buffer.from(t.data,"base64")),i=Mf(t.type,s,t.owner,t.ts),v=e.get(t.sessionId);v?v.push(i):e.set(t.sessionId,[i])}return{manifest:A,recordsBySession:e}}function m6(x){if(x.length===0)return;let A=x[0].ts,e=x[0].ts;for(let r of x)r.ts<A&&(A=r.ts),r.ts>e&&(e=r.ts);return{min:A,max:e}}function j6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(v=>v.sessionId===r),s=A.get(r)??[],i=m6(s);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:i?.min??x.exportedTs,endedTs:i?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:s.length}})}async function h6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=b6(p6(e));return{sessions:j6(r,t),recordsFor:i=>(t.get(i)??[]).slice().sort((v,c)=>v.ts-c.ts),warnings:[]}}async function g6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function If(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function xn(x){return x==null?null:String(x)}function wa(x){return typeof x=="number"?x:Number(x)}function k6(x,A,e){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(e.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function y6(x,A){let e=await g6(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],i=new Map;for(let c of If(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let u=String(c.session_id),b=String(c.type),m=wa(c.ts),g=k6(c.data,`${b}@${m} (session ${u})`,s),q=Mf(b,g,xn(c.owner),m),_=i.get(u);_?_.push(q):i.set(u,[q])}return{sessions:If(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(c=>{let u=String(c.session_id);return{id:u,serial:xn(c.serial),deviceId:xn(c.device_id),startedTs:wa(c.started_ts),endedTs:c.ended_ts===null||c.ended_ts===void 0?null:wa(c.ended_ts),appVersion:xn(c.app_version),platform:xn(c.platform),recordCount:(i.get(u)??[]).length}}),recordsFor:c=>i.get(c)??[],warnings:s}}finally{t.close()}}async function Sa(x,A){let e=x.path.toLowerCase();if(e.endsWith(u6))return h6(x,A);if(D6.some(r=>e.endsWith(r)))return y6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function qa(x,A){if(A){let e=x.sessions.find(r=>r.id===A);if(!e){let r=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${r}`)}return e}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((e,r)=>r.recordCount>e.recordCount?r:e)}var Gf=require("node:events"),Uf=Y0(Br());var Rf="at-tx",Ta="at-rx",_6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function w6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function Lf(x){let A=_6.exec(w6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function S6(x,A){if(x.length!==A.length)return!1;for(let e=0;e<x.length;e++)if(x[e]!==A[e])return!1;return!0}function q6(x,A){if(S6(x,A))return!0;let e=Lf(x),r=Lf(A);return e!==null&&r!==null&&e===r}function T6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function P6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function Pa(x){return`hex[${T6(x)}] ascii["${P6(x)}"]`}function $6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function $a(x){return x===void 0?1:x==="max"||x<=0?0:x}var ui=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,e={}){this.entries=A.filter(r=>r.type===Rf||r.type===Ta).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=$a(e.speed),this.onWarning=e.onWarning??(()=>{}),this.baseTs=e.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==Ta)continue;let e=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,r=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},e);r.unref?.(),A.timer=r,this.timers.push(r)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==Rf;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let e=new Uint8Array(A),r=this.advanceToNextTx();if(!r){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${Pa(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!q6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${Pa(t)} actual: ${Pa(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ta;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,e=!1){if(A.consumed&&!e)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let r=$6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var Di="state",Ia="console",Hf="command",Jf="uto-meta",Na="at",N6=new Set([Di,Ia,Hf,Jf]),I6="not available in replay mode",Of="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function M6(x){return x===Di?"state":x===Ia?"console":x===Jf?"uto":Na}function R6(x,A){return x===Ia&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===Hf&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var An=class extends Gf.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new gt({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let e=A.recording.recordsFor(A.session.id),r=e.length>0?e[0].ts:0;this.transport=new ui(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(Na,t)}),this.atHandler=new Uf.AtCommandHandler(this.transport,Yr(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=$a(this.speed);for(let t of A){if(!N6.has(t.type))continue;let s=r>0?Math.max(0,(t.ts-e)/r):0,i=setTimeout(()=>this.emitAnnotation(t),s);i.unref?.(),this.timers.push(i)}}emitAnnotation(A){A.type===Di&&(this.lastState=A.json??null,this.emit(Di,this.lastState)),this.logStream.push(M6(A.type),R6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:Of})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new ax(I6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(Na,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let e={};for(let r of Object.keys(A))e[r]={ok:!1,err:Of};return e}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var L6="details";function O6(){return[_0.Part.dde,_0.Part.dlo,_0.Part.dfiles]}async function Ma(x,A,e){let r=e.logger??new je.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return U6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Cr({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??O6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",u=>r.warn(u instanceof Error?u.message:String(u)));try{await t.start()}catch(u){throw await t.stop(),u}let s,i,v;try{s=await ya({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(i=Nf({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(v=Wf(x,t,s.url,e.pov,r))}catch(u){throw await s?.close(),await t.stop(),u}let c=s;return{url:c.url,port:c.port,session:t,apmId:t.status().apmId,async close(){i?.close(),Xf(v,r),await c.close(),await t.stop()}}}function G6(x,A){return Vf.isAbsolute(A)?kt.URI.file(A):kt.Utils.joinPath(x,A)}async function U6(x,A,e,r){let t=G6(x,e.replay),s=await Sa(t,A);for(let m of s.warnings)r.warn(m);let i=qa(s,e.session),v=new An({file:t.fsPath,recording:s,session:i,speed:e.speed,logger:r,logFile:e.logFile});v.on("error",m=>r.warn(m instanceof Error?m.message:String(m))),v.start();let c,u;try{c=await ya({session:v,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(u=Wf(x,v,c.url,e.pov,r))}catch(m){throw await c?.close(),await v.stop(),m}let b=c;return{url:b.url,port:b.port,session:v,apmId:v.status().apmId,async close(){Xf(u,r),await b.close(),await v.stop()}}}function Wf(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:L6,i=kt.Utils.joinPath(x,"pov",s);if(!(0,zf.existsSync)(kt.Utils.joinPath(i,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${i.fsPath}`);return}let v=Ne.spawnNpm(["run","dev"],{cwd:i.fsPath,env:{...process.env,MYDATANET_HOST:e},detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),c=u=>{for(let b of u.toString("utf8").split(/\r?\n/)){let m=b.trim();m&&A.logStream.push("pov",m)}};return v.stdout?.on("data",c),v.stderr?.on("data",c),v.on("error",u=>t.error(`POV dev server failed: ${u.message}`)),t.info(`POV dev server: npm run dev in ${i.fsPath} (MYDATANET_HOST=${e})`),v}function Xf(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,Kf.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var Yf=require("uuid"),H6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var en=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:s,authHeader:i,logger:v}=A;this.domain=this.normalizeServerUrl(t),this.auth=i||(s?`Bearer ${s}`:""),this.logger=v}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,s={Authorization:this.auth},i={method:A,headers:s};r&&(r instanceof FormData?i.body=r:(s["Content-Type"]="application/json",i.body=JSON.stringify(r)));let v=await fetch(t,i);if(!v.ok){let c=await v.text().catch(()=>"Unknown error");throw new Error(`HTTP ${v.status}: ${c}`)}return v.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let s=await this.getSite(A,e.name.toLowerCase());if(s)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${s._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${s._uid}`),s._uid}catch(i){if(i.message&&!i.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${i.message}`);else return s._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function Qf(x){return(0,Yf.v5)(x,H6)}async function Ra(x,A,e,r,t,s,i){let v=await X.read(x,A),c=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=v.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),b=await X.isApmPartEnabled(x,A,_0.Part.dlo,v),m=b&&r,g=m?r.toUpperCase():`${u}_${c}`,q=m?r:g,_=i||g;return _.length>50&&(e.warn(`Site name "${_}" is too long. Truncating to 50 characters.`),_=_.substring(0,50)),{apmId:Qf(q),applicationId:null,name:_,version:1,serialNumber:b?r:void 0,siteUid:null,customerUid:s}}async function Zf(x,A,e,r,t,s,i=!1){if(s.length>0)for(let v of s){let[c,u]=v.split("@");await px.installDependency(x,A,e,r,t,c,u||null,i)}else await px.installDependencies(x,A,e,r,t);await px.installNpmInApmParts(x,A,e)}async function xl(x,A,e,r,t=null,s=!0,i){return await X.validateBasicManifest(x,A,null),qx.buildAll(x,A,e,r,t,s,i)}async function J6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await X.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function Al(x,A,e,r,t,s,i,v){e.info("Publishing package...");let c=await J6(s);if(v)await qx.publishArchive(x,A,e,t,r,v,i,c);else return await qx.validatePublishSettings(x,A,t,r),qx.release(x,A,e,r,t,i,c)}async function el(x,A,e,r,t,s){return qx.pack(x,A,e,r,t,s)}var Ge=Ax.DDEContainerName,rl=Ax.allowedRelationTypes,K6=Ax.regexRelation,rn=Ax.ContainerType,z6=Ax.checkForReservedFieldName,bi=Ax.ContainerName,La=Ax.CONTAINER_DEFS,V6=Ax.SERVER_CONTAINER,W6=Ax.HISTDATA_CONTAINER,X6=Ax.CONFIG_CONTAINER,Jx=Ax.TransferDirection,tl=Ax.fieldTypeDefinitions,EA=T0.yamlRangeToLineInformation,Oa="flexibleContainers",mi;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:i,parsedYaml:v}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...i),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=v}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,s=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(i=>i.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:i,parsedYaml:v,lineCounter:c}=this.parseYamlFile(r,t);return i.find(m=>m.level==="error")?{ddeJSON:null,diagnostics:i}:{ddeJSON:this.mergeAndFormat(s,r,c,v),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let i=new ur.LineCounter,v=(0,ur.parseDocument)(t,{lineCounter:i});if(!v.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:i};let c=v.contents||new ur.YAMLMap;return this.validateContainerDefinition(c.items).forEach(b=>{this.validateAllowedContainer(r,b,i,s),this.validateContainerFields(v,r,b,i)}),{parsedDDE:this.yamlDocToDdeJson(v.toJS({mapAsMap:!0}),r,i,v,s),diagnostics:[...this.fileDiagnostics],parsedYaml:v,lineCounter:i}}yamlDocToDdeJson(r,t,s,i,v){v||(this.flexibleContainers=this.readFlexibleContainers(r.get(Oa)));let c={containers:{},setPointList:{}},u=new Map,b=[...Object.values(Ge)];if(r.get("cloudProject")){let g=Object.values(this.previousVersion.containers).map($=>$.title),q=[...r.keys()].filter($=>!this.reservedTopLevelKeys().has($)),_=[...new Set([...b,...g,...q])];b.length=0,b.push(..._)}for(let g of b)r.has(g)&&u.set(g,r.get(g));let m=r.get("timeseries");if(m)for(let[g,q]of m)u.set(g,q);for(let[g,q]of u){let{realContainer:_,transferDirection:$,legacyTitle:T,directionFromHistory:M}=this.getRealContainerInformation(g);if(!_){let L=this.findContainerKeyRange(i,g);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${g}" could not be placed - no free container slot available.`,...L?EA(s,L):{line:0,startCharacter:0,endCharacter:0}});continue}M&&this.isPlusDirection($)&&this.historyPlusDirectionContainers.add(_);let N=La[_],z=g.includes("timeseries_")?g.replace("timeseries_",""):g,F0={name:_,title:z,previousTitle:T,containerType:N.ctype,volatile:g===Ge.volatile,transferDirection:$,fieldCount:q.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};v&&F0.libraries.push(v);for(let[L,k]of q){let O=[],V=k.get("type"),Y=tl[V];if(!(!Y&&V!=="array")){if(V==="array"){let H=[],W=k.get("length"),n0=k.get("fields"),r0={name:L,length:W,library:v||null,fields:[]};F0.arrays[L]=r0;for(let x0=0;x0<W;x0++){let f0={name:L,index:x0};for(let[U,v0]of n0){let c0=tl[v0.get("type")];if(!c0)continue;r0.fields?.find(L0=>L0.name===U)||r0.fields.push({name:U,type:v0.get("type"),byteSize:c0.len||v0.get("bytes")||v0.get("length")});let p0=`${L}[${x0}].${U}`,{fields:b0,shadowInfo:I0}=this.createDDEJsonFields(p0,v,c0,v0);b0.forEach(L0=>{L0.arrayRef=f0}),I0&&(F0.shadows[I0.name]=I0),H.push(...b0)}}O.push(...H)}else{let{arrayInfo:H,fields:W,shadowInfo:n0}=this.createDDEJsonFields(L,v,Y,k);H&&(F0.arrays[H.name]=H),n0&&(F0.shadows[n0.name]=n0),O.push(...W)}O.forEach(H=>{H.index=++F0.fieldIndex,F0.fields.push(H),F0.size+=H.byteSize})}}c.containers[_]=F0}return c}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",Oa,"timeseries",...Object.values(Ge)])}getRealContainerInformation(r){let t,s,i,v=!1;if(this.previousVersion){let c=r.startsWith("timeseries_")?r.substring(11):r,{name:u,direction:b,previousTitle:m}=this.findPreviousUsedContainer(c);t=u,s=b,i=m,v=s!==void 0}if(!t){let c=Object.entries(this.usedContainerNames).find(([,u])=>u===r);c&&(t=c[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),s||(s=[Ge.setting,Ge.command].includes(r)?Jx.down:Jx.up),t&&[bi.configA,bi.configB].includes(t)&&(s=Jx.backendOnly,v=!1),{realContainer:t,transferDirection:s,legacyTitle:i,directionFromHistory:v}}findContainerKeyRange(r,t){let s=r.contents;return s?.items?t.startsWith("timeseries_")?s.items.find(b=>b.key.value==="timeseries")?.value?.items.find(b=>b.key.value===t)?.key.range:s.items.find(v=>v.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===bi.aloha)return bi.aloha;let t=X6;r.startsWith("timeseries_")?t=W6:[Ge.relations,Ge.storage].includes(r)&&(t=V6);let s=this.previousVersion?.containers;return s&&(t=t.filter(i=>!Object.hasOwn(s,i))),t.find(i=>!Object.hasOwn(this.usedContainerNames,i))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(i=>i.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,i){let v=i.get("array"),c=[],u,b;if(v){u={name:r,library:t||null,length:v};for(let m=0;m<v;m++){let g=`${r.toLowerCase()}[${m}]`;c.push(this.buildDDEJsonField(g,i,{name:r,index:m},s,t,null))}}else{let m=this.buildDDEJsonField(r,i,null,s,t,null);c.push(m);let g=i.get("shadowFields");if(g){b={name:m.name,byteSize:m.byteSize,byteOffset:m.byteOffset};for(let[q,_]of g){let $=q;r.includes(".")&&($=r.split(".")[0]+`.${q}`),c.push(this.buildDDEJsonField($,_,null,s,t,m.name))}}}return{arrayInfo:u,shadowInfo:b,fields:c}}buildDDEJsonField(r,t,s,i,v,c){return{id:r.toLowerCase(),name:r,index:0,library:v||null,byteOffset:0,byteSize:i.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:c,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,ur.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let v=s.key.value;v==="timeseries"?s.value.items.forEach(c=>{c.key.value=`timeseries_${c.key}`,t.push(c)}):["dde","cloudProject","constants",Oa].includes(v)||t.push(s)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,s,i){if(!t.value)return;let c=t.key.value;if(i&&(c.startsWith("aloha")||c.startsWith("timeseries"))){let u=c.includes("_")?c.split("_")[1]:c;this.fileDiagnostics.push({file:r,level:"error",message:`"${u}" not allowed within a library`,...EA(s,t.key.range)})}if(X.isAnalytics(this.manifest)&&![Ge.relations,Ge.storage].includes(c)){let u=c.includes("_")?c.split("_")[1]:c;this.fileDiagnostics.push({file:r,level:"error",message:`"${u}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...EA(s,t.key.range)})}}validateContainerFields(r,t,s,i){let v=s.value;if(!v)return;let c=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,c)||(this.fieldNamesPerContainer[c]=[]);let u=this.getContainerOfPreviousVersion(c);v.items.forEach(b=>{let g=b.key.value;this.checkForContainerRelation(b,r,t,i),this.validateFieldName(b,c,t,i),this.checkFieldNameLength(b,c,t,i);let q=u?.fields.find(z=>z.id===g.toLowerCase()),_=b.value,$=_.get("type",!0),T=this.resolvePossibleAlias(r,$),M=_.get("bytes",!0),N=this.resolvePossibleAlias(r,M);q&&($&&T&&q.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${q.type}" to "${T}".
2768
2781
  Changing the type of an existing field can result in data loss or unexpected behaviour.`,...EA(i,$.range)}),M&&N&&q.byteSize!==N&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${q.byteSize}' to '${N}'.
2769
- Changing the size of an existing field can result in data loss or unexpected behaviour.`,...EA(i,M.range)}))})}checkForContainerRelation(r,t,a,i){let l=r.value.get("fields");l&&l.items.forEach(u=>{this.checkForContainerRelation(u,t,a,i)}),r.value.items.forEach(u=>{let b=u.value;if(b?.value&&m6.exec(`${b.value}`)){let m=u.key.value;if(m){if(!Object.hasOwn(Vf,m))return this.fileDiagnostics.push({file:a,level:"error",message:`Property "${m}" does not allow relations.`,...EA(i,b.range)});if(["scale","offset"].includes(m))return this.fileDiagnostics.push({file:a,level:"warning",message:`Container relations for "${m}" are not available within the dlo source.`,...EA(i,b.range)})}return this.validateContainerRelation(m,b,t,a,i)}})}validateFieldName(r,t,a,i){let l=this.fieldNamesPerContainer[t],c=r.key,u=c.value;j6(u)&&this.fileDiagnostics.push({file:a,level:"error",message:`Reserved property "${u}" is not allowed.`,...EA(i,c.range)});let b=r.value.get("shadowFields");b&&b.items.forEach(m=>{this.validateFieldName(m,t,a,i)}),l.includes(u.toLowerCase())?this.fileDiagnostics.push({file:a,level:"error",message:`Field name "${u}" is already occupied`,...EA(i,c.range)}):l.push(u.toLowerCase())}checkFieldNameLength(r,t,a,i){let l=r.key,c=l.value,b=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,m=31-b.length;b.length+c.length>31&&this.fileDiagnostics.push({file:a,level:"error",code:pn.CODE.ddeFieldLength,message:`Field name "${c}" to long. ${m} characters allowed for this field/container.`,...EA(i,l.range)})}validateContainerRelation(r,t,a,i,l){let[c,u,b]=t.value.split(".",3),[m,g]=c.split("@"),q=m?m.split(":")[1]:null,$=(q&&this.libraryYaml[q]?this.libraryYaml[q]:a).contents?.get(g),T=u.split("[")[0],M=null;if($){let N=$.get(T);if(N)if(b){let z=N.get("fields");z&&z.get(b)&&(M=z.get(b))}else M=N;else M=this.findRelatedShadowField($,T)}if(M){let N=Vf[r],z=M.get("type");N.includes(z)||this.fileDiagnostics.push({file:i,level:"error",message:`Related field type "${z}" is not allowed for attribute "${r}".`,...EA(l,t.range)})}else q&&!this.libraryYaml[q]?this.fileDiagnostics.push({file:i,level:"error",message:`Related library "${q}" does not exist.`,...EA(l,t.range)}):this.fileDiagnostics.push({file:i,level:"error",message:`Related field "${t.value}" does not exist.`,...EA(l,t.range)})}findRelatedShadowField(r,t){for(let a of r.items){let l=a.value.get("shadowFields");if(!l)continue;let c=l.get(t);if(c)return c}}mergeAndFormat(r,t,a,i){let l={containers:{},setPointList:{}};for(let c of this.libraryDDE)this.combineDDE(l,c);this.combineDDE(l,r);for(let c of Object.values(l.containers)){let u=c.transferDirection;c.transferDirection=this.normalizeTransferDirection(c.name,u),this.warnIfHistoryDirectionNarrowed(c,u,t,a,i)}return this.sortContainerFields(l),this.generateSetPointList(l),l}readFlexibleContainers(r){let t=a=>r instanceof Map?r.get(a)===!0:r&&typeof r=="object"?r[a]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(r){let t=Ma[r]?.ctype;if(t===An.hx)return"timeseries";if(t===An.cx||t===An.aloha)return"config"}flexibleSwitchFor(r){let t=this.flexibleSwitchGroupFor(r);return t?this.flexibleContainers[t]:void 0}isPlusDirection(r){return r===Jx.upPlus||r===Jx.downPlus||r===Jx.bothPlus}normalizeTransferDirection(r,t){let a=Ma[r]?.xmits,i=this.flexibleSwitchFor(r);if(!a||i===void 0)return t;let c=(i?[[Jx.up,Jx.upPlus],[Jx.down,Jx.downPlus],[Jx.both,Jx.bothPlus]]:[[Jx.upPlus,Jx.up],[Jx.downPlus,Jx.down],[Jx.bothPlus,Jx.both]]).find(([u,b])=>t===u&&a.includes(b));return c?c[1]:t}warnIfHistoryDirectionNarrowed(r,t,a,i,l){if(!this.historyPlusDirectionContainers.has(r.name)||!this.isPlusDirection(t)||r.transferDirection===t)return;let c=this.flexibleSwitchGroupFor(r.name),u=r.containerType===An.hx?`timeseries_${r.title}`:r.title,b=l?this.findContainerKeyRange(l,u):void 0;this.fileDiagnostics.push({file:a,level:"warning",message:`Container "${r.title}" was transferred with variable length ("${t}") in a previous build but "flexibleContainers.${c}" is not enabled - it now uses fixed-length "${r.transferDirection}". Enable the switch to keep variable-length transfer.`,...b?EA(i,b):{line:0,startCharacter:0,endCharacter:0}})}combineDDE(r,t){for(let[a,i]of Object.entries(t.containers)){let l=r.containers[a];l?(l.title=i.title,l.knownNames.unshift(i.title),l.libraries.push(...i.libraries),l.fields.push(...i.fields),l.arrays={...l.arrays,...i.arrays},l.shadows={...l.shadows,...i.shadows}):(l=r.containers[a]=structuredClone(i),l.knownNames.unshift(i.title),l.fieldCount=l.fields.length,l.fieldIndex=0);let c=this.initialContainerByteOffset(l);for(let[u,b]of l.fields.entries()){if(b.shadowRef){let m=l.shadows[b.shadowRef];b.byteOffset=m.byteOffset}else b.byteOffset=c,this.updateShadowFieldInformation(r.containers[a],b),c+=b.byteSize||0;u>l.fieldCount-1&&(b.index+=l.fieldIndex)}l.fieldIndex+=i.fieldIndex,l.knownNames=[...new Set(l.knownNames)],l.libraries=[...new Set(l.libraries)],l.fieldCount=l.fields.length}}initialContainerByteOffset(r){return r.containerType===An.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:a,containerSize:i}=this.sortFields(t);t.fields=a,t.size=i,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(m=>!m.shadowRef),a=r.fields.filter(m=>m.shadowRef),i=[],l=r.name;if(this.previousVersion.containers[l]){let m=this.sortPreviousContainerFields(r,t);i.push(...m)}else i.push(...t);i.forEach(m=>{this.updateShadowFieldInformation(r,m)});let u=i[i.length-1],b=u.byteSize+u.byteOffset;return a.forEach(m=>{m.byteOffset=r.shadows[m.shadowRef].byteOffset,i.push(m)}),{sortedFields:i,containerSize:b}}sortPreviousContainerFields(r,t){let a=r.name,i=this.previousVersion.containers[a],l=[],c=this.initialContainerByteOffset(r);for(let u of i.fields){if(u.shadowRef)continue;let b=t.findIndex(g=>u.id===g.name?.toLowerCase());if(b===-1){c=u.byteOffset+u.byteSize;continue}let m=t[b];if(u.type!==m.type&&u.byteSize!==m.byteSize){c=u.byteOffset+u.byteSize;continue}m.byteOffset=u.byteOffset,t.splice(b,1),l.push(m),c=this.initialContainerByteOffset(r)}if(c>this.initialContainerByteOffset(r)){let u=t.shift();l.push(...this.generatePlaceholderFieldIfNeeded(c,u)),this.updateShadowFieldInformation(r,u)}for(let u of t){if(u.shadowRef)u.byteOffset=r.shadows[u.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,u);let b=l[l.length-1];b.shadowRef&&(b=r.shadows[b.shadowRef]),u.byteOffset=b.byteOffset+b.byteSize}l.push(u)}return l}generatePlaceholderFieldIfNeeded(r,t){let a=[];if(t)t.byteOffset=r,a.push(t);else{let i={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};a.push(i)}return a}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let a of t.fields)a.chartSetPoint&&(Object.hasOwn(r.setPointList,a.name)||(r.setPointList[a.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(pi||={});var mA=Ax.TransferDirection,ee=Ax.parseXMLValueWithRelation,y6=Ax.parseXMLBitmask,_6=Ax.parseXMLDefaultValue,w6=Ax.fieldTypeDefinitions;function La(x,A){let r=[];function t(l,c=!0){if(c){if(Array.isArray(l)){r.push.apply(r,l);return}r.push(""+l)}}function a(l,c){l!=="mergeofs"&&t(`${l}=${c}`)}t("// DDE STRUCTURE created by Microtronics Studio");let i="source=rm2mraw";for(let[l,c]of Object.entries(A.containers)){l.startsWith("histdata")&&c.transferDirection!==mA.deviceOnly&&(t("<split>"),t(i),t("target="+l),t("key=0"+l.substr(-1,1)),t("</split>")),t("<table>"),a("name",l),a("alias",c.title),a("title",c.title.replace("_"," "));let u={};[mA.none,mA.backendOnly,mA.deviceOnly,mA.down,mA.downPlus].includes(c.transferDirection)&&a("upload","0"),[mA.none,mA.backendOnly,mA.deviceOnly,mA.up,mA.upPlus].includes(c.transferDirection)&&a("download","0"),(X.isIotApp(x)||X.isLibrary(x))&&[mA.up,mA.upPlus].includes(c.transferDirection)&&a("edit","99");for(let b of c.fields){if(b.type==="shadow")continue;let m=S6(b),g=w6[m.type],q=ee("title",m,A)||m.name;!q.startsWith("%")&&m.library&&(q=`${m.library}: ${q}`);let _={title:q,alias:m.name,index:b.index,...u};_.byteofs=`${m.byteOffset}`;for(let[$,T]of Object.entries(g.xml))_[$]=T;Object.hasOwn(g,"xmlOut")&&g.xmlOut(_,m,A),_.units=ee("unit",m,A),_.chmode=ee("channelMode",m,A),_.ialarm_high=ee("chartAlarmHigh",m,A),_.ialarm_low=ee("chartAlarmLow",m,A),_.iwarn_high=ee("chartWarningHigh",m,A),_.iwarn_low=ee("chartWarningLow",m,A),_.hysterese=ee("chartHysteresis",m,A),_.itrigger=ee("chartTriggerThreshold",m,A),_.itriggerus=ee("chartTriggerRelation",m,A),_.setpoint=ee("chartSetPoint",m,A),_.bitmask=y6(m),m.hex&&(_.editmask="%HEX%"),m.readPermission&&(_.view=m.readPermission),m.writePermission&&(_.edit=m.writePermission),m.defaultValue!==void 0&&(_.default=_6(m)),m.utilsTransferInterval===!0&&(_.param0="%FFFF0005%transfer_interval"),t("<field>"),m.library&&t(`// declared by ${m.library} library`,!0);for(let[$,T]of Object.entries(_))T!==void 0&&a($,`${T}`);t("</field>")}["alerts","applog"].includes(l)||(t("</table>"),t("// "+c.size+" bytes total size"))}return t("<split>"),t(i),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(i),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
2770
- `)}function S6(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=T0.patchValueWithArrayInfo(t,e);return A}var ke=Y0(require("semver"));var re=Y0(require("semver"));var Ua=require("vscode-uri");var Zx=Ax.ContainerType,z0=Ax.TransferDirection,en=Ax.regexRelation,q6=Ax.CONFIG_CONTAINER,Ga=Ax.CONTAINER_DEF_DLO_CID_BASE,nn=Ax.CONTAINER_DEFS,tn=Ax.fieldTypeDefinitions,Yf=T0.isNumeric;function NA(x){let A=tn[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var bi="Microtronics/dlo-core";function Ha(x){return X.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,bi)?px.rangeToVersion(x.libraryDependencies[bi]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,bi)?px.rangeToVersion(x.libraryDevDependencies[bi]):null}function T6(x){let A=Ha(x);return A===null||re.gte(A,"0.3.0")?re.valid(x.version)?x.version:re.coerce(`${x.version}`):re.coerce(x.version)?.major}function Oa(x){let A=Ha(x);if(A===null)return!1;let e=re.coerce(A);return re.gte(e,"1.1.0")}function P6(x){let A=Ha(x);if(A===null)return!1;let e=re.coerce(A);return re.gte(e,"1.15.0")}var $6=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function N6(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=NA(x);return!A||A==="skip"?!1:$6.includes(`${A.rwfunc}`)}function I6(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:a}=Xi[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let i=T6(e);A("APM_VERSION",`${i}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[l,c]of Object.entries(a))Yf(c)?A(l,`${c}`):A(l,`"${c}"`)}function M6(x,A,e,r){let t=r.flat,{definesWithSource:a}=r;A("GLOBAL DEFINES");for(let[i,l]of Object.entries(t)){let c=a[i]?.comment;if(c){let b=c.split(`
2771
- `);if(b.length===1)x(`/** ${b[0]} */`);else{x("/**");for(let m of b)x(` * ${m}`);x(" */")}}let u=Object.hasOwn(t,l);e(i,`${l}`,u)}}function R6(x,A,e,r){let t=parseInt(x.substring(6)),a=1<<t;e[t]=A.size,r.cx_isupm|=[z0.both,z0.none,z0.deviceOnly,z0.up,z0.upPlus].includes(A.transferDirection)?a:0,r.cx_isvolatilem|=A.volatile?a:0,r.cx_isdnm|=[z0.both,z0.none,z0.deviceOnly,z0.down,z0.downPlus].includes(A.transferDirection)?a:0,r.cx_isvlm|=[z0.bothPlus,z0.upPlus,z0.downPlus].includes(A.transferDirection)?a:0}function L6(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[z0.upPlus].includes(A.transferDirection)?1<<t:0}function O6(x){return[z0.upPlus].includes(x.transferDirection)}function G6(x,A,e){let r=0,t=Array(10).fill(0),a={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},i=0,l=Array(10).fill(0),c={hx_isvlm:0},u;for(let[m,g]of Object.entries(e.containers))g.containerType===Zx.cx&&g.transferDirection!==z0.backendOnly?(R6(m,g,t,a),r=Math.max(r,g.size)):g.containerType===Zx.hx?(L6(m,g,l,c),r=Math.max(r,g.size)):g.containerType===Zx.aloha&&(u=O6(g),r=Math.max(r,g.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${a.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${a.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${a.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${a.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${i.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${l.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${c.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let b=[...l];Object.hasOwn(e,"applog")&&b.push(125),Object.hasOwn(e,"alerts")&&b.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...b)}`),x(""),u!==void 0&&(x(`#define _DDE_ALOHA_varlen ${u?1:0}`),x(""))}function U6(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let a=Ga(t.containerType,t.transferDirection);if(!a){x("// ... container not available in DLO");continue}let i=`DDE_${t.containerType===Zx.aloha?Zx.aloha:t.title}`,l=nn[r];x(`// ${i}_id - container identifier required for ${i}_read/_write operations`),x(`#define ${i}_id (${a}+${l.cnum||0})`),x(`// ${i}_sz - [byte] container total size`),x(`#define ${i}_sz ${t.size}`),l.cnum!==void 0&&(x(`// ${i}_idx - 0+ container index number`),x(`#define ${i}_idx ${l.cnum}`))}}function Qf(x,A,e){let r=[],t=r.push.bind(r);function a(l){t(`
2772
- // === ${l} ===
2773
- `)}function i(l,c,u=!1){let b=Yf(c)?"":'"';u&&(b=""),t(`#define ${l} ${b}${c}${b}`)}return I6(a,i,e),M6(t,a,i,A),G6(t,a,x),U6(t,a,x),r.join(`
2774
- `)}var sn=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!Ga(e.containerType,e.transferDirection)||!e.fields||!this.context&&!Ax.hasContainerAppFields(e)||nn[A].ctype!==Zx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let a=this.generateCommentForField(e);a&&(Array.isArray(a)?(this.pawn("/**"),a.forEach(i=>{this.pawn(` * ${i}`)}),this.pawn(" */")):this.pawn(`// ${a}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let a=this.generateFieldVariableName(e,t);this.createGlobalVar(`${a}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let a=e.arrays[t.arrayRef.name],i=`${A}_${t.arrayRef.name}`,l="";a.fields?.length&&(l=t.name.split(".")[1],i+=`_${l}`),this.createDefaultDefineForField(i,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(l,t))}return r}isPlainCellField(A){if(A.type==="struct"||!tn[A.type])return!1;let e=NA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let a of A.fields){let i=e.get(a.name);if(i!==void 0&&!this.isPlainCellField(i)||!this.isPlainCellField({type:a.type}))return"";r.push(i?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let a=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${a} ${t.length}`),t.fields){for(let c of t.fields)tn[c.type]?.isBlob&&c.byteSize&&this.addDefine(`${A}_${t.name}_${c.name}_dim`,c.byteSize);let i={...e};i.fields=[],t.fields.forEach(c=>{i.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:c.byteSize,id:c.name,library:t.library,name:c.name,type:c.type,title:null,index:0})});let l=`${A}_${t.name}_def`;this.generateTypeDefinitions(i,l),this.createGlobalVar(`${A}_${t.name}[${a}][${l}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${a}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(tn,e.type)&&tn[e.type].isBlob,a=e.byteSize;return a&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${a}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${a};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let a of r){let i=this.generateFieldTypeDefinition(a,A,t,e);i!==null&&this.pawn(i)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let a=A.arrayRef;if(a){let c=e.arrays[a.name];if(!r.includes(a.name)&&!c.fields)r.push(a.name);else return null}let i=A.arrayRef?A.arrayRef.name:A.name,l=A.arrayRef?`[${t}_${i}_dim]`:"";return{fieldName:i,fld_dim:l}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let a=this.handleArrayFieldDedup(A,e,r,t);if(a===null)return null;let{fieldName:i,fld_dim:l}=a,c="";if(A.type==="struct")c="// ."+i+l;else{let u=NA(A);if(!u)return null;u==="skip"?c=`// skipped - .${i}${l}`:c+=u.rwp.replace("%n",`.${i}${l}`).replace("%l",A.byteSize)}return c+=",",A.library&&(c+=` // declared by ${A.library} library`),c}variableNameForPawnDefinition(A,e){let r=NA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&N6(e)){let{value:r,reason:t}=this.parseFieldDefault(e),a=`${A}_default`;this.addDefine(a,r,t)&&(e.defaultDloDefine=a)}}addDefine(A,e,r){return en.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=nn[e],t=`DDE_${A.containerType===Zx.aloha?Zx.aloha:A.title}`;[z0.both,z0.bothPlus,z0.none,z0.deviceOnly,z0.up,z0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===Zx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[Zx.hx,Zx.aloha].includes(e.containerType),a=e.containerType===Zx.hx,i=e.containerType===Zx.aloha,l=`_${A}_write`,c=Oa(this.manifest)?", flags":"",u=a?`stamp${c}`:"",b=Oa(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${l}(${a?b:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${i?Zx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${u});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let m=`${A}_transfer`,g=`${A}_persist`,q=this.functionArgumentsForDdeWrite(a,t);if(this.pawn(">",`${this.context?"stock ":""}${m}(${q}) {`),t)this.pawn(`${l}(${u});`);else{let _=e.name.slice(-1);this.pawn(`dde_flush(${_}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${g}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Oa(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,a,i,l){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,l);let c=e.arrayRef.name,u=a.get(c);return u?i.has(c)?l:(i.add(c),this.emitArrayLoop(A,u,r)):this.emitSingleField(A,e,r,t,l)}generateRWFunctionBody(A,e,r){let t=e.fields,a=this.analyzeArrayGroups(t,A,e),i=new Set,l=-1;for(let c of t){if(this.isFieldSkipped(c))continue;let u=NA(c);!u||u==="skip"||(l=this.emitFieldRW(A,c,r,u,a,i,l))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||P6(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,a){e.byteOffset!==a&&this.pawn(`_dde_idx = ${e.byteOffset};`);let i="";i+=r,i+=t.rwfunc;let l=`${A}_${e.name}`;return i+=`(${l}`,t.rwlen&&(i+=`, ${e.byteSize}`),i+=this.defaultArgumentFor(e,r),this.pawn(i+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let a of e.templateFields){let i=NA(a);if(!i||i==="skip")continue;let l=a.byteOffset;l!==t&&this.pawn(`_dde_idx = ${l} + (_i * ${e.stride});`),t=l+a.byteSize;let c=`${A}_${a.name.replace(/\[\d+\]/,"[_i]")}`,u=`${r}${i.rwfunc}(${c}`;i.rwlen&&(u+=`, ${a.byteSize}`),u+=this.defaultArgumentFor(a,r),this.pawn(u+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=NA(r);if(!t||t==="skip")continue;let{name:a,index:i}=r.arrayRef;e.has(a)||e.set(a,new Map);let l=e.get(a);l.has(i)||l.set(i,[]),l.get(i).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[a,i]of A){let l=r.arrays[a];if(!l||l.length<2)continue;let c=i.get(0),u=i.get(1);if(!c||!u||c.length===0||u.length===0||c.length!==u.length)continue;let b=this.validateArrayStride(c,u);b!==null&&t.set(a,{arrayName:a,dimDefine:`${e}_${a}_dim`,stride:b,templateFields:c})}return t}parseFieldDefault(A){let e=NA(A),r=A.defaultValue;function t(i,l){return{value:i,reason:l}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let l=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(l)}}if(r==="NaN"){let i=e.rwfunc;return t(`${i}_NaN`.toUpperCase())}let a=this.parseFieldScaleOffset(A);return a?t(a.calculated,a.reason):(r!==void 0&&!en.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!en.exec(`${A.offset}`)||!!en.exec(`${A.scale}`)||!!en.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,a=A.scale!==void 0?Number(A.scale):1;if(a===0)return null;let i=(Number(e)-t)/a,l=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${a}`;return A.type.startsWith("float")?i%1===0&&(i=i.toFixed(1)):(i=Math.round(i),l=`Rounded value of: ${l}`),{calculated:i,reason:l}}return null}};function H6(x){return`${`onUplinkApply_${x}()`};`}function Zf(x,A,e){A.libraries.forEach(r=>{let t=T0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function J6(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${T0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function K6(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))nn[r].ctype===Zx.cx&&([z0.up,z0.upPlus,z0.deviceOnly].includes(t.transferDirection)&&e.push(t),[z0.bothPlus,z0.both,z0.downPlus,z0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function z6(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),Zf(x,e,"Restore"),Ax.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function V6(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),Zf(x,e,"Apply"),Ax.hasContainerAppFields(e)&&x(` ${H6(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function xl(x,A){let e=[],r=e.push.bind(e);J6(r,A);let{containerApply:t,containerRestore:a}=K6(x);return z6(r,a),V6(r,t),e.join(`
2775
- `)}var W6=q6.map(x=>`_DDE_${x}_write`);function Al(x){let A=[],e=A.push.bind(A),r=[...W6];for(let[t,a]of Object.entries(x.containers)){let i=Ga(a.containerType,a.transferDirection),l=nn[t];if(!i||!a.fields||l.ctype!==Zx.cx)continue;let c=`DDE_${a.name}`,u=`DDE_${a.title}_id`;if([z0.both,z0.bothPlus,z0.none,z0.deviceOnly,z0.up,z0.upPlus].includes(a.transferDirection)){let b=`_${c}_write`;e(`stock ${b}() {`),e(` dde_wbegin(${u});`),Xf(e,a,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(b),1)}if(l.ctype===Zx.cx){let b=`_${c}_read`;e(`stock ${b}() {`),e(` if (dde_rbegin(${u})) return ERROR;`),Xf(e,a,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
2776
- `)}function Xf(x,A,e){A.libraries.forEach(r=>{let t=T0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),Ax.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function el(x,A){let e=[],r=await px.getApmPartDependencies(x,A,_0.Part.dlo,!0);await rn(x,A,e,s0.fileNames.autoInc);let t=await X6(x,A,r);for(let a of r)a.name==="local-data-interface"&&await rn(x,A,e,s0.fileNames.autoLocalDataInc),e.push(`#include <${a.name}>`),a.name==="dlo-core"&&(e.push(...t),await rn(x,A,e,s0.fileNames.autoDdeInc.replace("X","app")),await rn(x,A,e,s0.fileNames.autoDdeInc.replace("X","main")));return r.some(a=>a.name==="dlo-core")&&await rn(x,A,e,s0.fileNames.autoUplinkInc),e.join(`
2777
- `)}async function X6(x,A,e){let r=[];for(let t of e){let a=s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(Ua.Utils.joinPath(x,a))&&r.push(`#include "${s0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function rn(x,A,e,r){let t=Ua.Utils.joinPath(x,s0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var tl=Y0(require("semver")),nl=require("yaml");var IA=Ax.ContainerType,ji=Ax.TransferDirection,Y6=Ax.fieldTypeDefinitions,kt={$ref:"#/components/parameters/contextId"},Q6={$ref:"#/components/parameters/addonId"},Z6={$ref:"#/components/parameters/appId"},rl={$ref:"#/components/schemas/histdataResponse"},xp={$ref:"#/components/schemas/histdataRequest"},hi={$ref:"#/components/schemas/rapidM2MStamp"},Ap={$ref:"#/components/schemas/timeseriesRequestBase"},ep={$ref:"#/components/headers/xMtBackfill"},rp="x-mt-backfill",Ja={[rp]:ep},mi="rapidM2M Stamp",te={description:"Successful operation"},il={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}},headers:{xMtBackfill:{description:["Only set by the local PoV API of the companion app, never by the myDatanet server.",'Present (value "pending") while the companion app is still fetching the requested time range from the device (on-demand backfill).',"The body is always answered immediately from the local data mirror in the normal shape; the loading signal lives only in this header.","Clients should show a loading indicator and re-issue the same request (poll) until the header disappears - every poll reads the by-then-larger mirror.",'A backfill is only armed by an explicit "from" stamp in the request; a request without "from" or with from: "*" never triggers a device fetch.',"The header is absent when the range is already local, the fetch completed within the internal grace wait, no device is connected, the connected device belongs to another site, the fetch failed (15 s cooldown before retry) or the device no longer retains the range.",'A range the device no longer holds simply stays empty and should be rendered as an empty/partial result, not as an error. Deep ranges can stay "pending" for a while, a completed depth is persisted and never fetched twice.'].join(" "),schema:{type:"string",enum:["pending"]}}}},sl={...structuredClone(il)};Object.assign(sl.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[hi,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:mi,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:mi,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:mi,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:mi,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var an={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Dr={401:{description:"Permission denied",...an},403:{description:"Forbidden",...an},404:{description:"Resource not found",...an},500:{description:"Internal error",...an}};function Ka(x,A,e=null){let r=tl.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{},headers:{}}};e?Object.assign(t.components,structuredClone(il)):Object.assign(t.components,structuredClone(sl));let a=X.isAddon(A),i=X.isAnalytics(A);a&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let l of Object.values(x.containers))e&&(!l.libraries.includes(e)||l.containerType===IA.hx)||!e&&!Ax.hasContainerAppFields(l)||l.containerType===IA.aloha||(tp(t,l),ip(t,l,e),op(t,l,a,i),!a&&!i&&(np(t,l,e),ap(t,l)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,nl.stringify)(t)}function tp(x,A){x.tags.push({name:jA(A.title),description:`Transfer direction ${A.transferDirection}`})}function jA(x){return x.split("_").join(" ")}function np(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},a=[];A.containerType===IA.hx&&(r+="Select",a.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let i of A.fields)i.library!==e||i.type==="shadow"||(A.containerType===IA.hx?t.properties.select.items.enum.push(i.id):(t.properties[i.id]=al(i),!i.readPermission&&!i.writePermission&&a.push(i.id)));t.required=a.length?a:void 0,x.components.schemas[r]=t}function ip(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},a=[],i=A.containerType===IA.hx;for(let c of A.fields)c.library!==e||c.type==="shadow"||(t.properties[c.name]=al(c),!c.readPermission&&!c.writePermission&&a.push(c.name));t.required=a.length?a:void 0,x.components.schemas[r]=t;let l=t.properties;if(i){t.required=t.required?.map(u=>u.toLowerCase());let c={};for(let[u,b]of Object.entries(t.properties))c[u.toLowerCase()]=b;t.properties=c}if(i){let c={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(l)}}}};x.components.schemas[`${r}RequestSingle`]=c,x.components.schemas[`${r}Request`]={allOf:[Ap,c]},t.properties.stamp=hi,a.push("stamp")}}function al(x){let e={...Y6[x.type].openApi},r=sp(x);return e.default=r,e.example=r,e.description=x.description,e}function sp(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function ap(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([IA.cx,IA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[jA(A.title)],summary:`Retrieve the data of the "${jA(A.title)}" container`,parameters:[kt],responses:{200:{...te,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:hi}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Dr}},[ji.down,ji.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[jA(A.title)],summary:`Modify the data of the "${jA(A.title)}" container`,parameters:[kt],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...te},204:{...te},...Dr}});else if(A.containerType===IA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[jA(A.title)],summary:`Retrieve the youngest data of the "${jA(A.title)}" container`,parameters:[kt,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...te,content:{"application/json":{schema:rl}}},...Dr}},x.paths[t]={get:{deprecated:!0,tags:[jA(A.title)],summary:`Get the historical data of the "${jA(A.title)}" container.`,parameters:[kt,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},xp]}}],responses:{200:{...te,headers:Ja,content:{"application/json":{schema:rl}}},...Dr}}}}x.paths[e]=r}function op(x,A,e=!1,r=!1){let a=A.containerType===IA.hx?"timeseries":"containers",i=[],l=jA(A.title);r||i.push({path:`/api/1/sites/{siteUid}/${a}/${A.title}`,params:[kt],tags:[l]}),e&&(i=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${a}/${A.title}`,params:[kt,Q6],tags:[l]}]);let c={path:`/api/1/app-center/apps/{appUid}/${a}/${A.title}`,params:[Z6],tags:["app-center"]};r&&c.tags.push(l),i.push(c);let u={get:void 0,put:void 0,post:void 0},b={tags:[],summary:`Retrieve the data of the "${jA(A.title)}" container`,parameters:[],responses:{200:{...te,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:hi}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Dr}};if([IA.cx,IA.cb].includes(A.containerType)&&(u.get=b,[ji.down,ji.backendOnly].includes(A.transferDirection)&&(u.put={tags:[],summary:`Modify the data of the "${jA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...te},204:{...te},...Dr}}),i.forEach(m=>{let g=structuredClone(u);Object.values(g).forEach(q=>{q?.parameters?.unshift(...m.params),q?.tags?.unshift(...m.tags)}),x.paths[m.path]=g})),A.containerType===IA.hx){u.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...te,headers:Ja,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Dr}},e&&(u.post={tags:[],summary:`Insert data into the "${jA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...te},400:{description:"Bad request",...an},...Dr}});let m=i[0],g=structuredClone(u);Object.values(g).forEach(z=>{z?.parameters?.unshift(...m.params),z?.tags?.unshift(...m.tags)}),x.paths[m.path]=g;let q={...te,headers:Ja,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},_=`${m.path}/youngest`,$={get:structuredClone(g.get)};$.get.summary=`Get the youngest record of "${A.title}" container`,$.get.responses[200]=q;let T=e?2:1;$.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[_]=$;let M=`${m.path}/oldest`,N={get:structuredClone(g.get)};N.get.summary=`Get the oldest record of "${A.title}" container`,N.get.responses[200]=q,N.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[M]=N}}var Fl=Ax.TransferDirection,gi=" new szTemp{64};",ki=" return strcat(aData, szTemp, sizeof(szTemp));";function vl(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function za(x){if(x.type==="shadow"||x.shadowRef)return null;let A=NA(x);return!A||A==="skip"?null:vl(A)}function fl(x){return[Ax.ContainerType.hx,Ax.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Fl.backendOnly}function Fp(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=NA(x);return!!A&&A!=="skip"}function vp(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",a=`${x.arrayRef.name}|${t}|${A}`;e.has(a)||e.set(a,{fields:[],formatType:A}),e.get(a).fields.push(x)}function fp(x){let A=[],e=new Map,r=new Set,t=!1;for(let a of x){if(!Fp(a))continue;let i=za(a);a.arrayRef&&i?vp(a,i,e):(A.push(a),i?r.add(i):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function lp(x,A,e){e.sort((u,b)=>u.arrayRef.index-b.arrayRef.index);let r=e.map(u=>u.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((u,b)=>b===0||u-r[b-1]===t)))return null;let[i,l]=A.split("|"),c=e[0].library?`_${T0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:i,subField:l,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:za(e[0]),pawnVarBase:`${c}${x}_${i}`}}function cp(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:a}=fp(A),i=[];for(let[l,c]of r){let{fields:u,formatType:b}=c;if(u.length<2){e.push(...u),t.add(b);continue}let m=lp(x,l,u);m?(t.add(b),i.push(m)):(e.push(...u),t.add(b))}return e.sort((l,c)=>l.byteOffset-c.byteOffset),{arrayGroups:i,standaloneFields:e,usedFormats:t,hasInlineFields:a}}function Ep(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(fl(e))for(let r of e.fields){let t=za(r);t&&A.add(t)}return A}function Bp(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(gi),x(' sprintf(szTemp, _, "%d", value);'),x(ki),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(gi),x(' sprintf(szTemp, _, "%.3f", value);'),x(ki),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(gi),x(' sprintf(szTemp, _, "%s", value);'),x(ki),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(gi),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(ki),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function Cp(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function dp(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function up(x,A){let{startOffset:e,endOffset:r,step:t,formatType:a,pawnVarBase:i,subField:l}=A,c=Cp(e,t),u=dp(e,r,t);if(x(` if (${u}) {`),a==="bin"){let b=`${i}[${c}]${l}`,m=l?l.substring(1):"",g=m?`${i}_${m}_dim`:`${i}_dim`;x(` return _DDE_fmt_bin(aData, ${b}, ${g});`)}else x(` return _DDE_fmt_${a}(aData, ${i}[${c}]${l});`);x(" }")}function Dp(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=NA(e);if(!r||r==="skip")return;let a=`${e.library?`_${T0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,i=vl(r);if(i==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${a}, ${a}_dim);`);else if(i)x(` case ${e.byteOffset}: return _DDE_fmt_${i}(aData, ${a});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let l=a;r.printfFormat&&(l=`(${r.printfFormat}(${l}))`),x(` sprintf(szTemp, _, "${r.printf}", ${l});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function pp(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function ol(x,A,e){let r=e===Ax.ContainerType.cx?"c":"h",t=e===Ax.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[a,i]of Object.entries(A.containers))e===i.containerType&&a.startsWith(t)&&i.transferDirection!==Fl.backendOnly&&pp(x,a,i);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function bp(x,A){let e=cp(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)up(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)Dp(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function mp(x,A){for(let[,e]of Object.entries(A.containers))fl(e)&&bp(x,e)}function ll(x){let A=[],e=A.push.bind(A),r=Ep(x);return Bp(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),ol(e,x,Ax.ContainerType.cx),ol(e,x,Ax.ContainerType.hx),e(" return OK;"),e("}"),mp(e,x),A.join(`
2778
- `)}var Cl=T0.yamlRangeToLineInformation,on=s0.filePaths.dde.path,Ae;(F0=>{let x=Ax.DDEJson,A=T0.convertBlobToString;F0.DDE_SCHEMA=Uo;async function r(R,k){let O=await k.readFile(R);return A(O)}F0.readYamlFile=r;async function t(R,k,O=s0.fileNames.mainDDE,W){let Y=[],H=await X.read(R,k),V=await cl(R,k,H);if(W)for(let x0 of V){let{result:f0,unresolvedKeys:U}=gx.replaceDefineTemplates(x0.yaml,W);x0.yaml=f0;for(let v0 of U)Y.push({file:x0.path,level:"error",message:`Unresolved define template: {{${v0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let x0 of V)Y.push(...c(x0.path,x0.yaml));let n0=qx.Utils.joinPath(R,on,O),r0=await r(n0,k);if(W){let{result:x0,unresolvedKeys:f0}=gx.replaceDefineTemplates(r0,W);r0=x0;for(let U of f0)Y.push({file:n0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return Y.push(...c(n0,r0)),{manifest:H,libraryFiles:V,main:{path:n0,yaml:r0},diagnostics:Y}}F0.validate=t;async function a(R,k,O,W=s0.fileNames.mainDDE){let Y=await X.read(R,k),H=await gx.read(R,k,O),V=await t(R,k,W,H.flat);if(V.diagnostics.filter(p0=>p0.level==="error").length>0)return{ddeJSON:null,diagnostics:V.diagnostics};let r0=await q(R,k,O),x0=new pi.PreCompiler(Y,V.libraryFiles,r0),f0=x0.parseLibraries();if(f0.find(p0=>p0.level==="error"))return{ddeJSON:null,diagnostics:[...V.diagnostics,...f0]};let{ddeJSON:v0,diagnostics:c0}=x0.parseMainDDE(V.main.path,V.main.yaml);return{ddeJSON:v0,diagnostics:[...V.diagnostics,...c0]}}F0.compileDDE=a;let i=new El.default({strict:!1,allErrors:!0,verbose:!0});(0,Bl.default)(i);let l=i.compile(F0.DDE_SCHEMA);function c(R,k){let O=new yi.LineCounter,W=(0,yi.parseDocument)(k,{lineCounter:O,keepSourceTokens:!0}),Y=[];for(let n0 of W.errors){let r0=n0.pos?Cl(O,[n0.pos[0],n0.pos[1],n0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};Y.push({file:R,level:"error",message:n0.message,...r0})}if(Y.length>0)return Y;let H=W.toJSON();if(!l(H)){let r0=(l.errors||[]).filter(f0=>f0.keyword!=="if"),x0=new Set;for(let f0 of r0){let U=gp(f0);if(x0.has(U))continue;x0.add(U);let v0=yp(W,O,f0);Y.push({file:R,level:"error",message:U,...v0})}}return Y}F0.validateJsonSchema=c,F0.PreCompiler=(R,k,O)=>new pi.PreCompiler(R,k,O);function b(R,k){return La(R,k)}F0.generateMyDatanetXML=b;async function m(R,k,O,W){let Y=await X.read(R,k),H=La(Y,W),V=qx.Utils.joinPath(R,s0.filePaths.dist.ddeXmlPath);await k.writeFile(V,H),O.log("Generated",s0.filePaths.dist.ddeXmlPath)}F0.exportMyDatanetXML=m;async function g(R,k,O,W,Y){let H=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dde.historyJson);await k.rm(H).catch(console.error);let V=await X.read(R,k);if(!X.isApp(V)||!V.registry?.id)return;if(!Y){O.warn("Could not fetch dde of previous version: No API token provided.");return}let n0=ke.coerce(V.version);try{let f0=(await hx.getExistingApplication(Y,V.publisher,V.registry.id,W)).versions.find(p0=>!ke.prerelease(p0.version)&&ke.lte(p0.version,n0)),U=f0?.files.find(p0=>p0.name==="dde.json");if(!U){O.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let v0=await fetch(U.downloadUrl,{headers:{...SA(Y),...hx.injectSemverHeader(!0)}});if(v0.status!==200){O.warn(`Could not fetch the dde.json of version "${f0?.version}"`);return}let c0=await v0.text();await k.writeFile(H,c0),O.log(`Saved history.json of previous app version ${f0.version}`)}catch(r0){O.error("Failed to fetch the dde of previous version",r0)}}F0.fetchPreviousHistoryJson=g;async function q(R,k,O){try{let W=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dde.historyJson);if(await k.stat(W)){let H=await k.readFile(W);return JSON.parse(A(H))}let Y=qx.Utils.joinPath(R,on,"history.json");if(await k.stat(Y)){O.warn(`"${s0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${on}history.json"`);let H=await k.readFile(Y),V=JSON.parse(A(H)),n0=await X.read(R,k),r0=ke.coerce(n0.version)?.version,x0=Object.keys(V||{}).sort(ke.rcompare).find(U=>U!==r0);if(!x0)return null;let f0=V[x0];return{version:x0,...f0}}}catch(W){O.error("Failed to read history.json",W)}return O.warn("history.json does not exist"),null}F0.getHistoryJson=q;function _(R,k){return{version:ke.coerce(k.version)?.version||"1.0.0",...structuredClone(R)}}F0.buildHistoryJson=_;async function $(R,k,O,W){let Y=await X.read(R,k),H=_(W,Y),V=qx.Utils.joinPath(R,s0.filePaths.dist.historyJson);await k.writeFile(V,JSON.stringify(H,null," ")),O.log("Generated",s0.filePaths.dist.historyJson)}F0.exportHistoryJson=$;async function T(R,k){return k.rm(qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.path))}F0.clearAutoDloDir=T;async function M(R,k,O,W){await T(R,k);let Y=await X.read(R,k),H=await cl(R,k,Y),V=await gx.read(R,k,O),n0=Qf(W,V,Y),x0=new sn(Y,W,null).generate();for(let dx of H){let iA=new sn(Y,W,dx.libraryName),{globals:LA,helper:Kx}=iA.generate(),H0=[...LA,...Kx].join(`\r
2779
- `),G0=s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",dx.libraryName),ox=qx.Utils.joinPath(R,G0);H0.length&&(O.log("Generated",G0),await k.writeFile(ox,H0))}let f0=Al(W),U=xl(W,H.map(dx=>dx.libraryName)),v0=ll(W),c0=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(c0,n0),O.log("Generated",s0.filePaths.studio.auto.dlo.autoInc);let p0=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(p0,U),O.log("Generated",s0.filePaths.studio.auto.dlo.autoUplinkInc);let b0=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(b0,v0),O.log("Generated",s0.filePaths.studio.auto.dlo.autoLocalDataInc);let I0=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(I0,[...x0.globals,...x0.helper].join(`
2780
- `)),O.log("Generated",s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(L0,f0),O.log("Generated",s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await z(R,k,O)}F0.exportAutoDloFiles=M;async function N(R,k,O,W){let Y=await X.read(R,k),H=X.isLibrary(Y),V=qx.Utils.joinPath(R,s0.filePaths.dist.path,"dde-api.yaml");await k.rm(V).catch(()=>{});let n0=qx.Utils.joinPath(R,s0.filePaths.dist.ddeApi);if(await k.writeFile(n0,Ka(W,Y)),O.log("Generated",s0.filePaths.dist.ddeApi),H){let r0=qx.Utils.joinPath(R,s0.filePaths.dist.ddeApiPath,`${Y.name}.yaml`),x0=Ka(W,Y,Y.name);x0.length&&(await k.writeFile(r0,x0),O.log("Generated",s0.filePaths.dist.ddeApiPath+`${Y.name}.yaml`))}}F0.exportOpenApi=N;async function z(R,k,O){let W=qx.Utils.joinPath(R,s0.filePaths.studio.auto.dlo.defaultInc),Y=await el(R,k);await k.writeFile(W,Y),O.log("Generated",s0.filePaths.studio.auto.dlo.defaultInc)}F0.exportDefaultInc=z})(Ae||={});async function cl(x,A,e){let r=[],t=await px.getAll(e);for(let a in t){let i=px.dependencyToPath(x,a),l=px.dependencyIdToName(a),c=qx.Utils.joinPath(i,`${on}/${l}.dde`);await A.stat(c)&&r.push({libraryName:l,path:c,yaml:await Ae.readYamlFile(c,A)})}if(X.isLibrary(e)){let a=qx.Utils.joinPath(x,`/${on}/${e.name}.dde`);await A.stat(a)&&r.push({libraryName:e.name,path:a,yaml:await Ae.readYamlFile(a,A)})}return r}function jp(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function hp(x,A,e,r){let a={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return a?a():e}function gp(x){let A=x.instancePath||"/",e=x.parentSchema,r=jp(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${hp(x.keyword,x.params,t,e)}`}function kp(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),a=x.getIn(t,!0);if(a?.range)return a.range}return null}function yp(x,A,e){let r=kp(x,e.instancePath||"");return r?Cl(A,r):{line:0,startCharacter:0,endCharacter:0}}var Va=require("vscode-uri");var _i;(e=>{async function x(r,t,a){let i=await X.read(r,t);if(await X.isApmPartEnabled(r,t,_0.Part.pov)){a.info("Executing POV build script",i.pov?.details.buildCommand);let{buildCommand:l,workingPath:c}=i.pov.details,u=Va.Utils.joinPath(r,c);try{await dl(u,l,a)}catch(b){throw b.code?new Error(`APM part '${_0.Part.pov}' has errors. Aborted.`):b}}}e.tryBuildPov=x;async function A(r,t,a){let i=await X.read(r,t);if(await X.isApmPartEnabled(r,t,_0.Part.blo,i)){a.info("Executing BLO build script",i.blo?.buildCommand);let{buildCommand:l,workingPath:c}=i.blo,u=Va.Utils.joinPath(r,c);try{await dl(u,l,a)}catch(b){throw b.code?new Error(`APM part '${_0.Part.blo}' has errors. Aborted.`):b}}}e.tryBuildBlo=A})(_i||={});async function dl(x,A,e){let r=$e.parseCommandLine(A);await $e.run(x,r,e)}var Fn=require("@gera2ld/tarjs"),ul=T0.convertBlobToString,Wa=require("pako"),Sx;(m=>{class x extends Error{_mergedDiagnostics;constructor(q,_){super(q),this.name="BuildError",this._mergedDiagnostics=_}get mergedDiagnostics(){return this._mergedDiagnostics}}m.BuildError=x;async function A(g,q,_,$,T,M=!0,N){M=_p(_,M),await wp(g,q,_,$,T,M);try{let R=await gx.read(g,q,_);await Sp(g,q,_,R)}catch(R){_.warn("Could not generate defines.ts:",R)}let z={[_0.Part.dde]:[],[_0.Part.dlo]:[],[_0.Part.dfiles]:[]},F0={[_0.Part.dde]:qp,[_0.Part.dlo]:Tp,[_0.Part.dfiles]:Pp};try{for(let R of[_0.Part.dde,_0.Part.dlo,_0.Part.dfiles])if(M.includes(R)&&(_.info(`Building ${R.toUpperCase()}...`),await Mp(_,R,F0[R],z[R],g,q)))return z}catch(R){throw N?new x(R?.message,z):R}return M.includes(_0.Part.pov)?await _i.tryBuildPov(g,q,_):_.info("Skipping pov build"),M.includes(_0.Part.blo)?await _i.tryBuildBlo(g,q,_):_.info("Skipping blo build"),await $p(g,q,_),await Np(g,q,_),_.done("Project build completed."),z}m.buildAll=A;async function e(g,q,_,$,T,M,N){let z=await X.read(g,q);return X.isLibrary(z)?(_.info("Library project detected. Publishing library..."),a(g,q,_,T,$)):(_.info("App project detected. Publishing app..."),t(g,q,_,T,M,N,$))}m.release=e;async function r(g,q,_,$,T,M){let N=await X.read(g,q),z=`${N.name}-${N.version}.tar.gz`,F0=null;if(X.isLibrary(N))_.info("Library project detected. Packing library..."),F0=await Dl(g,q,_,T,$);else{_.info("App project detected. Packing app...");let k=await pl(g,q,_,T,M,$);F0=await Lp(k)}let R=xt.Utils.joinPath(g,z);F0!==null?(await q.writeFile(R,F0),_.done(`Packaged: ${R.fsPath}`)):_.error(`Could not create archive: ${R.fsPath}`)}m.pack=r;async function t(g,q,_,$,T,M=null,N){if(!await _0.validateAccess(g,q,$,!1,N))throw new Error("Could not validate access to application");let F0=await pl(g,q,_,$,T,N);await _0.updateProfile(g,q,$,N);let R=await _0.publishTag(g,q,$,F0,N);if(M!==null){let k=await X.read(g,q);await hx.updateExistingApplicationVersion($,k.publisher,k.registry?.id,k.version,{allowedBackends:M},N),_.info(`Tag "${R.version}" with phase "${R.phase}" shared with ${[...M].join(";")}!`)}_.done(`Tag "${R.version}" with phase "${R.phase}" published!`)}m.releaseAPM=t;async function a(g,q,_,$,T){let M=await X.read(g,q),N=await Dl(g,q,_,$,T);await Bt.publishPackage($,M,N,T),_.done(`Library "${M.publisher}/${M.name}" with version "${M.version}" published!`)}m.releaseLibrary=a;async function i(g,q,_,$,T,M,N,z=null){if(M==="*"){let H=await X.read(g,q);M=`${H.name}-${H.version}.tar.gz`,_.info(`Publishing detected archive package "${M}"...`)}let F0=xt.Utils.joinPath(g,M);if(!await q.stat(F0))throw new Error(`Archive package not found: ${F0.fsPath}`);let R=await q.readFile(F0),k=await Op(R),{publisher:O,registry:W,version:Y}=k;X.isLibrary(k)?(await Bt.publishPackage($,k,R,T),_.done(`Library "${O}/${k.name}" with version "${k.version}" published!`)):(await hx.updateApplicationFile($,O,W.id,Y,"app.tar.gz",R,T),await hx.updateExistingApplicationVersion($,O,W?.id,Y,{allowedBackends:z||void 0,phase:N||void 0},T),_.info(`Tag "${Y}" with phase "${N}" shared with ${[...z||""].join(";")}!`),_.done(`Tag "${Y}" with phase "${N}" published!`))}m.publishArchive=i;async function l(g,q,_){let $;try{$=await q.readFile(xt.Utils.joinPath(g,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(ul($)===s0.readme(_))throw new Error('"README.md" matches the default template. Please write a brief project description.');return $}m.getReadmeFile=l;async function c(g,q){let _;try{_=await q.readFile(xt.Utils.joinPath(g,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(ul(_)===s0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return _}m.getChangelogFile=c;async function u(g,q,_,$){let T=await X.read(g,q),{name:M,publisher:N,description:z}=T,F0=X.validateProjectName(M,X.isLibrary(T));if(F0)throw new Error(`name: ${F0}`);let R=X.validateDescription(z);if(R)throw new Error(`description: ${R}`);let k=X.validatePublisherId(N)||await X.validatePublisherOnline(_,N,$);if(k)throw new Error(`publisher: ${k}`);if(!X.isLibrary(T)&&(await X.validateApplicationIcon(g,q,T),X.validateEngineSettings(T),X.isApp(T)&&await X.isApmPartEnabled(g,q,_0.Part.dlo,T)&&(!T.dpid||!Object.values(X.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}m.validatePublishSettings=u;async function b(g,q){let _=Wa.ungzip(g),$=await Fn.TarReader.load(_),T={};for(let M of $.fileInfos)q.includes(M.name)&&(T[M.name]=$.getFileBlob(M.name));return T}m.readFilesFromTarGz=b})(Sx||={});function _p(x,A){let e=Object.values(_0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function wp(x,A,e,r,t,a){await px.validateMinimumBackendVersion(x,A,e),a.includes(_0.Part.dde)&&await Ae.fetchPreviousHistoryJson(x,A,e,r,t)}async function Sp(x,A,e,r){r.defaultsOnly?(await gx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",s0.filePaths.dist.definesTs,"(defaults only)"),await gx.exportDefinesTs(x,A,r,s0.filePaths.dist.definesAppTs),e.log("Generated",s0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await gx.exportDefinesTs(x,A,r),e.log("Generated",s0.filePaths.dist.definesTs))}async function qp(x,A,e){let r=await Ae.compileDDE(x,A,e);if(r.ddeJSON){await Ae.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await X.read(x,A);X.isLibrary(t)||await Ae.exportHistoryJson(x,A,e,r.ddeJSON),await Ae.exportOpenApi(x,A,e,r.ddeJSON),await X.isApmPartEnabled(x,A,_0.Part.dlo,t)&&(await Ae.exportAutoDloFiles(x,A,e,r.ddeJSON),await Sn.exportDloConfig(x,A,e))}return r.diagnostics}async function Tp(x,A,e){let r=new Et(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function Pp(x,A,e){return await Tn.process(x,A,e)}async function $p(x,A,e){let r=await X.read(x,A);X.isLibrary(r)&&await st.normalizeLibraryParts(x,A,r,e)}async function Np(x,A,e){let r=xt.Utils.joinPath(x,s0.fileNames.reportTemplate);if(await A.stat(r)){let t=xt.Utils.joinPath(x,s0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${s0.fileNames.reportTemplate}" to dist folder.`)}}function Ip(x,A,e){A!==_0.Part.dlo&&Rp(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function Mp(x,A,e,r,t,a){let i=await e(t,a,x);return r.push(...i),Ip(x,A,i)}function Rp(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function Dl(x,A,e,r,t){let a=await X.read(x,A);return await X.validateBasicManifest(x,A,a),await Sx.buildAll(x,A,e,t,r),await Bt.createArchive(x,A)}async function pl(x,A,e,r,t,a){if(!Object.values(_0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await X.validateBasicManifest(x,A,null),await Sx.buildAll(x,A,e,a,r),await _0.createTag(x,A,t)}async function Lp(x){let A=new Fn.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let a=t;A.addFile(r,a)}else{let a=t;A.addFile(r,await a.arrayBuffer())}let e=await A.write();return Wa.gzip(await e.arrayBuffer())}async function Op(x){let A=await Gp(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function Gp(x,A){let e=Wa.ungzip(x),r=await Fn.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var Up=T0.bufferToBase64;var _0;(b=>{let x;(N=>(N.alpha="alpha",N.beta="beta",N.rc="rc",N.release="release",N.stage="stage",N.passive="passive",N.withdrawn="withdrawn"))(x=b.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=b.Part||={});function e(m){let{description:g,name:q,pov:_,engines:$,blo:T,publisher:M,type:N}=m,z=N||X.ProjectTypes.app,F0={name:q,abstract:g,author:M||"",pov_location:X.PovLocation.embedded,pov_details_lowlevel:!1,required_be:$?.backend,required_hwfw:$?.hwfw?.join(";"),required_productcode:$?.productId?.join(";"),blo_level:T?.accessLevel||X.BloAccessLevel.restricted,pip_id:""};return _&&_.details&&(F0.pov_location=X.PovLocation.pure,F0.pov_details_lowlevel=!!_.details.lowLevel),z==="addon"&&(F0.required_hwfw=void 0,F0.required_productcode=void 0,F0.addon_max_sources=1,F0.addon_max_per_site=m.maxInstancesPerSite),F0}b.createBaseTagHeader=e;async function r(m,g,q){let _=await X.read(m,g),$=e(_),T={version:_.version,...$,phase:q};return await a(m,g,_,T)}b.createTag=r;async function t(m,g){let q=await X.read(m,g),$={...e(q),blo_autostart:!1};return a(m,g,q,$)}b.createDevTag=t;async function a(m,g,q,_){let $=new FormData;$.append("tag",JSON.stringify(_)),$.append(`src/${X.fileName}`,new Blob([await X.readAsBlob(m,g)]));let T=new Blob([await g.readFile(Ge.Utils.joinPath(m,s0.filePaths.dist.ddeXmlPath))]);if($.append("bin/dde/xml",T),q.icon){let N=await g.readFile(Ge.Utils.joinPath(m,q.icon)),z=Up(N);$.append("previews/00.png",new Blob([`data:image/png;base64,${z}`]))}if(Object.hasOwn(_,"phase")){let N=await Sx.getReadmeFile(m,g,_.name),z=await Sx.getChangelogFile(m,g);$.append("previews/README.md",new Blob([N])),$.append("previews/CHANGELOG.md",new Blob([z]))}if(await X.isApmPartEnabled(m,g,"dlo")){let N=new Blob([await g.readFile(Ge.Utils.joinPath(m,s0.filePaths.dist.mainAmxPath))]);$.append("bin/dlo/amx",N)}if(await X.isApmPartEnabled(m,g,"pov",q)){await bl(m,g,$,s0.filePaths.dist.povDetailsPath,"bin/pov/details");let N=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');$.append("bin/pov/list/index.html",new Blob([N]))}let M=await g.findFiles(m,`${s0.filePaths.dist.dfilesPath}/*`);for(let N of M){let z=new Blob([await g.readFile(N)]);$.append(`bin/dfiles/${Ge.Utils.basename(N)}`,z)}return await X.isApmPartEnabled(m,g,"blo",q)&&await bl(m,g,$,s0.filePaths.dist.bloPath,"bin/blo"),await Hp(m,g,$),$}b.createBuffer=a;async function i(m,g,q,_,$){let T=await X.read(m,g);_||await Sx.validatePublishSettings(m,g,q,$);let{registry:M}=T,N=M?.id;if(!N&&!_&&(N=await l(m,g,q,T,$)),N){let{publisher:z}=T;if(!z)return null;try{return{id:N,...await hx.getExistingApplication(q,z,N,$)}}catch(F0){if(F0?.message==="Could not find given application")return N=await l(m,g,q,T,$),{id:N,...await hx.getExistingApplication(q,z,N,$)}}}return null}b.validateAccess=i;async function l(m,g,q,_,$){let T="myDatanet",{publisher:M,name:N,description:z,registry:F0}=_,R={id:F0?.id,type:_.type||X.ProjectTypes.app,name:N,targetSystem:T,description:z||"",allowedBackends:null};X.isAddon(_)&&(R.allowedApplications=null);let k=await hx.createNewApplication(q,M,R,$);if(!k)throw new Error("Failed to initialize application");return _.registry={id:k},await X.write(m,g,_),k}b.registerNew=l;async function c(m,g,q,_){let{name:$,publisher:T,description:M,registry:N}=await X.read(m,g),z=N?.id;await hx.updateExistingApplication(q,T,z,{description:M,name:$,targetSystem:"myDatanet"},_)}b.updateProfile=c;async function u(m,g,q,_,$){let{publisher:T,registry:M,version:N}=await X.read(m,g);return await hx.publishApplicationVersion(q,T,M?.id,N,_,$)}b.publishTag=u})(_0||={});async function bl(x,A,e,r,t){let a=await A.findFiles(x,`${r}/**`);for(let i of a){let l=Ge.Utils.joinPath(x,r),c=i.path.substring(l.path.length+1),u=new Blob([await A.readFile(Ge.Utils.joinPath(x,`${r}/${c}`))]);e.append(`${t}/${c}`,u)}}async function Hp(x,A,e){let r=Ge.Utils.joinPath(x,s0.filePaths.dist.reportTemplate);if(await A.stat(r)){let a=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",a)}let t=Ge.Utils.joinPath(x,s0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var Ll=Y0(require("update-notifier"));function Jp(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let a=0;a<r.length;a++){let i=r[a];a===r.length-1?t[i]=e:((typeof t[i]!="object"||t[i]===null||Array.isArray(t[i]))&&(t[i]={}),t=t[i])}}function ml(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[a,i]=t.split("=",2),l=a.slice(2),c=!0;if(i!==void 0)c=i;else{let u=A[r+1];u&&!u.startsWith("-")&&(c=u,r++)}l.includes(".")?Jp(e,l,c):e[l]=c}return e}var jl=require("vscode-uri");function Si(x){return x instanceof Error?x.message:String(x)}function Ue(x,A){return{success:!1,errorCode:x,message:A}}async function zp(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:a,options:i}=x;r.info("[1/5] Building project...");try{let l=i.part?i.part:!0;return await X.validateBasicManifest(A,e,null),await Sx.buildAll(A,e,r,t,a,l,!0),r.done("Build completed successfully"),null}catch(l){return Ue(1,`Build failed: ${Si(l)}`)}}async function Vp(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await pa(r,A);return t||Ue(2,`USB device not found with serial number: ${r}`)}async function Wp(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:a,debug:i}=t;r.info("[3/5] Uploading binary to USB device...");let l=jl.Utils.joinPath(A,s0.filePaths.dist.mainAmxPath),c=await jt(a,l,e,r,i);return c.success?(r.done("USB upload completed"),null):Ue(3,`USB upload failed: ${c.message}`)}async function Xp(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return Ue(4,`myDatanet authentication failed: ${Si(e)}`)}}async function Yp(x,A,e){if(A)try{let a=await x.getCustomer(A);return e.info(`Using customer: ${a.name} (${a._uid})`),a._uid}catch{return Ue(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return Ue(6,"No customers available. Please specify --customer or set MYDATANET_CUSTOMER");if(r.length===1)return e.info(`Using customer: ${r[0].name} (${r[0]._uid})`),r[0]._uid;let t=r.map(a=>a.name).join(", ");return Ue(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function Qp(x,A,e,r){let t=await x.getDeviceSite(A);t&&(t.app.phase==="dev"&&(e.apmId=t.app.apmid,e.applicationId=t.app.appl_id),e.siteUid=t._uid,e.siteName=t.name,e.customerUid=t.customer_uid,r.info(`Found existing site: ${t.name}`))}async function Zp(x,A,e){let{cwd:r,fs:t,logger:a}=x;a.info("Creating development APM tag...");try{let i=await _0.createDevTag(r,t),l=await A.uploadDevTag(e.apmId,i);return e.applicationId=l,a.done("Development tag uploaded"),null}catch(i){return Ue(5,`Development tag upload failed: ${Si(i)}`)}}async function xb(x,A,e,r){r.info("[5/5] Creating development site...");try{return e.siteUid?(e.siteName!==e.name&&await x.updateSiteName(e.siteUid,e.name),r.info(`Reusing existing site: ${e.siteUid}`),{siteUid:e.siteUid,siteName:e.name}):{siteUid:await x.createDevelopmentSite(A,e),siteName:e.name}}catch(t){return Ue(6,`Site creation failed: ${Si(t)}`)}}function hl(x,A,e=!1){if(e){x.log(JSON.stringify({siteUid:A.siteUid,siteName:A.siteName,apmId:A.apmId}));return}x.done("Development deployment completed successfully!"),x.info(""),x.info("=== Deployment Summary ==="),x.info(`Site UID: ${A.siteUid}`),x.info(`Site Name: ${A.siteName}`),x.info(`APM ID: ${A.apmId}`),x.info("==========================")}function wi(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function gl(x,A,e,r,t,a){let i={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:a},{serial:l,server:c,customer:u,mdnToken:b}=a;e.info("Starting development deployment...");let m=await zp(i);if(m)return m;let g=await Vp(i);if(wi(g))return g;let q=await Wp(i);if(q)return q;let _=new xn(c,b,e),$=await Xp(_,e);if(wi($))return $;let T=$,M=await Yp(_,u,e);if(wi(M))return M;let N=M,z=await Ia(x,A,e,l,T.name,N,a.siteName);await Qp(_,l,z,e);let F0=await Zp(i,_,z);if(F0)return F0;let R=await xb(_,N,z,e);return wi(R)?R:{success:!0,siteUid:R.siteUid,siteName:R.siteName,apmId:z.apmId,message:"Development deployment completed successfully"}}var Ya="/api/1/sites/dev";function Ab(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function Qa(x,A){let e=x;try{e=JSON.parse(x).err??x}catch{}let r=/E_NOT_FOUND|E_BAD_REQUEST/.test(e)?8:/E_FORBIDDEN|E_METHOD_NOT_ALLOWED/.test(e)?9:3;return new ax(`${e} (HTTP ${A})`,r)}function eb(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(a,i,l)=>fetch(`${e}${i}`,{method:a,headers:r,body:l===void 0?void 0:JSON.stringify(l)});return{async api(a){let i=Ab(a.method)&&a.body?JSON.parse(a.body):void 0,l=await t(a.method,a.path,i),c={};return l.headers.forEach((u,b)=>{c[b]=u}),{status:l.status,headers:c,body:await l.text()}},async dev(a,i,l){let c=await t(a,i,l),u=await c.text();if(!c.ok)throw Qa(u,c.status);return u?JSON.parse(u):null},async close(){}}}async function rb(x){if(!x.serial)throw new ax("--serial is required unless --url is given",2);let A=new Cr({cwd:x.cwd,fs:x.fs,serial:x.serial,logger:x.logger,build:!1,flash:!1,pollIntervalMs:0,waitMs:x.waitMs,env:x.env,apiToken:x.apiToken,debug:x.debug,createDevice:x.createDevice,transportFactory:x.transportFactory});A.on("error",e=>x.logger.warn(e instanceof Error?e.message:String(e)));try{await A.start()}catch(e){throw await A.stop(),e}return{api:e=>A.handleApi(e),async dev(e,r,t){return tb(A,e,r,t)},close:()=>A.stop()}}function kl(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function tb(x,A,e,r){let t=r??{},[a,i=""]=e.split("?"),l=new URLSearchParams(i);switch(`${A} ${a}`){case"GET /dev/status":return x.status();case"GET /dev/state":return x.state();case"POST /dev/at":return{cmd:t.cmd,response:await x.at(String(t.cmd))};case"POST /dev/flash":return x.flash(typeof t.file=="string"?t.file:void 0);case"POST /dev/sync":return x.sync(Array.isArray(t.tags)?t.tags:void 0);case"GET /dev/logs":return{lastSeq:x.logStream.lastSeq,records:x.logStream.since(kl(l,"since",0),kl(l,"limit",500))};default:throw new ax(`unsupported route ${A} ${a}`,3)}}async function nb(x){return x.url?eb(x.url,x.token):rb(x)}async function He(x,A){let e=await nb(x);try{return await A(e)}finally{await e.close()}}function Za(x){if(x.status>=400)throw Qa(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function yl(x){return He(x,A=>A.dev("GET","/dev/status"))}async function _l(x,A){let[e,r]=fb(A);return He(x,async t=>{let a=Za(await t.api({path:`${Ya}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return a;let i=a??{},l=Object.keys(i).find(c=>c.toLowerCase()===r.toLowerCase());if(l===void 0)throw new ax(`unknown field '${r}' in container '${e}'`,8);return{[l]:i[l]}})}async function wl(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new ax(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return He(x,async t=>{let a=`${Ya}/containers/${encodeURIComponent(A)}`,i=await t.api({path:a,method:"PUT",body:JSON.stringify(r)});if(i.status>=400)throw Qa(i.body,i.status);let l=i.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:l,record:Za(await t.api({path:a,method:"GET"}))}})}async function Sl(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${Ya}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return He(x,async a=>Za(await a.api({path:t,method:"GET"})))}async function ql(x,A){return He(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function Tl(x){return He(x,A=>A.dev("GET","/dev/state"))}async function Pl(x,A){return He(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function $l(x,A){return He(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}var ib={marker:"live"};function Nl(x){return typeof x=="object"&&x!==null&&x.marker==="live"}async function sb(x){return(await x.dev("GET","/dev/logs?since=0&limit=1")).lastSeq}function ab(x,A){let e=x.filter?new RegExp(x.filter):null,r=x.sinceMs!==void 0?Date.now()-x.sinceMs:void 0;return t=>{let a=t;r!==void 0&&(a.ts??0)<r||(!e||e.test(a.text??""))&&A(t)}}var Xa=500;async function Il(x,A,e){return await x.dev("GET",`/dev/logs?since=${A}&limit=${e}`)}function Ml(x,A,e){let r=A;for(let t of x)r=Math.max(r,t.seq),e(t);return r}async function ob(x,A,e){let r=await Il(x,A,Xa);return Ml(r.records,A,e)}async function Fb(x,A,e){let r=Xa;for(;;){let t=await Il(x,A,r);if(t.records.length<r)return Ml(t.records,A,e);r+=Xa}}async function vb(x,A,e,r){let t=A;for(;Date.now()<e;)await new Promise(a=>setTimeout(a,500)),t=await ob(x,t,r)}async function Rl(x,A,e){let r=ab(A,e);await He(x,async t=>{let a=A.follow===!0,i=A.replay===!0||A.sinceMs!==void 0,l=a&&!i?await sb(t):0,c=await Fb(t,l,r);a&&i&&e(ib),a&&await vb(t,c,Date.now()+(A.durationMs??3e4),r)})}function fb(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var RA=new rx.Command,qi=(0,Ll.default)({pkg:Li}),N0=new be.Logger,lb=()=>process.env.NODE_ENV==="local-dev-app"?"./dev/pets-demo":process.env.NODE_ENV==="local-dev-lib"?"./dev/modbus-master":process.env.NODE_ENV==="local-dev-addon"?"./dev/addon":process.env.NODE_ENV==="local-dev-analytics"?"./dev/analytics":"",Je=yt.Utils.joinPath(yt.URI.file(process.cwd()),lb());RA.version(Li.version).usage("<command>");RA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
2782
+ Changing the size of an existing field can result in data loss or unexpected behaviour.`,...EA(i,M.range)}))})}checkForContainerRelation(r,t,s,i){let v=r.value.get("fields");v&&v.items.forEach(u=>{this.checkForContainerRelation(u,t,s,i)}),r.value.items.forEach(u=>{let b=u.value;if(b?.value&&K6.exec(`${b.value}`)){let m=u.key.value;if(m){if(!Object.hasOwn(rl,m))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${m}" does not allow relations.`,...EA(i,b.range)});if(["scale","offset"].includes(m))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${m}" are not available within the dlo source.`,...EA(i,b.range)})}return this.validateContainerRelation(m,b,t,s,i)}})}validateFieldName(r,t,s,i){let v=this.fieldNamesPerContainer[t],c=r.key,u=c.value;z6(u)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${u}" is not allowed.`,...EA(i,c.range)});let b=r.value.get("shadowFields");b&&b.items.forEach(m=>{this.validateFieldName(m,t,s,i)}),v.includes(u.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${u}" is already occupied`,...EA(i,c.range)}):v.push(u.toLowerCase())}checkFieldNameLength(r,t,s,i){let v=r.key,c=v.value,b=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,m=31-b.length;b.length+c.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:mn.CODE.ddeFieldLength,message:`Field name "${c}" to long. ${m} characters allowed for this field/container.`,...EA(i,v.range)})}validateContainerRelation(r,t,s,i,v){let[c,u,b]=t.value.split(".",3),[m,g]=c.split("@"),q=m?m.split(":")[1]:null,$=(q&&this.libraryYaml[q]?this.libraryYaml[q]:s).contents?.get(g),T=u.split("[")[0],M=null;if($){let N=$.get(T);if(N)if(b){let z=N.get("fields");z&&z.get(b)&&(M=z.get(b))}else M=N;else M=this.findRelatedShadowField($,T)}if(M){let N=rl[r],z=M.get("type");N.includes(z)||this.fileDiagnostics.push({file:i,level:"error",message:`Related field type "${z}" is not allowed for attribute "${r}".`,...EA(v,t.range)})}else q&&!this.libraryYaml[q]?this.fileDiagnostics.push({file:i,level:"error",message:`Related library "${q}" does not exist.`,...EA(v,t.range)}):this.fileDiagnostics.push({file:i,level:"error",message:`Related field "${t.value}" does not exist.`,...EA(v,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let v=s.value.get("shadowFields");if(!v)continue;let c=v.get(t);if(c)return c}}mergeAndFormat(r,t,s,i){let v={containers:{},setPointList:{}};for(let c of this.libraryDDE)this.combineDDE(v,c);this.combineDDE(v,r);for(let c of Object.values(v.containers)){let u=c.transferDirection;c.transferDirection=this.normalizeTransferDirection(c.name,u),this.warnIfHistoryDirectionNarrowed(c,u,t,s,i)}return this.sortContainerFields(v),this.generateSetPointList(v),v}readFlexibleContainers(r){let t=s=>r instanceof Map?r.get(s)===!0:r&&typeof r=="object"?r[s]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(r){let t=La[r]?.ctype;if(t===rn.hx)return"timeseries";if(t===rn.cx||t===rn.aloha)return"config"}flexibleSwitchFor(r){let t=this.flexibleSwitchGroupFor(r);return t?this.flexibleContainers[t]:void 0}isPlusDirection(r){return r===Jx.upPlus||r===Jx.downPlus||r===Jx.bothPlus}normalizeTransferDirection(r,t){let s=La[r]?.xmits,i=this.flexibleSwitchFor(r);if(!s||i===void 0)return t;let c=(i?[[Jx.up,Jx.upPlus],[Jx.down,Jx.downPlus],[Jx.both,Jx.bothPlus]]:[[Jx.upPlus,Jx.up],[Jx.downPlus,Jx.down],[Jx.bothPlus,Jx.both]]).find(([u,b])=>t===u&&s.includes(b));return c?c[1]:t}warnIfHistoryDirectionNarrowed(r,t,s,i,v){if(!this.historyPlusDirectionContainers.has(r.name)||!this.isPlusDirection(t)||r.transferDirection===t)return;let c=this.flexibleSwitchGroupFor(r.name),u=r.containerType===rn.hx?`timeseries_${r.title}`:r.title,b=v?this.findContainerKeyRange(v,u):void 0;this.fileDiagnostics.push({file:s,level:"warning",message:`Container "${r.title}" was transferred with variable length ("${t}") in a previous build but "flexibleContainers.${c}" is not enabled - it now uses fixed-length "${r.transferDirection}". Enable the switch to keep variable-length transfer.`,...b?EA(i,b):{line:0,startCharacter:0,endCharacter:0}})}combineDDE(r,t){for(let[s,i]of Object.entries(t.containers)){let v=r.containers[s];v?(v.title=i.title,v.knownNames.unshift(i.title),v.libraries.push(...i.libraries),v.fields.push(...i.fields),v.arrays={...v.arrays,...i.arrays},v.shadows={...v.shadows,...i.shadows}):(v=r.containers[s]=structuredClone(i),v.knownNames.unshift(i.title),v.fieldCount=v.fields.length,v.fieldIndex=0);let c=this.initialContainerByteOffset(v);for(let[u,b]of v.fields.entries()){if(b.shadowRef){let m=v.shadows[b.shadowRef];b.byteOffset=m.byteOffset}else b.byteOffset=c,this.updateShadowFieldInformation(r.containers[s],b),c+=b.byteSize||0;u>v.fieldCount-1&&(b.index+=v.fieldIndex)}v.fieldIndex+=i.fieldIndex,v.knownNames=[...new Set(v.knownNames)],v.libraries=[...new Set(v.libraries)],v.fieldCount=v.fields.length}}initialContainerByteOffset(r){return r.containerType===rn.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:s,containerSize:i}=this.sortFields(t);t.fields=s,t.size=i,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(m=>!m.shadowRef),s=r.fields.filter(m=>m.shadowRef),i=[],v=r.name;if(this.previousVersion.containers[v]){let m=this.sortPreviousContainerFields(r,t);i.push(...m)}else i.push(...t);i.forEach(m=>{this.updateShadowFieldInformation(r,m)});let u=i[i.length-1],b=u.byteSize+u.byteOffset;return s.forEach(m=>{m.byteOffset=r.shadows[m.shadowRef].byteOffset,i.push(m)}),{sortedFields:i,containerSize:b}}sortPreviousContainerFields(r,t){let s=r.name,i=this.previousVersion.containers[s],v=[],c=this.initialContainerByteOffset(r);for(let u of i.fields){if(u.shadowRef)continue;let b=t.findIndex(g=>u.id===g.name?.toLowerCase());if(b===-1){c=u.byteOffset+u.byteSize;continue}let m=t[b];if(u.type!==m.type&&u.byteSize!==m.byteSize){c=u.byteOffset+u.byteSize;continue}m.byteOffset=u.byteOffset,t.splice(b,1),v.push(m),c=this.initialContainerByteOffset(r)}if(c>this.initialContainerByteOffset(r)){let u=t.shift();v.push(...this.generatePlaceholderFieldIfNeeded(c,u)),this.updateShadowFieldInformation(r,u)}for(let u of t){if(u.shadowRef)u.byteOffset=r.shadows[u.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,u);let b=v[v.length-1];b.shadowRef&&(b=r.shadows[b.shadowRef]),u.byteOffset=b.byteOffset+b.byteSize}v.push(u)}return v}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let i={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(i)}return s}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let s of t.fields)s.chartSetPoint&&(Object.hasOwn(r.setPointList,s.name)||(r.setPointList[s.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(mi||={});var mA=Ax.TransferDirection,re=Ax.parseXMLValueWithRelation,Y6=Ax.parseXMLBitmask,Q6=Ax.parseXMLDefaultValue,Z6=Ax.fieldTypeDefinitions;function Ga(x,A){let r=[];function t(v,c=!0){if(c){if(Array.isArray(v)){r.push.apply(r,v);return}r.push(""+v)}}function s(v,c){v!=="mergeofs"&&t(`${v}=${c}`)}t("// DDE STRUCTURE created by Microtronics Studio");let i="source=rm2mraw";for(let[v,c]of Object.entries(A.containers)){v.startsWith("histdata")&&c.transferDirection!==mA.deviceOnly&&(t("<split>"),t(i),t("target="+v),t("key=0"+v.substr(-1,1)),t("</split>")),t("<table>"),s("name",v),s("alias",c.title),s("title",c.title.replace("_"," "));let u={};[mA.none,mA.backendOnly,mA.deviceOnly,mA.down,mA.downPlus].includes(c.transferDirection)&&s("upload","0"),[mA.none,mA.backendOnly,mA.deviceOnly,mA.up,mA.upPlus].includes(c.transferDirection)&&s("download","0"),(X.isIotApp(x)||X.isLibrary(x))&&[mA.up,mA.upPlus].includes(c.transferDirection)&&s("edit","99");for(let b of c.fields){if(b.type==="shadow")continue;let m=xp(b),g=Z6[m.type],q=re("title",m,A)||m.name;!q.startsWith("%")&&m.library&&(q=`${m.library}: ${q}`);let _={title:q,alias:m.name,index:b.index,...u};_.byteofs=`${m.byteOffset}`;for(let[$,T]of Object.entries(g.xml))_[$]=T;Object.hasOwn(g,"xmlOut")&&g.xmlOut(_,m,A),_.units=re("unit",m,A),_.chmode=re("channelMode",m,A),_.ialarm_high=re("chartAlarmHigh",m,A),_.ialarm_low=re("chartAlarmLow",m,A),_.iwarn_high=re("chartWarningHigh",m,A),_.iwarn_low=re("chartWarningLow",m,A),_.hysterese=re("chartHysteresis",m,A),_.itrigger=re("chartTriggerThreshold",m,A),_.itriggerus=re("chartTriggerRelation",m,A),_.setpoint=re("chartSetPoint",m,A),_.bitmask=Y6(m),m.hex&&(_.editmask="%HEX%"),m.readPermission&&(_.view=m.readPermission),m.writePermission&&(_.edit=m.writePermission),m.defaultValue!==void 0&&(_.default=Q6(m)),m.utilsTransferInterval===!0&&(_.param0="%FFFF0005%transfer_interval"),t("<field>"),m.library&&t(`// declared by ${m.library} library`,!0);for(let[$,T]of Object.entries(_))T!==void 0&&s($,`${T}`);t("</field>")}["alerts","applog"].includes(v)||(t("</table>"),t("// "+c.size+" bytes total size"))}return t("<split>"),t(i),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(i),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
2783
+ `)}function xp(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=T0.patchValueWithArrayInfo(t,e);return A}var _e=Y0(require("semver"));var te=Y0(require("semver"));var Ja=require("vscode-uri");var Zx=Ax.ContainerType,z0=Ax.TransferDirection,tn=Ax.regexRelation,Ap=Ax.CONFIG_CONTAINER,Ha=Ax.CONTAINER_DEF_DLO_CID_BASE,an=Ax.CONTAINER_DEFS,sn=Ax.fieldTypeDefinitions,il=T0.isNumeric;function IA(x){let A=sn[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var ji="Microtronics/dlo-core";function Ka(x){return X.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,ji)?px.rangeToVersion(x.libraryDependencies[ji]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,ji)?px.rangeToVersion(x.libraryDevDependencies[ji]):null}function ep(x){let A=Ka(x);return A===null||te.gte(A,"0.3.0")?te.valid(x.version)?x.version:te.coerce(`${x.version}`):te.coerce(x.version)?.major}function Ua(x){let A=Ka(x);if(A===null)return!1;let e=te.coerce(A);return te.gte(e,"1.1.0")}function rp(x){let A=Ka(x);if(A===null)return!1;let e=te.coerce(A);return te.gte(e,"1.15.0")}var tp=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function np(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=IA(x);return!A||A==="skip"?!1:tp.includes(`${A.rwfunc}`)}function ip(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:s}=Qi[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let i=ep(e);A("APM_VERSION",`${i}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[v,c]of Object.entries(s))il(c)?A(v,`${c}`):A(v,`"${c}"`)}function sp(x,A,e,r){let t=r.flat,{definesWithSource:s}=r;A("GLOBAL DEFINES");for(let[i,v]of Object.entries(t)){let c=s[i]?.comment;if(c){let b=c.split(`
2784
+ `);if(b.length===1)x(`/** ${b[0]} */`);else{x("/**");for(let m of b)x(` * ${m}`);x(" */")}}let u=Object.hasOwn(t,v);e(i,`${v}`,u)}}function ap(x,A,e,r){let t=parseInt(x.substring(6)),s=1<<t;e[t]=A.size,r.cx_isupm|=[z0.both,z0.none,z0.deviceOnly,z0.up,z0.upPlus].includes(A.transferDirection)?s:0,r.cx_isvolatilem|=A.volatile?s:0,r.cx_isdnm|=[z0.both,z0.none,z0.deviceOnly,z0.down,z0.downPlus].includes(A.transferDirection)?s:0,r.cx_isvlm|=[z0.bothPlus,z0.upPlus,z0.downPlus].includes(A.transferDirection)?s:0}function op(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[z0.upPlus].includes(A.transferDirection)?1<<t:0}function Fp(x){return[z0.upPlus].includes(x.transferDirection)}function vp(x,A,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},i=0,v=Array(10).fill(0),c={hx_isvlm:0},u;for(let[m,g]of Object.entries(e.containers))g.containerType===Zx.cx&&g.transferDirection!==z0.backendOnly?(ap(m,g,t,s),r=Math.max(r,g.size)):g.containerType===Zx.hx?(op(m,g,v,c),r=Math.max(r,g.size)):g.containerType===Zx.aloha&&(u=Fp(g),r=Math.max(r,g.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${s.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${s.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${s.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${s.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${i.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${v.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${c.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let b=[...v];Object.hasOwn(e,"applog")&&b.push(125),Object.hasOwn(e,"alerts")&&b.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...b)}`),x(""),u!==void 0&&(x(`#define _DDE_ALOHA_varlen ${u?1:0}`),x(""))}function fp(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let s=Ha(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let i=`DDE_${t.containerType===Zx.aloha?Zx.aloha:t.title}`,v=an[r];x(`// ${i}_id - container identifier required for ${i}_read/_write operations`),x(`#define ${i}_id (${s}+${v.cnum||0})`),x(`// ${i}_sz - [byte] container total size`),x(`#define ${i}_sz ${t.size}`),v.cnum!==void 0&&(x(`// ${i}_idx - 0+ container index number`),x(`#define ${i}_idx ${v.cnum}`))}}function sl(x,A,e){let r=[],t=r.push.bind(r);function s(v){t(`
2785
+ // === ${v} ===
2786
+ `)}function i(v,c,u=!1){let b=il(c)?"":'"';u&&(b=""),t(`#define ${v} ${b}${c}${b}`)}return ip(s,i,e),sp(t,s,i,A),vp(t,s,x),fp(t,s,x),r.join(`
2787
+ `)}var on=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!Ha(e.containerType,e.transferDirection)||!e.fields||!this.context&&!Ax.hasContainerAppFields(e)||an[A].ctype!==Zx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let s=this.generateCommentForField(e);s&&(Array.isArray(s)?(this.pawn("/**"),s.forEach(i=>{this.pawn(` * ${i}`)}),this.pawn(" */")):this.pawn(`// ${s}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let s=this.generateFieldVariableName(e,t);this.createGlobalVar(`${s}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let s=e.arrays[t.arrayRef.name],i=`${A}_${t.arrayRef.name}`,v="";s.fields?.length&&(v=t.name.split(".")[1],i+=`_${v}`),this.createDefaultDefineForField(i,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(v,t))}return r}isPlainCellField(A){if(A.type==="struct"||!sn[A.type])return!1;let e=IA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let s of A.fields){let i=e.get(s.name);if(i!==void 0&&!this.isPlainCellField(i)||!this.isPlainCellField({type:s.type}))return"";r.push(i?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let s=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${s} ${t.length}`),t.fields){for(let c of t.fields)sn[c.type]?.isBlob&&c.byteSize&&this.addDefine(`${A}_${t.name}_${c.name}_dim`,c.byteSize);let i={...e};i.fields=[],t.fields.forEach(c=>{i.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:c.byteSize,id:c.name,library:t.library,name:c.name,type:c.type,title:null,index:0})});let v=`${A}_${t.name}_def`;this.generateTypeDefinitions(i,v),this.createGlobalVar(`${A}_${t.name}[${s}][${v}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${s}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(sn,e.type)&&sn[e.type].isBlob,s=e.byteSize;return s&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${s}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${s};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let s of r){let i=this.generateFieldTypeDefinition(s,A,t,e);i!==null&&this.pawn(i)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let s=A.arrayRef;if(s){let c=e.arrays[s.name];if(!r.includes(s.name)&&!c.fields)r.push(s.name);else return null}let i=A.arrayRef?A.arrayRef.name:A.name,v=A.arrayRef?`[${t}_${i}_dim]`:"";return{fieldName:i,fld_dim:v}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let s=this.handleArrayFieldDedup(A,e,r,t);if(s===null)return null;let{fieldName:i,fld_dim:v}=s,c="";if(A.type==="struct")c="// ."+i+v;else{let u=IA(A);if(!u)return null;u==="skip"?c=`// skipped - .${i}${v}`:c+=u.rwp.replace("%n",`.${i}${v}`).replace("%l",A.byteSize)}return c+=",",A.library&&(c+=` // declared by ${A.library} library`),c}variableNameForPawnDefinition(A,e){let r=IA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&np(e)){let{value:r,reason:t}=this.parseFieldDefault(e),s=`${A}_default`;this.addDefine(s,r,t)&&(e.defaultDloDefine=s)}}addDefine(A,e,r){return tn.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=an[e],t=`DDE_${A.containerType===Zx.aloha?Zx.aloha:A.title}`;[z0.both,z0.bothPlus,z0.none,z0.deviceOnly,z0.up,z0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===Zx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[Zx.hx,Zx.aloha].includes(e.containerType),s=e.containerType===Zx.hx,i=e.containerType===Zx.aloha,v=`_${A}_write`,c=Ua(this.manifest)?", flags":"",u=s?`stamp${c}`:"",b=Ua(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${v}(${s?b:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${i?Zx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${u});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let m=`${A}_transfer`,g=`${A}_persist`,q=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${m}(${q}) {`),t)this.pawn(`${v}(${u});`);else{let _=e.name.slice(-1);this.pawn(`dde_flush(${_}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${g}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Ua(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,s,i,v){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,v);let c=e.arrayRef.name,u=s.get(c);return u?i.has(c)?v:(i.add(c),this.emitArrayLoop(A,u,r)):this.emitSingleField(A,e,r,t,v)}generateRWFunctionBody(A,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,A,e),i=new Set,v=-1;for(let c of t){if(this.isFieldSkipped(c))continue;let u=IA(c);!u||u==="skip"||(v=this.emitFieldRW(A,c,r,u,s,i,v))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||rp(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let i="";i+=r,i+=t.rwfunc;let v=`${A}_${e.name}`;return i+=`(${v}`,t.rwlen&&(i+=`, ${e.byteSize}`),i+=this.defaultArgumentFor(e,r),this.pawn(i+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let s of e.templateFields){let i=IA(s);if(!i||i==="skip")continue;let v=s.byteOffset;v!==t&&this.pawn(`_dde_idx = ${v} + (_i * ${e.stride});`),t=v+s.byteSize;let c=`${A}_${s.name.replace(/\[\d+\]/,"[_i]")}`,u=`${r}${i.rwfunc}(${c}`;i.rwlen&&(u+=`, ${s.byteSize}`),u+=this.defaultArgumentFor(s,r),this.pawn(u+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=IA(r);if(!t||t==="skip")continue;let{name:s,index:i}=r.arrayRef;e.has(s)||e.set(s,new Map);let v=e.get(s);v.has(i)||v.set(i,[]),v.get(i).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[s,i]of A){let v=r.arrays[s];if(!v||v.length<2)continue;let c=i.get(0),u=i.get(1);if(!c||!u||c.length===0||u.length===0||c.length!==u.length)continue;let b=this.validateArrayStride(c,u);b!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:b,templateFields:c})}return t}parseFieldDefault(A){let e=IA(A),r=A.defaultValue;function t(i,v){return{value:i,reason:v}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let v=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(v)}}if(r==="NaN"){let i=e.rwfunc;return t(`${i}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(A);return s?t(s.calculated,s.reason):(r!==void 0&&!tn.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!tn.exec(`${A.offset}`)||!!tn.exec(`${A.scale}`)||!!tn.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,s=A.scale!==void 0?Number(A.scale):1;if(s===0)return null;let i=(Number(e)-t)/s,v=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return A.type.startsWith("float")?i%1===0&&(i=i.toFixed(1)):(i=Math.round(i),v=`Rounded value of: ${v}`),{calculated:i,reason:v}}return null}};function lp(x){return`${`onUplinkApply_${x}()`};`}function al(x,A,e){A.libraries.forEach(r=>{let t=T0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function cp(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${T0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function Ep(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))an[r].ctype===Zx.cx&&([z0.up,z0.upPlus,z0.deviceOnly].includes(t.transferDirection)&&e.push(t),[z0.bothPlus,z0.both,z0.downPlus,z0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function Bp(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),al(x,e,"Restore"),Ax.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function Cp(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),al(x,e,"Apply"),Ax.hasContainerAppFields(e)&&x(` ${lp(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function ol(x,A){let e=[],r=e.push.bind(e);cp(r,A);let{containerApply:t,containerRestore:s}=Ep(x);return Bp(r,s),Cp(r,t),e.join(`
2788
+ `)}var dp=Ap.map(x=>`_DDE_${x}_write`);function Fl(x){let A=[],e=A.push.bind(A),r=[...dp];for(let[t,s]of Object.entries(x.containers)){let i=Ha(s.containerType,s.transferDirection),v=an[t];if(!i||!s.fields||v.ctype!==Zx.cx)continue;let c=`DDE_${s.name}`,u=`DDE_${s.title}_id`;if([z0.both,z0.bothPlus,z0.none,z0.deviceOnly,z0.up,z0.upPlus].includes(s.transferDirection)){let b=`_${c}_write`;e(`stock ${b}() {`),e(` dde_wbegin(${u});`),nl(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(b),1)}if(v.ctype===Zx.cx){let b=`_${c}_read`;e(`stock ${b}() {`),e(` if (dde_rbegin(${u})) return ERROR;`),nl(e,s,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
2789
+ `)}function nl(x,A,e){A.libraries.forEach(r=>{let t=T0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),Ax.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function vl(x,A){let e=[],r=await px.getApmPartDependencies(x,A,_0.Part.dlo,!0);await nn(x,A,e,s0.fileNames.autoInc);let t=await up(x,A,r);for(let s of r)s.name==="local-data-interface"&&await nn(x,A,e,s0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await nn(x,A,e,s0.fileNames.autoDdeInc.replace("X","app")),await nn(x,A,e,s0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await nn(x,A,e,s0.fileNames.autoUplinkInc),e.join(`
2790
+ `)}async function up(x,A,e){let r=[];for(let t of e){let s=s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(Ja.Utils.joinPath(x,s))&&r.push(`#include "${s0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function nn(x,A,e,r){let t=Ja.Utils.joinPath(x,s0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var ll=Y0(require("semver")),cl=require("yaml");var MA=Ax.ContainerType,gi=Ax.TransferDirection,Dp=Ax.fieldTypeDefinitions,yt={$ref:"#/components/parameters/contextId"},pp={$ref:"#/components/parameters/addonId"},bp={$ref:"#/components/parameters/appId"},fl={$ref:"#/components/schemas/histdataResponse"},mp={$ref:"#/components/schemas/histdataRequest"},ki={$ref:"#/components/schemas/rapidM2MStamp"},jp={$ref:"#/components/schemas/timeseriesRequestBase"},hp={$ref:"#/components/headers/xMtBackfill"},gp="x-mt-backfill",za={[gp]:hp},hi="rapidM2M Stamp",ne={description:"Successful operation"},El={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}},headers:{xMtBackfill:{description:["Only set by the local PoV API of the companion app, never by the myDatanet server.",'Present (value "pending") while the companion app is still fetching the requested time range from the device (on-demand backfill).',"The body is always answered immediately from the local data mirror in the normal shape; the loading signal lives only in this header.","Clients should show a loading indicator and re-issue the same request (poll) until the header disappears - every poll reads the by-then-larger mirror.",'A backfill is only armed by an explicit "from" stamp in the request; a request without "from" or with from: "*" never triggers a device fetch.',"The header is absent when the range is already local, the fetch completed within the internal grace wait, no device is connected, the connected device belongs to another site, the fetch failed (15 s cooldown before retry) or the device no longer retains the range.",'A range the device no longer holds simply stays empty and should be rendered as an empty/partial result, not as an error. Deep ranges can stay "pending" for a while, a completed depth is persisted and never fetched twice.'].join(" "),schema:{type:"string",enum:["pending"]}}}},Bl={...structuredClone(El)};Object.assign(Bl.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[ki,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:hi,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:hi,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:hi,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:hi,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var Fn={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Dr={401:{description:"Permission denied",...Fn},403:{description:"Forbidden",...Fn},404:{description:"Resource not found",...Fn},500:{description:"Internal error",...Fn}};function Va(x,A,e=null){let r=ll.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{},headers:{}}};e?Object.assign(t.components,structuredClone(El)):Object.assign(t.components,structuredClone(Bl));let s=X.isAddon(A),i=X.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let v of Object.values(x.containers))e&&(!v.libraries.includes(e)||v.containerType===MA.hx)||!e&&!Ax.hasContainerAppFields(v)||v.containerType===MA.aloha||(kp(t,v),_p(t,v,e),qp(t,v,s,i),!s&&!i&&(yp(t,v,e),Sp(t,v)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,cl.stringify)(t)}function kp(x,A){x.tags.push({name:jA(A.title),description:`Transfer direction ${A.transferDirection}`})}function jA(x){return x.split("_").join(" ")}function yp(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===MA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let i of A.fields)i.library!==e||i.type==="shadow"||(A.containerType===MA.hx?t.properties.select.items.enum.push(i.id):(t.properties[i.id]=Cl(i),!i.readPermission&&!i.writePermission&&s.push(i.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function _p(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],i=A.containerType===MA.hx;for(let c of A.fields)c.library!==e||c.type==="shadow"||(t.properties[c.name]=Cl(c),!c.readPermission&&!c.writePermission&&s.push(c.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let v=t.properties;if(i){t.required=t.required?.map(u=>u.toLowerCase());let c={};for(let[u,b]of Object.entries(t.properties))c[u.toLowerCase()]=b;t.properties=c}if(i){let c={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(v)}}}};x.components.schemas[`${r}RequestSingle`]=c,x.components.schemas[`${r}Request`]={allOf:[jp,c]},t.properties.stamp=ki,s.push("stamp")}}function Cl(x){let e={...Dp[x.type].openApi},r=wp(x);return e.default=r,e.example=r,e.description=x.description,e}function wp(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function Sp(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([MA.cx,MA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[jA(A.title)],summary:`Retrieve the data of the "${jA(A.title)}" container`,parameters:[yt],responses:{200:{...ne,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:ki}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Dr}},[gi.down,gi.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[jA(A.title)],summary:`Modify the data of the "${jA(A.title)}" container`,parameters:[yt],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...ne},204:{...ne},...Dr}});else if(A.containerType===MA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[jA(A.title)],summary:`Retrieve the youngest data of the "${jA(A.title)}" container`,parameters:[yt,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...ne,content:{"application/json":{schema:fl}}},...Dr}},x.paths[t]={get:{deprecated:!0,tags:[jA(A.title)],summary:`Get the historical data of the "${jA(A.title)}" container.`,parameters:[yt,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},mp]}}],responses:{200:{...ne,headers:za,content:{"application/json":{schema:fl}}},...Dr}}}}x.paths[e]=r}function qp(x,A,e=!1,r=!1){let s=A.containerType===MA.hx?"timeseries":"containers",i=[],v=jA(A.title);r||i.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[yt],tags:[v]}),e&&(i=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[yt,pp],tags:[v]}]);let c={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[bp],tags:["app-center"]};r&&c.tags.push(v),i.push(c);let u={get:void 0,put:void 0,post:void 0},b={tags:[],summary:`Retrieve the data of the "${jA(A.title)}" container`,parameters:[],responses:{200:{...ne,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:ki}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Dr}};if([MA.cx,MA.cb].includes(A.containerType)&&(u.get=b,[gi.down,gi.backendOnly].includes(A.transferDirection)&&(u.put={tags:[],summary:`Modify the data of the "${jA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...ne},204:{...ne},...Dr}}),i.forEach(m=>{let g=structuredClone(u);Object.values(g).forEach(q=>{q?.parameters?.unshift(...m.params),q?.tags?.unshift(...m.tags)}),x.paths[m.path]=g})),A.containerType===MA.hx){u.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...ne,headers:za,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Dr}},e&&(u.post={tags:[],summary:`Insert data into the "${jA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...ne},400:{description:"Bad request",...Fn},...Dr}});let m=i[0],g=structuredClone(u);Object.values(g).forEach(z=>{z?.parameters?.unshift(...m.params),z?.tags?.unshift(...m.tags)}),x.paths[m.path]=g;let q={...ne,headers:za,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},_=`${m.path}/youngest`,$={get:structuredClone(g.get)};$.get.summary=`Get the youngest record of "${A.title}" container`,$.get.responses[200]=q;let T=e?2:1;$.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[_]=$;let M=`${m.path}/oldest`,N={get:structuredClone(g.get)};N.get.summary=`Get the oldest record of "${A.title}" container`,N.get.responses[200]=q,N.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[M]=N}}var ul=Ax.TransferDirection,yi=" new szTemp{64};",_i=" return strcat(aData, szTemp, sizeof(szTemp));";function Dl(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function Wa(x){if(x.type==="shadow"||x.shadowRef)return null;let A=IA(x);return!A||A==="skip"?null:Dl(A)}function pl(x){return[Ax.ContainerType.hx,Ax.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==ul.backendOnly}function Tp(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=IA(x);return!!A&&A!=="skip"}function Pp(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",s=`${x.arrayRef.name}|${t}|${A}`;e.has(s)||e.set(s,{fields:[],formatType:A}),e.get(s).fields.push(x)}function $p(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!Tp(s))continue;let i=Wa(s);s.arrayRef&&i?Pp(s,i,e):(A.push(s),i?r.add(i):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function Np(x,A,e){e.sort((u,b)=>u.arrayRef.index-b.arrayRef.index);let r=e.map(u=>u.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((u,b)=>b===0||u-r[b-1]===t)))return null;let[i,v]=A.split("|"),c=e[0].library?`_${T0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:i,subField:v,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:Wa(e[0]),pawnVarBase:`${c}${x}_${i}`}}function Ip(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=$p(A),i=[];for(let[v,c]of r){let{fields:u,formatType:b}=c;if(u.length<2){e.push(...u),t.add(b);continue}let m=Np(x,v,u);m?(t.add(b),i.push(m)):(e.push(...u),t.add(b))}return e.sort((v,c)=>v.byteOffset-c.byteOffset),{arrayGroups:i,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function Mp(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(pl(e))for(let r of e.fields){let t=Wa(r);t&&A.add(t)}return A}function Rp(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(yi),x(' sprintf(szTemp, _, "%d", value);'),x(_i),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(yi),x(' sprintf(szTemp, _, "%.3f", value);'),x(_i),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(yi),x(' sprintf(szTemp, _, "%s", value);'),x(_i),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(yi),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(_i),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function Lp(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function Op(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function Gp(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:i,subField:v}=A,c=Lp(e,t),u=Op(e,r,t);if(x(` if (${u}) {`),s==="bin"){let b=`${i}[${c}]${v}`,m=v?v.substring(1):"",g=m?`${i}_${m}_dim`:`${i}_dim`;x(` return _DDE_fmt_bin(aData, ${b}, ${g});`)}else x(` return _DDE_fmt_${s}(aData, ${i}[${c}]${v});`);x(" }")}function Up(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=IA(e);if(!r||r==="skip")return;let s=`${e.library?`_${T0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,i=Dl(r);if(i==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(i)x(` case ${e.byteOffset}: return _DDE_fmt_${i}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let v=s;r.printfFormat&&(v=`(${r.printfFormat}(${v}))`),x(` sprintf(szTemp, _, "${r.printf}", ${v});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function Hp(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function dl(x,A,e){let r=e===Ax.ContainerType.cx?"c":"h",t=e===Ax.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,i]of Object.entries(A.containers))e===i.containerType&&s.startsWith(t)&&i.transferDirection!==ul.backendOnly&&Hp(x,s,i);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function Jp(x,A){let e=Ip(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)Gp(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)Up(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function Kp(x,A){for(let[,e]of Object.entries(A.containers))pl(e)&&Jp(x,e)}function bl(x){let A=[],e=A.push.bind(A),r=Mp(x);return Rp(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),dl(e,x,Ax.ContainerType.cx),dl(e,x,Ax.ContainerType.hx),e(" return OK;"),e("}"),Kp(e,x),A.join(`
2791
+ `)}var gl=T0.yamlRangeToLineInformation,vn=s0.filePaths.dde.path,ee;(F0=>{let x=Ax.DDEJson,A=T0.convertBlobToString;F0.DDE_SCHEMA=Jo;async function r(L,k){let O=await k.readFile(L);return A(O)}F0.readYamlFile=r;async function t(L,k,O=s0.fileNames.mainDDE,V){let Y=[],H=await X.read(L,k),W=await ml(L,k,H);if(V)for(let x0 of W){let{result:f0,unresolvedKeys:U}=gx.replaceDefineTemplates(x0.yaml,V);x0.yaml=f0;for(let v0 of U)Y.push({file:x0.path,level:"error",message:`Unresolved define template: {{${v0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let x0 of W)Y.push(...c(x0.path,x0.yaml));let n0=Tx.Utils.joinPath(L,vn,O),r0=await r(n0,k);if(V){let{result:x0,unresolvedKeys:f0}=gx.replaceDefineTemplates(r0,V);r0=x0;for(let U of f0)Y.push({file:n0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return Y.push(...c(n0,r0)),{manifest:H,libraryFiles:W,main:{path:n0,yaml:r0},diagnostics:Y}}F0.validate=t;async function s(L,k,O,V=s0.fileNames.mainDDE){let Y=await X.read(L,k),H=await gx.read(L,k,O),W=await t(L,k,V,H.flat);if(W.diagnostics.filter(p0=>p0.level==="error").length>0)return{ddeJSON:null,diagnostics:W.diagnostics};let r0=await q(L,k,O),x0=new mi.PreCompiler(Y,W.libraryFiles,r0),f0=x0.parseLibraries();if(f0.find(p0=>p0.level==="error"))return{ddeJSON:null,diagnostics:[...W.diagnostics,...f0]};let{ddeJSON:v0,diagnostics:c0}=x0.parseMainDDE(W.main.path,W.main.yaml);return{ddeJSON:v0,diagnostics:[...W.diagnostics,...c0]}}F0.compileDDE=s;let i=new jl.default({strict:!1,allErrors:!0,verbose:!0});(0,hl.default)(i);let v=i.compile(F0.DDE_SCHEMA);function c(L,k){let O=new wi.LineCounter,V=(0,wi.parseDocument)(k,{lineCounter:O,keepSourceTokens:!0}),Y=[];for(let n0 of V.errors){let r0=n0.pos?gl(O,[n0.pos[0],n0.pos[1],n0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};Y.push({file:L,level:"error",message:n0.message,...r0})}if(Y.length>0)return Y;let H=V.toJSON();if(!v(H)){let r0=(v.errors||[]).filter(f0=>f0.keyword!=="if"),x0=new Set;for(let f0 of r0){let U=Wp(f0);if(x0.has(U))continue;x0.add(U);let v0=Yp(V,O,f0);Y.push({file:L,level:"error",message:U,...v0})}}return Y}F0.validateJsonSchema=c,F0.PreCompiler=(L,k,O)=>new mi.PreCompiler(L,k,O);function b(L,k){return Ga(L,k)}F0.generateMyDatanetXML=b;async function m(L,k,O,V){let Y=await X.read(L,k),H=Ga(Y,V),W=Tx.Utils.joinPath(L,s0.filePaths.dist.ddeXmlPath);await k.writeFile(W,H),O.log("Generated",s0.filePaths.dist.ddeXmlPath)}F0.exportMyDatanetXML=m;async function g(L,k,O,V,Y){let H=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dde.historyJson);await k.rm(H).catch(console.error);let W=await X.read(L,k);if(!X.isApp(W)||!W.registry?.id)return;if(!Y){O.warn("Could not fetch dde of previous version: No API token provided.");return}let n0=_e.coerce(W.version);try{let f0=(await hx.getExistingApplication(Y,W.publisher,W.registry.id,V)).versions.find(p0=>!_e.prerelease(p0.version)&&_e.lte(p0.version,n0)),U=f0?.files.find(p0=>p0.name==="dde.json");if(!U){O.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let v0=await fetch(U.downloadUrl,{headers:{...qA(Y),...hx.injectSemverHeader(!0)}});if(v0.status!==200){O.warn(`Could not fetch the dde.json of version "${f0?.version}"`);return}let c0=await v0.text();await k.writeFile(H,c0),O.log(`Saved history.json of previous app version ${f0.version}`)}catch(r0){O.error("Failed to fetch the dde of previous version",r0)}}F0.fetchPreviousHistoryJson=g;async function q(L,k,O){try{let V=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dde.historyJson);if(await k.stat(V)){let H=await k.readFile(V);return JSON.parse(A(H))}let Y=Tx.Utils.joinPath(L,vn,"history.json");if(await k.stat(Y)){O.warn(`"${s0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${vn}history.json"`);let H=await k.readFile(Y),W=JSON.parse(A(H)),n0=await X.read(L,k),r0=_e.coerce(n0.version)?.version,x0=Object.keys(W||{}).sort(_e.rcompare).find(U=>U!==r0);if(!x0)return null;let f0=W[x0];return{version:x0,...f0}}}catch(V){O.error("Failed to read history.json",V)}return O.warn("history.json does not exist"),null}F0.getHistoryJson=q;function _(L,k){return{version:_e.coerce(k.version)?.version||"1.0.0",...structuredClone(L)}}F0.buildHistoryJson=_;async function $(L,k,O,V){let Y=await X.read(L,k),H=_(V,Y),W=Tx.Utils.joinPath(L,s0.filePaths.dist.historyJson);await k.writeFile(W,JSON.stringify(H,null," ")),O.log("Generated",s0.filePaths.dist.historyJson)}F0.exportHistoryJson=$;async function T(L,k){return k.rm(Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.path))}F0.clearAutoDloDir=T;async function M(L,k,O,V){await T(L,k);let Y=await X.read(L,k),H=await ml(L,k,Y),W=await gx.read(L,k,O),n0=sl(V,W,Y),x0=new on(Y,V,null).generate();for(let dx of H){let iA=new on(Y,V,dx.libraryName),{globals:LA,helper:Kx}=iA.generate(),H0=[...LA,...Kx].join(`\r
2792
+ `),G0=s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",dx.libraryName),ox=Tx.Utils.joinPath(L,G0);H0.length&&(O.log("Generated",G0),await k.writeFile(ox,H0))}let f0=Fl(V),U=ol(V,H.map(dx=>dx.libraryName)),v0=bl(V),c0=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(c0,n0),O.log("Generated",s0.filePaths.studio.auto.dlo.autoInc);let p0=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(p0,U),O.log("Generated",s0.filePaths.studio.auto.dlo.autoUplinkInc);let b0=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(b0,v0),O.log("Generated",s0.filePaths.studio.auto.dlo.autoLocalDataInc);let I0=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(I0,[...x0.globals,...x0.helper].join(`
2793
+ `)),O.log("Generated",s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(L0,f0),O.log("Generated",s0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await z(L,k,O)}F0.exportAutoDloFiles=M;async function N(L,k,O,V){let Y=await X.read(L,k),H=X.isLibrary(Y),W=Tx.Utils.joinPath(L,s0.filePaths.dist.path,"dde-api.yaml");await k.rm(W).catch(()=>{});let n0=Tx.Utils.joinPath(L,s0.filePaths.dist.ddeApi);if(await k.writeFile(n0,Va(V,Y)),O.log("Generated",s0.filePaths.dist.ddeApi),H){let r0=Tx.Utils.joinPath(L,s0.filePaths.dist.ddeApiPath,`${Y.name}.yaml`),x0=Va(V,Y,Y.name);x0.length&&(await k.writeFile(r0,x0),O.log("Generated",s0.filePaths.dist.ddeApiPath+`${Y.name}.yaml`))}}F0.exportOpenApi=N;async function z(L,k,O){let V=Tx.Utils.joinPath(L,s0.filePaths.studio.auto.dlo.defaultInc),Y=await vl(L,k);await k.writeFile(V,Y),O.log("Generated",s0.filePaths.studio.auto.dlo.defaultInc)}F0.exportDefaultInc=z})(ee||={});async function ml(x,A,e){let r=[],t=await px.getAll(e);for(let s in t){let i=px.dependencyToPath(x,s),v=px.dependencyIdToName(s),c=Tx.Utils.joinPath(i,`${vn}/${v}.dde`);await A.stat(c)&&r.push({libraryName:v,path:c,yaml:await ee.readYamlFile(c,A)})}if(X.isLibrary(e)){let s=Tx.Utils.joinPath(x,`/${vn}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await ee.readYamlFile(s,A)})}return r}function zp(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function Vp(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function Wp(x){let A=x.instancePath||"/",e=x.parentSchema,r=zp(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${Vp(x.keyword,x.params,t,e)}`}function Xp(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function Yp(x,A,e){let r=Xp(x,e.instancePath||"");return r?gl(A,r):{line:0,startCharacter:0,endCharacter:0}}var Xa=require("vscode-uri");var Si;(e=>{async function x(r,t,s){let i=await X.read(r,t);if(await X.isApmPartEnabled(r,t,_0.Part.pov)){s.info("Executing POV build script",i.pov?.details.buildCommand);let{buildCommand:v,workingPath:c}=i.pov.details,u=Xa.Utils.joinPath(r,c);try{await kl(u,v,s)}catch(b){throw b.code?new Error(`APM part '${_0.Part.pov}' has errors. Aborted.`):b}}}e.tryBuildPov=x;async function A(r,t,s){let i=await X.read(r,t);if(await X.isApmPartEnabled(r,t,_0.Part.blo,i)){s.info("Executing BLO build script",i.blo?.buildCommand);let{buildCommand:v,workingPath:c}=i.blo,u=Xa.Utils.joinPath(r,c);try{await kl(u,v,s)}catch(b){throw b.code?new Error(`APM part '${_0.Part.blo}' has errors. Aborted.`):b}}}e.tryBuildBlo=A})(Si||={});async function kl(x,A,e){let r=Ne.parseCommandLine(A);await Ne.run(x,r,e)}var fn=require("@gera2ld/tarjs"),yl=T0.convertBlobToString,Ya=require("pako"),qx;(m=>{class x extends Error{_mergedDiagnostics;constructor(q,_){super(q),this.name="BuildError",this._mergedDiagnostics=_}get mergedDiagnostics(){return this._mergedDiagnostics}}m.BuildError=x;async function A(g,q,_,$,T,M=!0,N){M=Qp(_,M),await Zp(g,q,_,$,T,M);try{let L=await gx.read(g,q,_);await xb(g,q,_,L)}catch(L){_.warn("Could not generate defines.ts:",L)}let z={[_0.Part.dde]:[],[_0.Part.dlo]:[],[_0.Part.dfiles]:[]},F0={[_0.Part.dde]:Ab,[_0.Part.dlo]:eb,[_0.Part.dfiles]:rb};try{for(let L of[_0.Part.dde,_0.Part.dlo,_0.Part.dfiles])if(M.includes(L)&&(_.info(`Building ${L.toUpperCase()}...`),await sb(_,L,F0[L],z[L],g,q)))return z}catch(L){throw N?new x(L?.message,z):L}return M.includes(_0.Part.pov)?await Si.tryBuildPov(g,q,_):_.info("Skipping pov build"),M.includes(_0.Part.blo)?await Si.tryBuildBlo(g,q,_):_.info("Skipping blo build"),await tb(g,q,_),await nb(g,q,_),_.done("Project build completed."),z}m.buildAll=A;async function e(g,q,_,$,T,M,N){let z=await X.read(g,q);return X.isLibrary(z)?(_.info("Library project detected. Publishing library..."),s(g,q,_,T,$)):(_.info("App project detected. Publishing app..."),t(g,q,_,T,M,N,$))}m.release=e;async function r(g,q,_,$,T,M){let N=await X.read(g,q),z=`${N.name}-${N.version}.tar.gz`,F0=null;if(X.isLibrary(N))_.info("Library project detected. Packing library..."),F0=await _l(g,q,_,T,$);else{_.info("App project detected. Packing app...");let k=await wl(g,q,_,T,M,$);F0=await ob(k)}let L=xt.Utils.joinPath(g,z);F0!==null?(await q.writeFile(L,F0),_.done(`Packaged: ${L.fsPath}`)):_.error(`Could not create archive: ${L.fsPath}`)}m.pack=r;async function t(g,q,_,$,T,M=null,N){if(!await _0.validateAccess(g,q,$,!1,N))throw new Error("Could not validate access to application");let F0=await wl(g,q,_,$,T,N);await _0.updateProfile(g,q,$,N);let L=await _0.publishTag(g,q,$,F0,N);if(M!==null){let k=await X.read(g,q);await hx.updateExistingApplicationVersion($,k.publisher,k.registry?.id,k.version,{allowedBackends:M},N),_.info(`Tag "${L.version}" with phase "${L.phase}" shared with ${[...M].join(";")}!`)}_.done(`Tag "${L.version}" with phase "${L.phase}" published!`)}m.releaseAPM=t;async function s(g,q,_,$,T){let M=await X.read(g,q),N=await _l(g,q,_,$,T);await Ct.publishPackage($,M,N,T),_.done(`Library "${M.publisher}/${M.name}" with version "${M.version}" published!`)}m.releaseLibrary=s;async function i(g,q,_,$,T,M,N,z=null){if(M==="*"){let H=await X.read(g,q);M=`${H.name}-${H.version}.tar.gz`,_.info(`Publishing detected archive package "${M}"...`)}let F0=xt.Utils.joinPath(g,M);if(!await q.stat(F0))throw new Error(`Archive package not found: ${F0.fsPath}`);let L=await q.readFile(F0),k=await Fb(L),{publisher:O,registry:V,version:Y}=k;X.isLibrary(k)?(await Ct.publishPackage($,k,L,T),_.done(`Library "${O}/${k.name}" with version "${k.version}" published!`)):(await hx.updateApplicationFile($,O,V.id,Y,"app.tar.gz",L,T),await hx.updateExistingApplicationVersion($,O,V?.id,Y,{allowedBackends:z||void 0,phase:N||void 0},T),_.info(`Tag "${Y}" with phase "${N}" shared with ${[...z||""].join(";")}!`),_.done(`Tag "${Y}" with phase "${N}" published!`))}m.publishArchive=i;async function v(g,q,_){let $;try{$=await q.readFile(xt.Utils.joinPath(g,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(yl($)===s0.readme(_))throw new Error('"README.md" matches the default template. Please write a brief project description.');return $}m.getReadmeFile=v;async function c(g,q){let _;try{_=await q.readFile(xt.Utils.joinPath(g,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(yl(_)===s0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return _}m.getChangelogFile=c;async function u(g,q,_,$){let T=await X.read(g,q),{name:M,publisher:N,description:z}=T,F0=X.validateProjectName(M,X.isLibrary(T));if(F0)throw new Error(`name: ${F0}`);let L=X.validateDescription(z);if(L)throw new Error(`description: ${L}`);let k=X.validatePublisherId(N)||await X.validatePublisherOnline(_,N,$);if(k)throw new Error(`publisher: ${k}`);if(!X.isLibrary(T)&&(await X.validateApplicationIcon(g,q,T),X.validateEngineSettings(T),X.isApp(T)&&await X.isApmPartEnabled(g,q,_0.Part.dlo,T)&&(!T.dpid||!Object.values(X.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}m.validatePublishSettings=u;async function b(g,q){let _=Ya.ungzip(g),$=await fn.TarReader.load(_),T={};for(let M of $.fileInfos)q.includes(M.name)&&(T[M.name]=$.getFileBlob(M.name));return T}m.readFilesFromTarGz=b})(qx||={});function Qp(x,A){let e=Object.values(_0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function Zp(x,A,e,r,t,s){await px.validateMinimumBackendVersion(x,A,e),s.includes(_0.Part.dde)&&await ee.fetchPreviousHistoryJson(x,A,e,r,t)}async function xb(x,A,e,r){r.defaultsOnly?(await gx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",s0.filePaths.dist.definesTs,"(defaults only)"),await gx.exportDefinesTs(x,A,r,s0.filePaths.dist.definesAppTs),e.log("Generated",s0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await gx.exportDefinesTs(x,A,r),e.log("Generated",s0.filePaths.dist.definesTs))}async function Ab(x,A,e){let r=await ee.compileDDE(x,A,e);if(r.ddeJSON){await ee.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await X.read(x,A);X.isLibrary(t)||await ee.exportHistoryJson(x,A,e,r.ddeJSON),await ee.exportOpenApi(x,A,e,r.ddeJSON),await X.isApmPartEnabled(x,A,_0.Part.dlo,t)&&(await ee.exportAutoDloFiles(x,A,e,r.ddeJSON),await Bt.exportDloConfig(x,A,e))}return r.diagnostics}async function eb(x,A,e){let r=new Et(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function rb(x,A,e){return await $n.process(x,A,e)}async function tb(x,A,e){let r=await X.read(x,A);X.isLibrary(r)&&await st.normalizeLibraryParts(x,A,r,e)}async function nb(x,A,e){let r=xt.Utils.joinPath(x,s0.fileNames.reportTemplate);if(await A.stat(r)){let t=xt.Utils.joinPath(x,s0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${s0.fileNames.reportTemplate}" to dist folder.`)}}function ib(x,A,e){A!==_0.Part.dlo&&ab(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function sb(x,A,e,r,t,s){let i=await e(t,s,x);return r.push(...i),ib(x,A,i)}function ab(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function _l(x,A,e,r,t){let s=await X.read(x,A);return await X.validateBasicManifest(x,A,s),await qx.buildAll(x,A,e,t,r),await Ct.createArchive(x,A)}async function wl(x,A,e,r,t,s){if(!Object.values(_0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await X.validateBasicManifest(x,A,null),await qx.buildAll(x,A,e,s,r),await _0.createTag(x,A,t)}async function ob(x){let A=new fn.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let s=t;A.addFile(r,s)}else{let s=t;A.addFile(r,await s.arrayBuffer())}let e=await A.write();return Ya.gzip(await e.arrayBuffer())}async function Fb(x){let A=await vb(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function vb(x,A){let e=Ya.ungzip(x),r=await fn.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var fb=T0.bufferToBase64;var _0;(b=>{let x;(N=>(N.alpha="alpha",N.beta="beta",N.rc="rc",N.release="release",N.stage="stage",N.passive="passive",N.withdrawn="withdrawn"))(x=b.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=b.Part||={});function e(m){let{description:g,name:q,pov:_,engines:$,blo:T,publisher:M,type:N}=m,z=N||X.ProjectTypes.app,F0={name:q,abstract:g,author:M||"",pov_location:X.PovLocation.embedded,pov_details_lowlevel:!1,required_be:$?.backend,required_hwfw:$?.hwfw?.join(";"),required_productcode:$?.productId?.join(";"),blo_level:T?.accessLevel||X.BloAccessLevel.restricted,pip_id:""};return _&&_.details&&(F0.pov_location=X.PovLocation.pure,F0.pov_details_lowlevel=!!_.details.lowLevel),z==="addon"&&(F0.required_hwfw=void 0,F0.required_productcode=void 0,F0.addon_max_sources=1,F0.addon_max_per_site=m.maxInstancesPerSite),F0}b.createBaseTagHeader=e;async function r(m,g,q){let _=await X.read(m,g),$=e(_),T={version:_.version,...$,phase:q};return await s(m,g,_,T)}b.createTag=r;async function t(m,g){let q=await X.read(m,g),$={...e(q),blo_autostart:!1};return s(m,g,q,$)}b.createDevTag=t;async function s(m,g,q,_){let $=new FormData;$.append("tag",JSON.stringify(_)),$.append(`src/${X.fileName}`,new Blob([await X.readAsBlob(m,g)]));let T=new Blob([await g.readFile(Ue.Utils.joinPath(m,s0.filePaths.dist.ddeXmlPath))]);if($.append("bin/dde/xml",T),q.icon){let N=await g.readFile(Ue.Utils.joinPath(m,q.icon)),z=fb(N);$.append("previews/00.png",new Blob([`data:image/png;base64,${z}`]))}if(Object.hasOwn(_,"phase")){let N=await qx.getReadmeFile(m,g,_.name),z=await qx.getChangelogFile(m,g);$.append("previews/README.md",new Blob([N])),$.append("previews/CHANGELOG.md",new Blob([z]))}if(await X.isApmPartEnabled(m,g,"dlo")){let N=new Blob([await g.readFile(Ue.Utils.joinPath(m,s0.filePaths.dist.mainAmxPath))]);$.append("bin/dlo/amx",N)}if(await X.isApmPartEnabled(m,g,"pov",q)){await Sl(m,g,$,s0.filePaths.dist.povDetailsPath,"bin/pov/details");let N=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');$.append("bin/pov/list/index.html",new Blob([N]))}let M=await g.findFiles(m,`${s0.filePaths.dist.dfilesPath}/*`);for(let N of M){let z=new Blob([await g.readFile(N)]);$.append(`bin/dfiles/${Ue.Utils.basename(N)}`,z)}return await X.isApmPartEnabled(m,g,"blo",q)&&await Sl(m,g,$,s0.filePaths.dist.bloPath,"bin/blo"),await lb(m,g,$),$}b.createBuffer=s;async function i(m,g,q,_,$){let T=await X.read(m,g);_||await qx.validatePublishSettings(m,g,q,$);let{registry:M}=T,N=M?.id;if(!N&&!_&&(N=await v(m,g,q,T,$)),N){let{publisher:z}=T;if(!z)return null;try{return{id:N,...await hx.getExistingApplication(q,z,N,$)}}catch(F0){if(F0?.message==="Could not find given application")return N=await v(m,g,q,T,$),{id:N,...await hx.getExistingApplication(q,z,N,$)}}}return null}b.validateAccess=i;async function v(m,g,q,_,$){let T="myDatanet",{publisher:M,name:N,description:z,registry:F0}=_,L={id:F0?.id,type:_.type||X.ProjectTypes.app,name:N,targetSystem:T,description:z||"",allowedBackends:null};X.isAddon(_)&&(L.allowedApplications=null);let k=await hx.createNewApplication(q,M,L,$);if(!k)throw new Error("Failed to initialize application");return _.registry={id:k},await X.write(m,g,_),k}b.registerNew=v;async function c(m,g,q,_){let{name:$,publisher:T,description:M,registry:N}=await X.read(m,g),z=N?.id;await hx.updateExistingApplication(q,T,z,{description:M,name:$,targetSystem:"myDatanet"},_)}b.updateProfile=c;async function u(m,g,q,_,$){let{publisher:T,registry:M,version:N}=await X.read(m,g);return await hx.publishApplicationVersion(q,T,M?.id,N,_,$)}b.publishTag=u})(_0||={});async function Sl(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let i of s){let v=Ue.Utils.joinPath(x,r),c=i.path.substring(v.path.length+1),u=new Blob([await A.readFile(Ue.Utils.joinPath(x,`${r}/${c}`))]);e.append(`${t}/${c}`,u)}}async function lb(x,A,e){let r=Ue.Utils.joinPath(x,s0.filePaths.dist.reportTemplate);if(await A.stat(r)){let s=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",s)}let t=Ue.Utils.joinPath(x,s0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var Wl=Y0(require("update-notifier"));function cb(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let s=0;s<r.length;s++){let i=r[s];s===r.length-1?t[i]=e:((typeof t[i]!="object"||t[i]===null||Array.isArray(t[i]))&&(t[i]={}),t=t[i])}}function ql(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[s,i]=t.split("=",2),v=s.slice(2),c=!0;if(i!==void 0)c=i;else{let u=A[r+1];u&&!u.startsWith("-")&&(c=u,r++)}v.includes(".")?cb(e,v,c):e[v]=c}return e}var Tl=require("vscode-uri");function Ti(x){return x instanceof Error?x.message:String(x)}function He(x,A){return{success:!1,errorCode:x,message:A}}async function Bb(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:s,options:i}=x;r.info("[1/5] Building project...");try{let v=i.part?i.part:!0;return await X.validateBasicManifest(A,e,null),await qx.buildAll(A,e,r,t,s,v,!0),r.done("Build completed successfully"),null}catch(v){return He(1,`Build failed: ${Ti(v)}`)}}async function Cb(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await ma(r,A);return t||He(2,`USB device not found with serial number: ${r}`)}async function db(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:s,debug:i}=t;r.info("[3/5] Uploading binary to USB device...");let v=Tl.Utils.joinPath(A,s0.filePaths.dist.mainAmxPath),c=await ht(s,v,e,r,i);return c.success?(r.done("USB upload completed"),null):He(3,`USB upload failed: ${c.message}`)}async function ub(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return He(4,`myDatanet authentication failed: ${Ti(e)}`)}}async function Db(x,A,e){if(A)try{let s=await x.getCustomer(A);return e.info(`Using customer: ${s.name} (${s._uid})`),s._uid}catch{return He(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return He(6,"No customers available. Please specify --customer or set MYDATANET_CUSTOMER");if(r.length===1)return e.info(`Using customer: ${r[0].name} (${r[0]._uid})`),r[0]._uid;let t=r.map(s=>s.name).join(", ");return He(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function pb(x,A,e,r){let t=await x.getDeviceSite(A);t&&(t.app.phase==="dev"&&(e.apmId=t.app.apmid,e.applicationId=t.app.appl_id),e.siteUid=t._uid,e.siteName=t.name,e.customerUid=t.customer_uid,r.info(`Found existing site: ${t.name}`))}async function bb(x,A,e){let{cwd:r,fs:t,logger:s}=x;s.info("Creating development APM tag...");try{let i=await _0.createDevTag(r,t),v=await A.uploadDevTag(e.apmId,i);return e.applicationId=v,s.done("Development tag uploaded"),null}catch(i){return He(5,`Development tag upload failed: ${Ti(i)}`)}}async function mb(x,A,e,r){r.info("[5/5] Creating development site...");try{return e.siteUid?(e.siteName!==e.name&&await x.updateSiteName(e.siteUid,e.name),r.info(`Reusing existing site: ${e.siteUid}`),{siteUid:e.siteUid,siteName:e.name}):{siteUid:await x.createDevelopmentSite(A,e),siteName:e.name}}catch(t){return He(6,`Site creation failed: ${Ti(t)}`)}}function Pl(x,A,e=!1){if(e){x.log(JSON.stringify({siteUid:A.siteUid,siteName:A.siteName,apmId:A.apmId}));return}x.done("Development deployment completed successfully!"),x.info(""),x.info("=== Deployment Summary ==="),x.info(`Site UID: ${A.siteUid}`),x.info(`Site Name: ${A.siteName}`),x.info(`APM ID: ${A.apmId}`),x.info("==========================")}function qi(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function $l(x,A,e,r,t,s){let i={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:s},{serial:v,server:c,customer:u,mdnToken:b}=s;e.info("Starting development deployment...");let m=await Bb(i);if(m)return m;let g=await Cb(i);if(qi(g))return g;let q=await db(i);if(q)return q;let _=new en(c,b,e),$=await ub(_,e);if(qi($))return $;let T=$,M=await Db(_,u,e);if(qi(M))return M;let N=M,z=await Ra(x,A,e,v,T.name,N,s.siteName);await pb(_,v,z,e);let F0=await bb(i,_,z);if(F0)return F0;let L=await mb(_,N,z,e);return qi(L)?L:{success:!0,siteUid:L.siteUid,siteName:L.siteName,apmId:z.apmId,message:"Development deployment completed successfully"}}var Za="/api/1/sites/dev";function jb(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function xo(x,A){let e=x;try{e=JSON.parse(x).err??x}catch{}let r=/E_NOT_FOUND|E_BAD_REQUEST/.test(e)?8:/E_FORBIDDEN|E_METHOD_NOT_ALLOWED/.test(e)?9:3;return new ax(`${e} (HTTP ${A})`,r)}function hb(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(s,i,v)=>fetch(`${e}${i}`,{method:s,headers:r,body:v===void 0?void 0:JSON.stringify(v)});return{async api(s){let i=jb(s.method)&&s.body?JSON.parse(s.body):void 0,v=await t(s.method,s.path,i),c={};return v.headers.forEach((u,b)=>{c[b]=u}),{status:v.status,headers:c,body:await v.text()}},async dev(s,i,v){let c=await t(s,i,v),u=await c.text();if(!c.ok)throw xo(u,c.status);return u?JSON.parse(u):null},async close(){}}}async function gb(x){if(!x.serial)throw new ax("--serial is required unless --url is given",2);let A=new Cr({cwd:x.cwd,fs:x.fs,serial:x.serial,logger:x.logger,build:!1,flash:!1,pollIntervalMs:0,waitMs:x.waitMs,env:x.env,apiToken:x.apiToken,debug:x.debug,createDevice:x.createDevice,transportFactory:x.transportFactory});A.on("error",e=>x.logger.warn(e instanceof Error?e.message:String(e)));try{await A.start()}catch(e){throw await A.stop(),e}return{api:e=>A.handleApi(e),async dev(e,r,t){return kb(A,e,r,t)},close:()=>A.stop()}}function Nl(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function kb(x,A,e,r){let t=r??{},[s,i=""]=e.split("?"),v=new URLSearchParams(i);switch(`${A} ${s}`){case"GET /dev/status":return x.status();case"GET /dev/state":return x.state();case"POST /dev/at":return{cmd:t.cmd,response:await x.at(String(t.cmd))};case"POST /dev/flash":return x.flash(typeof t.file=="string"?t.file:void 0);case"POST /dev/sync":return x.sync(Array.isArray(t.tags)?t.tags:void 0);case"GET /dev/logs":return{lastSeq:x.logStream.lastSeq,records:x.logStream.since(Nl(v,"since",0),Nl(v,"limit",500))};default:throw new ax(`unsupported route ${A} ${s}`,3)}}async function yb(x){return x.url?hb(x.url,x.token):gb(x)}async function Je(x,A){let e=await yb(x);try{return await A(e)}finally{await e.close()}}function Ao(x){if(x.status>=400)throw xo(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function Il(x){return Je(x,A=>A.dev("GET","/dev/status"))}async function Ml(x,A){let[e,r]=$b(A);return Je(x,async t=>{let s=Ao(await t.api({path:`${Za}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return s;let i=s??{},v=Object.keys(i).find(c=>c.toLowerCase()===r.toLowerCase());if(v===void 0)throw new ax(`unknown field '${r}' in container '${e}'`,8);return{[v]:i[v]}})}async function Rl(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new ax(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return Je(x,async t=>{let s=`${Za}/containers/${encodeURIComponent(A)}`,i=await t.api({path:s,method:"PUT",body:JSON.stringify(r)});if(i.status>=400)throw xo(i.body,i.status);let v=i.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:v,record:Ao(await t.api({path:s,method:"GET"}))}})}async function Ll(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${Za}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return Je(x,async s=>Ao(await s.api({path:t,method:"GET"})))}async function Ol(x,A){return Je(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function Gl(x){return Je(x,A=>A.dev("GET","/dev/state"))}async function Ul(x,A){return Je(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function Hl(x,A){return Je(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}var _b={marker:"live"};function Jl(x){return typeof x=="object"&&x!==null&&x.marker==="live"}async function wb(x){return(await x.dev("GET","/dev/logs?since=0&limit=1")).lastSeq}function Sb(x,A){let e=x.filter?new RegExp(x.filter):null,r=x.sinceMs!==void 0?Date.now()-x.sinceMs:void 0;return t=>{let s=t;r!==void 0&&(s.ts??0)<r||(!e||e.test(s.text??""))&&A(t)}}var Qa=500;async function Kl(x,A,e){return await x.dev("GET",`/dev/logs?since=${A}&limit=${e}`)}function zl(x,A,e){let r=A;for(let t of x)r=Math.max(r,t.seq),e(t);return r}async function qb(x,A,e){let r=await Kl(x,A,Qa);return zl(r.records,A,e)}async function Tb(x,A,e){let r=Qa;for(;;){let t=await Kl(x,A,r);if(t.records.length<r)return zl(t.records,A,e);r+=Qa}}async function Pb(x,A,e,r){let t=A;for(;Date.now()<e;)await new Promise(s=>setTimeout(s,500)),t=await qb(x,t,r)}async function Vl(x,A,e){let r=Sb(A,e);await Je(x,async t=>{let s=A.follow===!0,i=A.replay===!0||A.sinceMs!==void 0,v=s&&!i?await wb(t):0,c=await Tb(t,v,r);s&&i&&e(_b),s&&await Pb(t,c,Date.now()+(A.durationMs??3e4),r)})}function $b(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var hA=new rx.Command,Pi=(0,Wl.default)({pkg:Gi}),$0=new je.Logger,Nb=()=>process.env.NODE_ENV==="local-dev-app"?"./dev/pets-demo":process.env.NODE_ENV==="local-dev-lib"?"./dev/modbus-master":process.env.NODE_ENV==="local-dev-addon"?"./dev/addon":process.env.NODE_ENV==="local-dev-analytics"?"./dev/analytics":"",ie=_t.Utils.joinPath(_t.URI.file(process.cwd()),Nb());hA.version(Gi.version).usage("<command>");hA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
2781
2794
  The manifest options can be overwritten with the --option=value syntax.
2782
2795
  Example: "studio build --dlo.mainFile="./dlo/test.dlo" will overwrite the dlo.mainFile option of the manifest.
2783
2796
 
2784
- Use "studio --help" for more information.`);function Tx(x,A){let e=ml(x);return X.setOverwrites(e),A.catch(r=>{N0.error(r instanceof Error?r.message:r),process.exit(1)}).finally(()=>{qi.notify()})}function cb(x){return process.env.STUDIO_ENV=x||gx.ENV.production,x&&x!==gx.ENV.production&&N0.log(`Using STUDIO_ENV=${x}`),process.env.STUDIO_ENV}function Eb(x){return x?.token||null}function At(x){return(x.silent||x.json)&&(N0.silent=!0),x.debug&&(N0.debugEnabled=!0),{env:cb(x.env),token:Eb(x)}}var et=new rx.Option("-e, --env <environment>","CLI target environment (defaults to STUDIO_ENV environment variable)").default(process.env.STUDIO_ENV).choices(Object.values(gx.ENV)),rt=new rx.Option("--token <API-token>","API Access Token (defaults to STUDIO_TOKEN environment variable)").default(process.env.STUDIO_TOKEN),Bb=new rx.Option("--allowedBackends <null|*|server.xz;server.yz>","specify the allowedBackends deployment for this version.").default(null),Cb=Object.values(_0.TagPhase),Ol=new rx.Option("-ph --phase <release phase>","specify a release phase").choices(Cb).default("release"),xo=new rx.Option("-p --part <APM part>","APM part that should be built").choices(Object.values(_0.Part));function fn(x=!1){return new rx.Option("-s, --serial <serial>","Device serial number (16 characters hex)").makeOptionMandatory(x)}var ln=new rx.Option("--debug","Enable debug logging").default(!1),Ao=new rx.Option("--silent","Suppress intermediate progress output. Only the final result and errors are printed.").default(!1),db=new rx.Option("--siteName <name>","Override the auto-generated development site name (max 50 characters)."),eo=new rx.Option("--json",'Print the deployment result as a JSON object instead of the human-readable summary. Format: {"siteUid", "siteName", "apmId"}. Best combined with --silent for machine-readable output.').default(!1),ub=new rx.Option("--server <url>","myDatanet instance URL (https:// prefix optional)").default(process.env.MYDATANET_HOST),Db=new rx.Option("--customer <customerId>","myDatanet customer UID or ID").default(process.env.MYDATANET_CUSTOMER),pb=new rx.Option("--mdn-token <token>","myDatanet API token").default(process.env.MYDATANET_TOKEN);function _t(x,A,e=Number.MAX_SAFE_INTEGER){return r=>{let t=r.trim()===""?Number.NaN:Number(r);if(!Number.isInteger(t)||t<A||t>e)throw new rx.InvalidArgumentError(`${x} must be an integer between ${A} and ${e}, got '${r}'`);return t}}var bb={s:1e3,m:6e4,h:36e5};function mb(x){return A=>{let e=/^(\d+)(s|m|h)$/.exec(A.trim());if(!e)throw new rx.InvalidArgumentError(`${x} must be a duration like '30s', '5m' or '1h', got '${A}'`);return Number(e[1])*bb[e[2]]}}var jb=new rx.Option("--port <port>","Port the local device API server listens on").default(8765).argParser(_t("--port",0,65535)),hb=new rx.Option("--host <host>","Address the local device API server binds to").default("127.0.0.1"),gb=new rx.Option("--allow-remote","Allow a non-loopback --host without --bearer (the device API is then unauthenticated)"),kb=new rx.Option("--poll-interval <ms>","Stamp-poll interval in ms (0 disables polling)").default(2e3).argParser(_t("--poll-interval",0)),Gl=new rx.Option("--wait <ms>","How long a write waits for the device to confirm, in ms").default(3e3).argParser(_t("--wait",0)),yb=new rx.Option("--log-file [path]","Append every device log record to this JSONL file"),Ul=new rx.Option("--bearer <token>","Bearer token required by the local device API server (--token is the Studio API token)"),_b=new rx.Option("--replay <file>","Replay a companion-app flight-recorder export (.ndjson or .db) instead of a live device"),wb=new rx.Option("--session <id>","Recording session id to replay (default: the session with the most records)"),Sb=new rx.Option("--speed <n|max>","Replay speed: a multiplier, or `max` for no recorded delays").default(1).argParser(x=>x==="max"?"max":_t("--speed",0)(x)),qb=new rx.Option("--url <url>","Run against a running `studio dev` server instead of opening USB");function pr(x,A){N0.silent=!1,A?N0.log(JSON.stringify(x)):N0.log(JSON.stringify(x,null,2)),process.exitCode=0}function Hl(x){return x instanceof ax?x.exitCode:1}function MA(x){N0.silent=!1,N0.error(x instanceof Error?x.message:String(x)),qi.notify(),process.exitCode=Hl(x)}function Ke(x){let{env:A,token:e}=At(x);return{cwd:Je,fs:Pe,logger:N0,serial:x.serial,url:x.url,token:x.bearer,debug:x.debug,env:A,apiToken:e,waitMs:x.wait}}function ze(x,A,e){return x.command(A).description(e).addOption(fn()).addOption(qb).addOption(Ul).addOption(ln).addOption(Ao).addOption(eo).addOption(et).addOption(rt)}RA.command("install").aliases(["i"]).description("install all the dependencies in your project").arguments("[dependency...]").allowExcessArguments(!0).addOption(et).addOption(rt).allowUnknownOption(!0).action((x,A,e)=>{let{env:r,token:t}=At(A);Tx(e,Hf(Je,Pe,N0,r,t,x))});RA.command("build").addOption(xo).allowExcessArguments(!0).addOption(et).addOption(rt).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=At(x);Tx(A,Jf(Je,Pe,N0,e,r,x.part))});RA.command("publish").addOption(Ol).addOption(Bb).addOption(et).addOption(rt).allowUnknownOption(!0).option("-i, --packagePath <path>",'Publish the provided library or app package. Use "*" for autodetection.').action(async(x,A)=>{let{env:e,token:r}=At(x);Tx(A,Kf(Je,Pe,N0,e,r,x.allowedBackends,x.phase,x.packagePath))});RA.command("package").alias("pack").description("Package the project").addOption(Ol).addOption(et).addOption(rt).allowUnknownOption(!0).action(async(x,A)=>{let{env:e,token:r}=At(x);Tx(A,zf(Je,Pe,N0,e,r,x.phase))});RA.command("run").description("Build, upload to USB device, and create development site on myDatanet").addOption(fn(!0)).addOption(ub).addOption(Db).addOption(pb).addOption(xo).addOption(et).addOption(rt).addOption(ln).addOption(Ao).addOption(eo).addOption(db).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=At(x),t=x.mdnToken,a=x.server;t||(N0.error("MYDATANET_TOKEN is required. Set via --mdn-token or MYDATANET_TOKEN environment variable"),qi.notify(),process.exit(4)),a||(N0.error("Server URL is required. Set via --server or MYDATANET_HOST environment variable"),qi.notify(),process.exit(4)),Tx(A,gl(Je,Pe,N0,e,r,{serial:x.serial,server:a,customer:x.customer,mdnToken:t,debug:x.debug,part:x.part?[x.part]:void 0,siteName:x.siteName||void 0}).then(i=>{N0.silent=!1,i.success?(hl(N0,i,x.json),process.exit(0)):(N0.error(i.message),process.exit(i.errorCode||1))}))});var ro=RA.command("usb").description("USB device management commands");ro.command("list").description("List available USB devices").action((x,A)=>{Tx(A,Xv(N0))});ro.command("upload").description("Upload an AMX binary to a USB device").addOption(fn(!0)).requiredOption("-f, --file <path>","Path to the AMX file (relative to current directory)").addOption(ln).action((x,A)=>{let e=yt.Utils.joinPath(Je,x.file);N0.debugEnabled=x.debug===!0,Tx(A,jt(x.serial,e,Pe,N0,x.debug).then(r=>{r.success?process.exit(0):(N0.error(r.message),process.exit(1))}))});ro.command("sync").description("Sync a USB device with the myDatanet server").addOption(fn(!0)).addOption(ln).action((x,A)=>{N0.debugEnabled=x.debug===!0,Tx(A,Yv(x.serial,N0,x.debug).then(e=>{e.success?process.exit(0):(N0.error(e.message),process.exit(1))}))});RA.command("dev").description("Build, flash and serve the myDatanet-compatible device API on localhost").addOption(fn()).addOption(jb).addOption(hb).addOption(gb).option("--watch","Rebuild, flash and sync when a source file changes",!1).option("--no-build","Skip the initial build").option("--no-flash","Skip flashing dist/dlo/main.amx").addOption(kb).addOption(Gl).addOption(yb).addOption(Ul).addOption(_b).addOption(wb).addOption(Sb).option("--pov [name]","Also start the project POV dev server against this server").addOption(xo).addOption(et).addOption(rt).addOption(ln).addOption(Ao).addOption(eo).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=At(x);return!x.serial&&!x.replay?Tx(A,Promise.reject(new Error("One of --serial or --replay is required")).catch(MA)):x.serial&&x.replay?Tx(A,Promise.reject(new Error("--serial and --replay are mutually exclusive")).catch(MA)):(x.json&&(N0.output={log:(...t)=>console.error(...t)},N0.silent=x.silent===!0),Tx(A,Pb(x,e,r).catch(MA)))});function Tb(x,A,e){let r=x.logFile===!0?yt.Utils.joinPath(Je,s0.filePaths.studio.dev.deviceLog).fsPath:x.logFile,t=typeof x.replay=="string";return{serial:x.serial,host:x.host,port:x.port,allowRemote:x.allowRemote===!0,watch:t?!1:x.watch,build:t?!1:x.build,flash:t?!1:x.flash,pollIntervalMs:x.pollInterval,waitMs:x.wait,logFile:typeof r=="string"?r:void 0,token:x.bearer,pov:x.pov,part:x.part?[x.part]:void 0,debug:x.debug,env:A,apiToken:e,logger:N0,replay:x.replay,session:x.session,speed:x.speed}}async function Pb(x,A,e){let r=await Na(Je,Pe,Tb(x,A,e));x.json?$b(r):Nb(r),await new Promise(t=>{let a=!1,i=()=>{a||(a=!0,r.close().catch(l=>N0.error(l instanceof Error?l.message:String(l))).finally(()=>{process.exitCode=0,process.stdin.pause(),t()}))};process.once("SIGINT",i),process.once("SIGTERM",i),x.json||Ib(r,i)})}function $b(x){process.stdout.write(`${JSON.stringify({url:x.url,serial:x.session.serial,apmId:x.apmId,port:x.port})}
2797
+ Use "studio --help" for more information.`);function Sx(x,A){let e=ql(x);return X.setOverwrites(e),A.catch(r=>{$0.error(r instanceof Error?r.message:r),process.exit(1)}).finally(()=>{Pi.notify()})}function Ib(x){return process.env.STUDIO_ENV=x||gx.ENV.production,x&&x!==gx.ENV.production&&$0.log(`Using STUDIO_ENV=${x}`),process.env.STUDIO_ENV}function Mb(x){return x?.token||null}function At(x){return(x.silent||x.json)&&($0.silent=!0),x.debug&&($0.debugEnabled=!0),{env:Ib(x.env),token:Mb(x)}}var et=new rx.Option("-e, --env <environment>","CLI target environment (defaults to STUDIO_ENV environment variable)").default(process.env.STUDIO_ENV).choices(Object.values(gx.ENV)),rt=new rx.Option("--token <API-token>","API Access Token (defaults to STUDIO_TOKEN environment variable)").default(process.env.STUDIO_TOKEN),Rb=new rx.Option("--allowedBackends <null|*|server.xz;server.yz>","specify the allowedBackends deployment for this version.").default(null),Lb=Object.values(_0.TagPhase),Xl=new rx.Option("-ph --phase <release phase>","specify a release phase").choices(Lb).default("release"),eo=new rx.Option("-p --part <APM part>","APM part that should be built").choices(Object.values(_0.Part));function cn(x=!1){return new rx.Option("-s, --serial <serial>","Device serial number (16 characters hex)").makeOptionMandatory(x)}var En=new rx.Option("--debug","Enable debug logging").default(!1),ro=new rx.Option("--silent","Suppress intermediate progress output. Only the final result and errors are printed.").default(!1),Ob=new rx.Option("--siteName <name>","Override the auto-generated development site name (max 50 characters)."),to=new rx.Option("--json",'Print the deployment result as a JSON object instead of the human-readable summary. Format: {"siteUid", "siteName", "apmId"}. Best combined with --silent for machine-readable output.').default(!1),Gb=new rx.Option("--server <url>","myDatanet instance URL (https:// prefix optional)").default(process.env.MYDATANET_HOST),Ub=new rx.Option("--customer <customerId>","myDatanet customer UID or ID").default(process.env.MYDATANET_CUSTOMER),Hb=new rx.Option("--mdn-token <token>","myDatanet API token").default(process.env.MYDATANET_TOKEN);function wt(x,A,e=Number.MAX_SAFE_INTEGER){return r=>{let t=r.trim()===""?Number.NaN:Number(r);if(!Number.isInteger(t)||t<A||t>e)throw new rx.InvalidArgumentError(`${x} must be an integer between ${A} and ${e}, got '${r}'`);return t}}var Jb={s:1e3,m:6e4,h:36e5};function Kb(x){return A=>{let e=/^(\d+)(s|m|h)$/.exec(A.trim());if(!e)throw new rx.InvalidArgumentError(`${x} must be a duration like '30s', '5m' or '1h', got '${A}'`);return Number(e[1])*Jb[e[2]]}}var zb=new rx.Option("--port <port>","Port the local device API server listens on").default(8765).argParser(wt("--port",0,65535)),Vb=new rx.Option("--host <host>","Address the local device API server binds to").default("127.0.0.1"),Wb=new rx.Option("--allow-remote","Allow a non-loopback --host without --bearer (the device API is then unauthenticated)"),Xb=new rx.Option("--poll-interval <ms>","Stamp-poll interval in ms (0 disables polling)").default(2e3).argParser(wt("--poll-interval",0)),Yl=new rx.Option("--wait <ms>","How long a write waits for the device to confirm, in ms").default(3e3).argParser(wt("--wait",0)),Yb=new rx.Option("--log-file [path]","Append every device log record to this JSONL file"),Ql=new rx.Option("--bearer <token>","Bearer token required by the local device API server (--token is the Studio API token)"),Qb=new rx.Option("--replay <file>","Replay a companion-app flight-recorder export (.ndjson or .db) instead of a live device"),Zb=new rx.Option("--session <id>","Recording session id to replay (default: the session with the most records)"),xm=new rx.Option("--speed <n|max>","Replay speed: a multiplier, or `max` for no recorded delays").default(1).argParser(x=>x==="max"?"max":wt("--speed",0)(x)),Am=new rx.Option("--url <url>","Run against a running `studio dev` server instead of opening USB");function pr(x,A){$0.silent=!1,A?$0.log(JSON.stringify(x)):$0.log(JSON.stringify(x,null,2)),process.exitCode=0}function Zl(x){return x instanceof ax?x.exitCode:1}function RA(x){$0.silent=!1,$0.error(x instanceof Error?x.message:String(x)),Pi.notify(),process.exitCode=Zl(x)}function Ke(x){let{env:A,token:e}=At(x);return{cwd:ie,fs:ZA,logger:$0,serial:x.serial,url:x.url,token:x.bearer,debug:x.debug,env:A,apiToken:e,waitMs:x.wait}}function ze(x,A,e){return x.command(A).description(e).addOption(cn()).addOption(Am).addOption(Ql).addOption(En).addOption(ro).addOption(to).addOption(et).addOption(rt)}hA.command("install").aliases(["i"]).description("install all the dependencies in your project").arguments("[dependency...]").allowExcessArguments(!0).addOption(et).addOption(rt).allowUnknownOption(!0).action((x,A,e)=>{let{env:r,token:t}=At(A);Sx(e,Zf(ie,ZA,$0,r,t,x))});hA.command("build").addOption(eo).allowExcessArguments(!0).addOption(et).addOption(rt).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=At(x);Sx(A,xl(ie,ZA,$0,e,r,x.part))});var em=hA.command("spec").description("DLO unit-test spec (*.spec.dlo) commands");em.command("new <name>").description("scaffold a new *.spec.dlo next to the dlo main file").action((x,A,e)=>{Sx(e,(async()=>{let r=await X.read(ie,ZA),t=await Bt.scaffoldSpec(ie,ZA,r,x);$0.log(t)})())});hA.command("publish").addOption(Xl).addOption(Rb).addOption(et).addOption(rt).allowUnknownOption(!0).option("-i, --packagePath <path>",'Publish the provided library or app package. Use "*" for autodetection.').action(async(x,A)=>{let{env:e,token:r}=At(x);Sx(A,Al(ie,ZA,$0,e,r,x.allowedBackends,x.phase,x.packagePath))});hA.command("package").alias("pack").description("Package the project").addOption(Xl).addOption(et).addOption(rt).allowUnknownOption(!0).action(async(x,A)=>{let{env:e,token:r}=At(x);Sx(A,el(ie,ZA,$0,e,r,x.phase))});hA.command("run").description("Build, upload to USB device, and create development site on myDatanet").addOption(cn(!0)).addOption(Gb).addOption(Ub).addOption(Hb).addOption(eo).addOption(et).addOption(rt).addOption(En).addOption(ro).addOption(to).addOption(Ob).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=At(x),t=x.mdnToken,s=x.server;t||($0.error("MYDATANET_TOKEN is required. Set via --mdn-token or MYDATANET_TOKEN environment variable"),Pi.notify(),process.exit(4)),s||($0.error("Server URL is required. Set via --server or MYDATANET_HOST environment variable"),Pi.notify(),process.exit(4)),Sx(A,$l(ie,ZA,$0,e,r,{serial:x.serial,server:s,customer:x.customer,mdnToken:t,debug:x.debug,part:x.part?[x.part]:void 0,siteName:x.siteName||void 0}).then(i=>{$0.silent=!1,i.success?(Pl($0,i,x.json),process.exit(0)):($0.error(i.message),process.exit(i.errorCode||1))}))});var no=hA.command("usb").description("USB device management commands");no.command("list").description("List available USB devices").action((x,A)=>{Sx(A,nf($0))});no.command("upload").description("Upload an AMX binary to a USB device").addOption(cn(!0)).requiredOption("-f, --file <path>","Path to the AMX file (relative to current directory)").addOption(En).action((x,A)=>{let e=_t.Utils.joinPath(ie,x.file);$0.debugEnabled=x.debug===!0,Sx(A,ht(x.serial,e,ZA,$0,x.debug).then(r=>{r.success?process.exit(0):($0.error(r.message),process.exit(1))}))});no.command("sync").description("Sync a USB device with the myDatanet server").addOption(cn(!0)).addOption(En).action((x,A)=>{$0.debugEnabled=x.debug===!0,Sx(A,sf(x.serial,$0,x.debug).then(e=>{e.success?process.exit(0):($0.error(e.message),process.exit(1))}))});hA.command("dev").description("Build, flash and serve the myDatanet-compatible device API on localhost").addOption(cn()).addOption(zb).addOption(Vb).addOption(Wb).option("--watch","Rebuild, flash and sync when a source file changes",!1).option("--no-build","Skip the initial build").option("--no-flash","Skip flashing dist/dlo/main.amx").addOption(Xb).addOption(Yl).addOption(Yb).addOption(Ql).addOption(Qb).addOption(Zb).addOption(xm).option("--pov [name]","Also start the project POV dev server against this server").addOption(eo).addOption(et).addOption(rt).addOption(En).addOption(ro).addOption(to).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=At(x);return!x.serial&&!x.replay?Sx(A,Promise.reject(new Error("One of --serial or --replay is required")).catch(RA)):x.serial&&x.replay?Sx(A,Promise.reject(new Error("--serial and --replay are mutually exclusive")).catch(RA)):(x.json&&($0.output={log:(...t)=>console.error(...t)},$0.silent=x.silent===!0),Sx(A,tm(x,e,r).catch(RA)))});function rm(x,A,e){let r=x.logFile===!0?_t.Utils.joinPath(ie,s0.filePaths.studio.dev.deviceLog).fsPath:x.logFile,t=typeof x.replay=="string";return{serial:x.serial,host:x.host,port:x.port,allowRemote:x.allowRemote===!0,watch:t?!1:x.watch,build:t?!1:x.build,flash:t?!1:x.flash,pollIntervalMs:x.pollInterval,waitMs:x.wait,logFile:typeof r=="string"?r:void 0,token:x.bearer,pov:x.pov,part:x.part?[x.part]:void 0,debug:x.debug,env:A,apiToken:e,logger:$0,replay:x.replay,session:x.session,speed:x.speed}}async function tm(x,A,e){let r=await Ma(ie,ZA,rm(x,A,e));x.json?nm(r):im(r),await new Promise(t=>{let s=!1,i=()=>{s||(s=!0,r.close().catch(v=>$0.error(v instanceof Error?v.message:String(v))).finally(()=>{process.exitCode=0,process.stdin.pause(),t()}))};process.once("SIGINT",i),process.once("SIGTERM",i),x.json||sm(r,i)})}function nm(x){process.stdout.write(`${JSON.stringify({url:x.url,serial:x.session.serial,apmId:x.apmId,port:x.port})}
2785
2798
  `);for(let A of["log","build","sync","state","container-changed"])x.session.on(A,e=>process.stdout.write(`${JSON.stringify({event:A,payload:e})}
2786
- `))}function Nb(x){N0.done(`Device API server: ${x.url} (serial ${x.session.serial})`),N0.info("Commands: `at <cmd>`, `sync`, `flash`, `build`, `q` to quit"),x.session.on("log",A=>N0.log(`${vn.default.dim(A.source)} ${A.text}`)),x.session.on("container-changed",A=>N0.log(`${vn.default.cyan(A.container??"uto")} ${JSON.stringify(A.decoded??null)}`)),x.session.on("build",A=>{A.ok===!0?N0.done("Build completed"):A.ok===!1&&N0.error(A.message??"Build failed")})}function Ib(x,A){process.stdin.isTTY&&(process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{Mb(x,String(e).trim(),A).catch(r=>N0.error(r instanceof Error?r.message:String(r)))}))}async function Mb(x,A,e){A==="q"?e():A==="sync"?N0.log(JSON.stringify(await x.session.sync())):A==="flash"?N0.log(JSON.stringify(await x.session.flash())):A==="build"?await x.session.build():A.startsWith("at ")?N0.log(await x.session.at(A.slice(3).trim())):A&&N0.warn(`Unknown command: ${A}`)}var to="<container>",no="Container name or alias",Ve=RA.command("device").description("One-shot device commands (USB or a running `studio dev`)");ze(Ve,"info","Print DEVINFO/STAMPS/model status").action((x,A)=>Tx(A,yl(Ke(x)).then(e=>pr(e,x.json)).catch(MA)));ze(Ve,"get","Read a container, decoded via the project DDE").argument(to,`${no}, optionally \`container.field\``).action((x,A,e)=>Tx(e,_l(Ke(A),x).then(r=>pr(r,A.json)).catch(MA)));ze(Ve,"set","Write a container: encode, push and re-read").argument(to,no).argument("<values>","JSON object of field values").addOption(Gl).action((x,A,e,r)=>Tx(r,wl(Ke(e),x,A).then(t=>pr(t,e.json)).catch(MA)));ze(Ve,"timeseries","Read a histdata window, decoded via the project DDE").argument(to,`Histdata ${no.toLowerCase()}`).option("--from <stamp>","Inclusive lower bound (API stamp)").option("--to <stamp>","Exclusive upper bound (API stamp)").option("--limit <n>","Number of records (youngest first)",_t("--limit",1),100).action((x,A,e)=>Tx(e,Sl(Ke(A),x,{from:A.from,to:A.to,limit:A.limit}).then(r=>pr(r,A.json)).catch(MA)));ze(Ve,"logs","Print the device log ring buffer").option("--follow","Keep printing new records",!1).option("--duration <ms>","How long --follow runs",_t("--duration",0),3e4).option("--filter <regex>","Only print records whose text matches").option("--replay","With --follow, drain the full buffered history from the start first",!1).option("--since <duration>","With --follow, emit buffered records newer than this first, e.g. '30s', '5m', '1h'",mb("--since")).action((x,A)=>Tx(A,Rl(Ke(x),{follow:x.follow,durationMs:x.duration,filter:x.filter,replay:x.replay,sinceMs:x.since},e=>Rb(e,x.json)).then(()=>{process.exitCode=0}).catch(MA)));function Rb(x,A){if(N0.silent=!1,Nl(x)){A||N0.log(vn.default.dim("--- live ---"));return}if(A){N0.log(JSON.stringify(x));return}let e=x;N0.log(`${vn.default.dim(e.source)} ${e.text}`)}ze(Ve,"at","Run one AT command").argument("<cmd>",'AT command, e.g. "at+rm2mstate"').action((x,A,e)=>Tx(e,ql(Ke(A),x).then(r=>pr(r,A.json)).catch(MA)));ze(Ve,"state","Print the last rm2m state").action((x,A)=>Tx(A,Tl(Ke(x)).then(e=>pr(e,x.json)).catch(MA)));ze(Ve,"flash","Upload an AMX (defaults to dist/dlo/main.amx)").option("-f, --file <path>","AMX file to upload, relative to the project root").action((x,A)=>Tx(A,Pl(Ke(x),x.file).then(e=>pr(e,x.json)).catch(MA)));ze(Ve,"sync","Pull the device data into the mirror").action((x,A)=>Tx(A,$l(Ke(x)).then(e=>pr(e,x.json)).catch(MA)));function Jl(x){RA.parse(x)}0&&(module.exports={deviceExitCode,program});
2799
+ `))}function im(x){$0.done(`Device API server: ${x.url} (serial ${x.session.serial})`),$0.info("Commands: `at <cmd>`, `sync`, `flash`, `build`, `q` to quit"),x.session.on("log",A=>$0.log(`${ln.default.dim(A.source)} ${A.text}`)),x.session.on("container-changed",A=>$0.log(`${ln.default.cyan(A.container??"uto")} ${JSON.stringify(A.decoded??null)}`)),x.session.on("build",A=>{A.ok===!0?$0.done("Build completed"):A.ok===!1&&$0.error(A.message??"Build failed")})}function sm(x,A){process.stdin.isTTY&&(process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{am(x,String(e).trim(),A).catch(r=>$0.error(r instanceof Error?r.message:String(r)))}))}async function am(x,A,e){A==="q"?e():A==="sync"?$0.log(JSON.stringify(await x.session.sync())):A==="flash"?$0.log(JSON.stringify(await x.session.flash())):A==="build"?await x.session.build():A.startsWith("at ")?$0.log(await x.session.at(A.slice(3).trim())):A&&$0.warn(`Unknown command: ${A}`)}var io="<container>",so="Container name or alias",Ve=hA.command("device").description("One-shot device commands (USB or a running `studio dev`)");ze(Ve,"info","Print DEVINFO/STAMPS/model status").action((x,A)=>Sx(A,Il(Ke(x)).then(e=>pr(e,x.json)).catch(RA)));ze(Ve,"get","Read a container, decoded via the project DDE").argument(io,`${so}, optionally \`container.field\``).action((x,A,e)=>Sx(e,Ml(Ke(A),x).then(r=>pr(r,A.json)).catch(RA)));ze(Ve,"set","Write a container: encode, push and re-read").argument(io,so).argument("<values>","JSON object of field values").addOption(Yl).action((x,A,e,r)=>Sx(r,Rl(Ke(e),x,A).then(t=>pr(t,e.json)).catch(RA)));ze(Ve,"timeseries","Read a histdata window, decoded via the project DDE").argument(io,`Histdata ${so.toLowerCase()}`).option("--from <stamp>","Inclusive lower bound (API stamp)").option("--to <stamp>","Exclusive upper bound (API stamp)").option("--limit <n>","Number of records (youngest first)",wt("--limit",1),100).action((x,A,e)=>Sx(e,Ll(Ke(A),x,{from:A.from,to:A.to,limit:A.limit}).then(r=>pr(r,A.json)).catch(RA)));ze(Ve,"logs","Print the device log ring buffer").option("--follow","Keep printing new records",!1).option("--duration <ms>","How long --follow runs",wt("--duration",0),3e4).option("--filter <regex>","Only print records whose text matches").option("--replay","With --follow, drain the full buffered history from the start first",!1).option("--since <duration>","With --follow, emit buffered records newer than this first, e.g. '30s', '5m', '1h'",Kb("--since")).action((x,A)=>Sx(A,Vl(Ke(x),{follow:x.follow,durationMs:x.duration,filter:x.filter,replay:x.replay,sinceMs:x.since},e=>om(e,x.json)).then(()=>{process.exitCode=0}).catch(RA)));function om(x,A){if($0.silent=!1,Jl(x)){A||$0.log(ln.default.dim("--- live ---"));return}if(A){$0.log(JSON.stringify(x));return}let e=x;$0.log(`${ln.default.dim(e.source)} ${e.text}`)}ze(Ve,"at","Run one AT command").argument("<cmd>",'AT command, e.g. "at+rm2mstate"').action((x,A,e)=>Sx(e,Ol(Ke(A),x).then(r=>pr(r,A.json)).catch(RA)));ze(Ve,"state","Print the last rm2m state").action((x,A)=>Sx(A,Gl(Ke(x)).then(e=>pr(e,x.json)).catch(RA)));ze(Ve,"flash","Upload an AMX (defaults to dist/dlo/main.amx)").option("-f, --file <path>","AMX file to upload, relative to the project root").action((x,A)=>Sx(A,Ul(Ke(x),x.file).then(e=>pr(e,x.json)).catch(RA)));ze(Ve,"sync","Pull the device data into the mirror").action((x,A)=>Sx(A,Hl(Ke(x)).then(e=>pr(e,x.json)).catch(RA)));function xc(x){hA.parse(x)}0&&(module.exports={deviceExitCode,program});
2787
2800
  /*! Bundled license information:
2788
2801
 
2789
2802
  @microtronics/device-master/dist/cjs/index.cjs: