@microtronics/studio-cli 1.2.0-alpha.5 → 1.2.0-alpha.8
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/README.md +8 -2
- package/dist/main.js +53 -53
- package/dist/studio-cli.d.ts +98 -6
- package/out/api.js +56 -56
- package/out/studio-cli.d.ts +98 -6
- package/package.json +3 -1
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var rf=Object.create;var rn=Object.defineProperty;var tf=Object.getOwnPropertyDescriptor;var nf=Object.getOwnPropertyNames;var sf=Object.getPrototypeOf,af=Object.prototype.hasOwnProperty;var Ja=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),of=(x,A)=>{for(var e in A)rn(x,e,{get:A[e],enumerable:!0})},Ka=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of nf(A))!af.call(x,t)&&t!==e&&rn(x,t,{get:()=>A[t],enumerable:!(r=tf(A,t))||r.enumerable});return x};var G0=(x,A,e)=>(e=x!=null?rf(sf(x)):{},Ka(A||!x||!x.__esModule?rn(e,"default",{value:x,enumerable:!0}):e,x)),Ff=x=>Ka(rn({},"__esModule",{value:!0}),x);var Jo=Ja((Kb,Ho)=>{"use strict";var pE=Object.create,ht=Object.defineProperty,bE=Object.getOwnPropertyDescriptor,Lo=Object.getOwnPropertyNames,mE=Object.getPrototypeOf,jE=Object.prototype.hasOwnProperty,hE=(x,A,e)=>A in x?ht(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,Ro=(x,A)=>function(){return A||(0,x[Lo(x)[0]])((A={exports:{}}).exports,A),A.exports},gE=(x,A)=>{for(var e in A)ht(x,e,{get:A[e],enumerable:!0})},Oo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Lo(A))!jE.call(x,t)&&t!==e&&ht(x,t,{get:()=>A[t],enumerable:!(r=bE(A,t))||r.enumerable});return x},Go=(x,A,e)=>(e=x!=null?pE(mE(x)):{},Oo(A||!x||!x.__esModule?ht(e,"default",{value:x,enumerable:!0}):e,x)),yE=x=>Oo(ht({},"__esModule",{value:!0}),x),bx=(x,A,e)=>hE(x,typeof A!="symbol"?A+"":A,e),kE=Ro({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",j=(i,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",h,S;if(E){var P=require("fs");w=__dirname+"/",S=i=>{i=y(i)?new URL(i):i;var l=P.readFileSync(i);return l},h=async(i,l=!0)=>{i=y(i)?new URL(i):i;var B=P.readFileSync(i,l?void 0:"utf8");return B},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),j=(i,l)=>{throw process.exitCode=i,l}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=i=>{var l=new XMLHttpRequest;return l.open("GET",i,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),h=async i=>{if(y(i))return new Promise((B,p)=>{var m=new XMLHttpRequest;m.open("GET",i,!0),m.responseType="arraybuffer",m.onload=()=>{if(m.status==200||m.status==0&&m.response){B(m.response);return}p(m.status)},m.onerror=p,m.send(null)});var l=await fetch(i,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var q=console.log.bind(console),L=console.error.bind(console),O,s0=!1,M,y=i=>i.startsWith("file://");class R{}class Y extends R{}function W(i){for(var l=0,B=i.length,p=new Uint8Array(B),m;l<B;++l)m=i.charCodeAt(l),p[l]=~m>>8&m;return p}var H,J,a0=!1,t0=!1;function Z(){var i=I0.buffer;cx=new Int8Array(i),V0=new Int16Array(i),tA=new Uint8Array(i),tt=new Uint16Array(i),O0=new Int32Array(i),c0=new Uint32Array(i),et=new Float32Array(i),rt=new Float64Array(i),W0=new BigInt64Array(i),nt=new BigUint64Array(i)}function i0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)ur(n.preRun.shift());qA(Yx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),Qe.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){k(),o.quit(),nx.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)dr(n.postRun.shift());qA(NA)}function d0(i){n.onAbort?.(i),i=`Aborted(${i})`,L(i),s0=!0,i+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(i);throw J?.(l),l}var P0;function L0(){return W(`\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 Ex(
|
|
1162
|
-
`));if(!s)return null;Hx=Ae(s,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(s,f){nx.ttys[s]={input:[],output:[],ops:f},o.registerDevice(s,nx.stream_ops)},stream_ops:{open(s){var f=nx.ttys[s.node.rdev];if(!f)throw new o.ErrnoError(43);s.tty=f,s.seekable=!1},close(s){s.tty.ops.fsync(s.tty)},fsync(s){s.tty.ops.fsync(s.tty)},read(s,f,B,D,m){if(!s.tty||!s.tty.ops.get_char)throw new o.ErrnoError(60);for(var _=0,I=0;I<D;I++){var z;try{z=s.tty.ops.get_char(s.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&_===0)throw new o.ErrnoError(6);if(z==null)break;_++,f[B+I]=z}return _&&(s.node.atime=Date.now()),_},write(s,f,B,D,m){if(!s.tty||!s.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var _=0;_<D;_++)s.tty.ops.put_char(s.tty,f[B+_])}catch{throw new o.ErrnoError(29)}return D&&(s.node.mtime=s.node.ctime=Date.now()),_}},default_tty_ops:{get_char(s){return rt()},put_char(s,f){f===null||f===10?(q(uA(s.output)),s.output=[]):f!=0&&s.output.push(f)},fsync(s){s.output?.length>0&&(q(uA(s.output)),s.output=[])},ioctl_tcgets(s){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(s,f,B){return 0},ioctl_tiocgwinsz(s){return[24,80]}},default_tty1_ops:{put_char(s,f){f===null||f===10?(L(uA(s.output)),s.output=[]):f!=0&&s.output.push(f)},fsync(s){s.output?.length>0&&(L(uA(s.output)),s.output=[])}}},IA=s=>{d0()},n0={ops_table:null,mount(s){return n0.createNode(null,"/",16895,0)},createNode(s,f,B,D){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var m=o.createNode(s,f,B,D);return o.isDir(m.mode)?(m.node_ops=n0.ops_table.dir.node,m.stream_ops=n0.ops_table.dir.stream,m.contents={}):o.isFile(m.mode)?(m.node_ops=n0.ops_table.file.node,m.stream_ops=n0.ops_table.file.stream,m.usedBytes=0,m.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(m.mode)?(m.node_ops=n0.ops_table.link.node,m.stream_ops=n0.ops_table.link.stream):o.isChrdev(m.mode)&&(m.node_ops=n0.ops_table.chrdev.node,m.stream_ops=n0.ops_table.chrdev.stream),m.atime=m.mtime=m.ctime=Date.now(),s&&(s.contents[f]=m,s.atime=s.mtime=s.ctime=m.atime),m},getFileDataAsTypedArray(s){return s.contents.subarray(0,s.usedBytes)},expandFileStorage(s,f){var B=s.contents.length;if(!(B>=f)){var D=1024*1024;f=Math.max(f,B*(B<D?2:1.125)>>>0),B&&(f=Math.max(f,256));var m=n0.getFileDataAsTypedArray(s);s.contents=new Uint8Array(f),s.contents.set(m)}},resizeFileStorage(s,f){if(s.usedBytes!=f){var B=s.contents;s.contents=new Uint8Array(f),s.contents.set(B.subarray(0,Math.min(f,s.usedBytes))),s.usedBytes=f}},node_ops:{getattr(s){var f={};return f.dev=o.isChrdev(s.mode)?s.id:1,f.ino=s.id,f.mode=s.mode,f.nlink=1,f.uid=0,f.gid=0,f.rdev=s.rdev,o.isDir(s.mode)?f.size=4096:o.isFile(s.mode)?f.size=s.usedBytes:o.isLink(s.mode)?f.size=s.link.length:f.size=0,f.atime=new Date(s.atime),f.mtime=new Date(s.mtime),f.ctime=new Date(s.ctime),f.blksize=4096,f.blocks=Math.ceil(f.size/f.blksize),f},setattr(s,f){for(let B of["mode","atime","mtime","ctime"])f[B]!=null&&(s[B]=f[B]);f.size!==void 0&&n0.resizeFileStorage(s,f.size)},lookup(s,f){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(s,f,B,D){return n0.createNode(s,f,B,D)},rename(s,f,B){var D;try{D=o.lookupNode(f,B)}catch{}if(D){if(o.isDir(s.mode))for(var m in D.contents)throw new o.ErrnoError(55);o.hashRemoveNode(D)}delete s.parent.contents[s.name],f.contents[B]=s,s.name=B,f.ctime=f.mtime=s.parent.ctime=s.parent.mtime=Date.now()},unlink(s,f){delete s.contents[f],s.ctime=s.mtime=Date.now()},rmdir(s,f){var B=o.lookupNode(s,f);for(var D in B.contents)throw new o.ErrnoError(55);delete s.contents[f],s.ctime=s.mtime=Date.now()},readdir(s){return[".","..",...Object.keys(s.contents)]},symlink(s,f,B){var D=n0.createNode(s,f,41471,0);return D.link=B,D},readlink(s){if(!o.isLink(s.mode))throw new o.ErrnoError(28);return s.link}},stream_ops:{read(s,f,B,D,m){var _=s.node.contents;if(m>=s.node.usedBytes)return 0;var I=Math.min(s.node.usedBytes-m,D);return f.set(_.subarray(m,m+I),B),I},write(s,f,B,D,m,_){if(f.buffer===lx.buffer&&(_=!1),!D)return 0;var I=s.node;return I.mtime=I.ctime=Date.now(),_?(I.contents=f.subarray(B,B+D),I.usedBytes=D):I.usedBytes===0&&m===0?(I.contents=f.slice(B,B+D),I.usedBytes=D):(n0.expandFileStorage(I,m+D),I.contents.set(f.subarray(B,B+D),m),I.usedBytes=Math.max(I.usedBytes,m+D)),D},llseek(s,f,B){var D=f;if(B===1?D+=s.position:B===2&&o.isFile(s.node.mode)&&(D+=s.node.usedBytes),D<0)throw new o.ErrnoError(28);return D},mmap(s,f,B,D,m){if(!o.isFile(s.node.mode))throw new o.ErrnoError(43);var _,I,z=s.node.contents;if(!(m&2)&&z.buffer===lx.buffer)I=!1,_=z.byteOffset;else{if(I=!0,_=IA(f),!_)throw new o.ErrnoError(48);z&&((B>0||B+f<z.length)&&(z.subarray?z=z.subarray(B,B+f):z=Array.prototype.slice.call(z,B,B+f)),lx.set(z,_))}return{ptr:_,allocated:I}},msync(s,f,B,D,m){return n0.stream_ops.write(s,f,0,D,B,!1),0}}},MA=s=>{if(typeof s!="string")return s;var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=f[s];if(typeof B>"u")throw new Error(`Unknown file open mode: ${s}`);return B},Qx=s=>(typeof s=="string"&&(s=Ae(s,!0)),s.subarray||(s=new Uint8Array(s)),s),sA=(s,f)=>{var B=0;return s&&(B|=365),f&&(B|=146),B},q0={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},k0={mount(s){return k0.createNode(null,"/",s.opts.fs.lstat(s.opts.root).mode,0)},createNode(s,f,B,D){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var m=o.createNode(s,f,B);return m.node_ops=k0.node_ops,m.stream_ops=k0.stream_ops,m},realPath(s){for(var f=[];s.parent!==s;)f.push(s.name),s=s.parent;return f.push(s.mount.opts.root),f.reverse(),c0.join(...f)},node_ops:{getattr(s){var f=k0.realPath(s),B;try{B=s.mount.opts.fs.lstat(f)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(s,f){var B=k0.realPath(s);try{if(f.mode!==void 0&&(s.mount.opts.fs.chmod(B,f.mode),s.mode=f.mode),f.atime||f.mtime){var D=new Date(f.atime||f.mtime),m=new Date(f.mtime||f.atime);s.mount.opts.fs.utime(B,D,m)}f.size!==void 0&&s.mount.opts.fs.truncate(B,f.size)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},lookup(s,f){try{var B=c0.join2(k0.realPath(s),f),D=s.mount.opts.fs.lstat(B).mode,m=k0.createNode(s,f,D);return m}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},mknod(s,f,B,D){var m=k0.createNode(s,f,B,D),_=k0.realPath(m);try{o.isDir(m.mode)?m.mount.opts.fs.mkdir(_,m.mode):m.mount.opts.fs.writeFile(_,"",{mode:m.mode})}catch(I){throw I.code?new o.ErrnoError(q0[I.code]):I}return m},rename(s,f,B){var D=k0.realPath(s),m=c0.join2(k0.realPath(f),B);try{s.mount.opts.fs.rename(D,m),s.name=B}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},unlink(s,f){var B=c0.join2(k0.realPath(s),f);try{s.mount.opts.fs.unlink(B)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}},rmdir(s,f){var B=c0.join2(k0.realPath(s),f);try{s.mount.opts.fs.rmdir(B)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}},readdir(s){var f=k0.realPath(s);try{return s.mount.opts.fs.readdir(f)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},symlink(s,f,B){var D=c0.join2(k0.realPath(s),f);try{s.mount.opts.fs.symlink(B,D)}catch(m){throw m.code?new o.ErrnoError(q0[m.code]):m}},readlink(s){var f=k0.realPath(s);try{return s.mount.opts.fs.readlink(f)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}}},stream_ops:{open(s){var f=k0.realPath(s.node);try{s.nfd=s.node.mount.opts.fs.open(f,s.flags)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},close(s){try{s.node.mount.opts.fs.close(s.nfd)}catch(f){throw f.code?new o.ErrnoError(q0[f.code]):f}},read(s,f,B,D,m){try{return s.node.mount.opts.fs.read(s.nfd,f,B,D,m)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},write(s,f,B,D,m){try{return s.node.mount.opts.fs.write(s.nfd,f,B,D,m)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},llseek(s,f,B){var D=f;if(B===1)D+=s.position;else if(B===2&&o.isFile(s.node.mode))try{var m=s.node.node_ops.getattr(s.node);D+=m.size}catch(_){throw new o.ErrnoError(q0[_.code])}if(D<0)throw new o.ErrnoError(q0.EINVAL);return D}}},DA=async s=>{var f=await g(s);return new Uint8Array(f)},Je=(...s)=>o.createDataFile(...s),ux=s=>s,Bx=0,b0=null,Ke=s=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var f=b0;b0=null,f()}},qx=s=>{Bx++,n.monitorRunDependencies?.(Bx)},he=[],pA=async(s,f)=>{typeof Browser<"u"&&Browser.init();for(var B of he)if(B.canHandle(f))return B.handle(s,f);return s},LA=async(s,f,B,D,m,_,I,z)=>{var F0=f?dx.resolve(c0.join2(s,f)):s,_0=ux(`cp ${F0}`);qx(_0);try{var Q0=B;typeof B=="string"&&(Q0=await DA(B)),Q0=await pA(Q0,F0),z?.(),_||Je(s,f,Q0,D,m,I)}finally{Ke(_0)}},tt=(s,f,B,D,m,_,I,z,F0,_0)=>{LA(s,f,B,D,m,z,F0,_0).then(_).catch(I)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(s){bx(this,"name","ErrnoError"),this.errno=s}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(s){this.node=s}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(s){this.shared.flags=s}get position(){return this.shared.position}set position(s){this.shared.position=s}},FSNode:class{constructor(s,f,B,D){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),s||(s=this),this.parent=s,this.mount=s.mount,this.id=o.nextInode++,this.name=f,this.mode=B,this.rdev=D,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(s){s?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(s){s?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(s,f={}){if(!s)throw new o.ErrnoError(44);f.follow_mount??(f.follow_mount=!0),c0.isAbs(s)||(s=o.cwd()+"/"+s);x:for(var B=0;B<40;B++){for(var D=s.split("/").filter(_0=>!!_0),m=o.root,_="/",I=0;I<D.length;I++){var z=I===D.length-1;if(z&&f.parent)break;if(D[I]!=="."){if(D[I]===".."){if(_=c0.dirname(_),o.isRoot(m)){s=_+"/"+D.slice(I+1).join("/"),B--;continue x}else m=m.parent;continue}_=c0.join2(_,D[I]);try{m=o.lookupNode(m,D[I])}catch(_0){if(_0?.errno===44&&z&&f.noent_okay)return{path:_};throw _0}if(o.isMountpoint(m)&&(!z||f.follow_mount)&&(m=m.mounted.root),o.isLink(m.mode)&&(!z||f.follow)){if(!m.node_ops.readlink)throw new o.ErrnoError(52);var F0=m.node_ops.readlink(m);c0.isAbs(F0)||(F0=c0.dirname(_)+"/"+F0),s=F0+"/"+D.slice(I+1).join("/");continue x}}}return{path:_,node:m}}throw new o.ErrnoError(32)},getPath(s){for(var f;;){if(o.isRoot(s)){var B=s.mount.mountpoint;return f?B[B.length-1]!=="/"?`${B}/${f}`:B+f:B}f=f?`${s.name}/${f}`:s.name,s=s.parent}},hashName(s,f){for(var B=0,D=0;D<f.length;D++)B=(B<<5)-B+f.charCodeAt(D)|0;return(s+B>>>0)%o.nameTable.length},hashAddNode(s){var f=o.hashName(s.parent.id,s.name);s.name_next=o.nameTable[f],o.nameTable[f]=s},hashRemoveNode(s){var f=o.hashName(s.parent.id,s.name);if(o.nameTable[f]===s)o.nameTable[f]=s.name_next;else for(var B=o.nameTable[f];B;){if(B.name_next===s){B.name_next=s.name_next;break}B=B.name_next}},lookupNode(s,f){var B=o.mayLookup(s);if(B)throw new o.ErrnoError(B);for(var D=o.hashName(s.id,f),m=o.nameTable[D];m;m=m.name_next){var _=m.name;if(m.parent.id===s.id&&_===f)return m}return o.lookup(s,f)},createNode(s,f,B,D){var m=new o.FSNode(s,f,B,D);return o.hashAddNode(m),m},destroyNode(s){o.hashRemoveNode(s)},isRoot(s){return s===s.parent},isMountpoint(s){return!!s.mounted},isFile(s){return(s&61440)===32768},isDir(s){return(s&61440)===16384},isLink(s){return(s&61440)===40960},isChrdev(s){return(s&61440)===8192},isBlkdev(s){return(s&61440)===24576},isFIFO(s){return(s&61440)===4096},isSocket(s){return(s&49152)===49152},flagsToPermissionString(s){var f=["r","w","rw"][s&3];return s&512&&(f+="w"),f},nodePermissions(s,f){return o.ignorePermissions?0:f.includes("r")&&!(s.mode&292)||f.includes("w")&&!(s.mode&146)||f.includes("x")&&!(s.mode&73)?2:0},mayLookup(s){if(!o.isDir(s.mode))return 54;var f=o.nodePermissions(s,"x");return f||(s.node_ops.lookup?0:2)},mayCreate(s,f){if(!o.isDir(s.mode))return 54;try{var B=o.lookupNode(s,f);return 20}catch{}return o.nodePermissions(s,"wx")},mayDelete(s,f,B){var D;try{D=o.lookupNode(s,f)}catch(_){return _.errno}var m=o.nodePermissions(s,"wx");if(m)return m;if(B){if(!o.isDir(D.mode))return 54;if(o.isRoot(D)||o.getPath(D)===o.cwd())return 10}else if(o.isDir(D.mode))return 31;return 0},mayOpen(s,f){if(!s)return 44;if(o.isLink(s.mode))return 32;var B=o.flagsToPermissionString(f);return o.isDir(s.mode)&&(B!=="r"||f&576)?31:o.nodePermissions(s,B)},checkOpExists(s,f){if(!s)throw new o.ErrnoError(f);return s},MAX_OPEN_FDS:4096,nextfd(){for(var s=0;s<=o.MAX_OPEN_FDS;s++)if(!o.streams[s])return s;throw new o.ErrnoError(33)},getStreamChecked(s){var f=o.getStream(s);if(!f)throw new o.ErrnoError(8);return f},getStream:s=>o.streams[s],createStream(s,f=-1){return s=Object.assign(new o.FSStream,s),f==-1&&(f=o.nextfd()),s.fd=f,o.streams[f]=s,s},closeStream(s){o.streams[s]=null},dupStream(s,f=-1){var B=o.createStream(s,f);return B.stream_ops?.dup?.(B),B},doSetAttr(s,f,B){var D=s?.stream_ops.setattr,m=D?s:f;D??(D=f.node_ops.setattr),o.checkOpExists(D,63);try{D(m,B)}catch(_){throw _ instanceof RangeError?new o.ErrnoError(22):_}},chrdev_stream_ops:{open(s){var f=o.getDevice(s.node.rdev);s.stream_ops=f.stream_ops,s.stream_ops.open?.(s)},llseek(){throw new o.ErrnoError(70)}},major:s=>s>>8,minor:s=>s&255,makedev:(s,f)=>s<<8|f,registerDevice(s,f){o.devices[s]={stream_ops:f}},getDevice:s=>o.devices[s],getMounts(s){for(var f=[],B=[s];B.length;){var D=B.pop();f.push(D),B.push(...D.mounts)}return f},syncfs(s,f){typeof s=="function"&&(f=s,s=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),D=0;function m(z){return o.syncFSRequests--,f(z)}function _(z){if(z)return _.errored?void 0:(_.errored=!0,m(z));++D>=B.length&&m(null)}for(var I of B)I.type.syncfs?I.type.syncfs(I,s,_):_(null)},mount(s,f,B){var D=B==="/",m=!B,_;if(D&&o.root)throw new o.ErrnoError(10);if(!D&&!m){var I=o.lookupPath(B,{follow_mount:!1});if(B=I.path,_=I.node,o.isMountpoint(_))throw new o.ErrnoError(10);if(!o.isDir(_.mode))throw new o.ErrnoError(54)}var z={type:s,opts:f,mountpoint:B,mounts:[]},F0=s.mount(z);return F0.mount=z,z.root=F0,D?o.root=F0:_&&(_.mounted=z,_.mount&&_.mount.mounts.push(z)),F0},unmount(s){var f=o.lookupPath(s,{follow_mount:!1});if(!o.isMountpoint(f.node))throw new o.ErrnoError(28);var B=f.node,D=B.mounted,m=o.getMounts(D);for(var[_,I]of Object.entries(o.nameTable))for(;I;){var z=I.name_next;m.includes(I.mount)&&o.destroyNode(I),I=z}B.mounted=null;var F0=B.mount.mounts.indexOf(D);B.mount.mounts.splice(F0,1)},lookup(s,f){return s.node_ops.lookup(s,f)},mknod(s,f,B){var D=o.lookupPath(s,{parent:!0}),m=D.node,_=c0.basename(s);if(!_)throw new o.ErrnoError(28);if(_==="."||_==="..")throw new o.ErrnoError(20);var I=o.mayCreate(m,_);if(I)throw new o.ErrnoError(I);if(!m.node_ops.mknod)throw new o.ErrnoError(63);return m.node_ops.mknod(m,_,f,B)},statfs(s){return o.statfsNode(o.lookupPath(s,{follow:!0}).node)},statfsStream(s){return o.statfsNode(s.node)},statfsNode(s){var f={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return s.node_ops.statfs&&Object.assign(f,s.node_ops.statfs(s.mount.opts.root)),f},create(s,f=438){return f&=4095,f|=32768,o.mknod(s,f,0)},mkdir(s,f=511){return f&=1023,f|=16384,o.mknod(s,f,0)},mkdirTree(s,f){var B=s.split("/"),D="";for(var m of B)if(m){(D||c0.isAbs(s))&&(D+="/"),D+=m;try{o.mkdir(D,f)}catch(_){if(_.errno!=20)throw _}}},mkdev(s,f,B){return typeof B>"u"&&(B=f,f=438),f|=8192,o.mknod(s,f,B)},symlink(s,f){if(!dx.resolve(s))throw new o.ErrnoError(44);var B=o.lookupPath(f,{parent:!0}),D=B.node;if(!D)throw new o.ErrnoError(44);var m=c0.basename(f),_=o.mayCreate(D,m);if(_)throw new o.ErrnoError(_);if(!D.node_ops.symlink)throw new o.ErrnoError(63);return D.node_ops.symlink(D,m,s)},rename(s,f){var B=c0.dirname(s),D=c0.dirname(f),m=c0.basename(s),_=c0.basename(f),I,z,F0;if(I=o.lookupPath(s,{parent:!0}),z=I.node,I=o.lookupPath(f,{parent:!0}),F0=I.node,!z||!F0)throw new o.ErrnoError(44);if(z.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(z,m),Q0=dx.relative(s,D);if(Q0.charAt(0)!==".")throw new o.ErrnoError(28);if(Q0=dx.relative(f,B),Q0.charAt(0)!==".")throw new o.ErrnoError(55);var O0;try{O0=o.lookupNode(F0,_)}catch{}if(_0!==O0){var N0=o.isDir(_0.mode),j0=o.mayDelete(z,m,N0);if(j0)throw new o.ErrnoError(j0);if(j0=O0?o.mayDelete(F0,_,N0):o.mayCreate(F0,_),j0)throw new o.ErrnoError(j0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||O0&&o.isMountpoint(O0))throw new o.ErrnoError(10);if(F0!==z&&(j0=o.nodePermissions(z,"w"),j0))throw new o.ErrnoError(j0);o.hashRemoveNode(_0);try{z.node_ops.rename(_0,F0,_),_0.parent=F0}catch(Cx){throw Cx}finally{o.hashAddNode(_0)}}},rmdir(s){var f=o.lookupPath(s,{parent:!0}),B=f.node,D=c0.basename(s),m=o.lookupNode(B,D),_=o.mayDelete(B,D,!0);if(_)throw new o.ErrnoError(_);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);B.node_ops.rmdir(B,D),o.destroyNode(m)},readdir(s){var f=o.lookupPath(s,{follow:!0}),B=f.node,D=o.checkOpExists(B.node_ops.readdir,54);return D(B)},unlink(s){var f=o.lookupPath(s,{parent:!0}),B=f.node;if(!B)throw new o.ErrnoError(44);var D=c0.basename(s),m=o.lookupNode(B,D),_=o.mayDelete(B,D,!1);if(_)throw new o.ErrnoError(_);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);B.node_ops.unlink(B,D),o.destroyNode(m)},readlink(s){var f=o.lookupPath(s),B=f.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(s,f){var B=o.lookupPath(s,{follow:!f}),D=B.node,m=o.checkOpExists(D.node_ops.getattr,63);return m(D)},fstat(s){var f=o.getStreamChecked(s),B=f.node,D=f.stream_ops.getattr,m=D?f:B;return D??(D=B.node_ops.getattr),o.checkOpExists(D,63),D(m)},lstat(s){return o.stat(s,!0)},doChmod(s,f,B,D){o.doSetAttr(s,f,{mode:B&4095|f.mode&-4096,ctime:Date.now(),dontFollow:D})},chmod(s,f,B){var D;if(typeof s=="string"){var m=o.lookupPath(s,{follow:!B});D=m.node}else D=s;o.doChmod(null,D,f,B)},lchmod(s,f){o.chmod(s,f,!0)},fchmod(s,f){var B=o.getStreamChecked(s);o.doChmod(B,B.node,f,!1)},doChown(s,f,B){o.doSetAttr(s,f,{timestamp:Date.now(),dontFollow:B})},chown(s,f,B,D){var m;if(typeof s=="string"){var _=o.lookupPath(s,{follow:!D});m=_.node}else m=s;o.doChown(null,m,D)},lchown(s,f,B){o.chown(s,f,B,!0)},fchown(s,f,B){var D=o.getStreamChecked(s);o.doChown(D,D.node,!1)},doTruncate(s,f,B){if(o.isDir(f.mode))throw new o.ErrnoError(31);if(!o.isFile(f.mode))throw new o.ErrnoError(28);var D=o.nodePermissions(f,"w");if(D)throw new o.ErrnoError(D);o.doSetAttr(s,f,{size:B,timestamp:Date.now()})},truncate(s,f){if(f<0)throw new o.ErrnoError(28);var B;if(typeof s=="string"){var D=o.lookupPath(s,{follow:!0});B=D.node}else B=s;o.doTruncate(null,B,f)},ftruncate(s,f){var B=o.getStreamChecked(s);if(f<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,f)},utime(s,f,B){var D=o.lookupPath(s,{follow:!0}),m=D.node,_=o.checkOpExists(m.node_ops.setattr,63);_(m,{atime:f,mtime:B})},open(s,f,B=438){if(s==="")throw new o.ErrnoError(44);f=MA(f),f&64?B=B&4095|32768:B=0;var D,m;if(typeof s=="object")D=s;else{m=s.endsWith("/");var _=o.lookupPath(s,{follow:!(f&131072),noent_okay:!0});D=_.node,s=_.path}var I=!1;if(f&64)if(D){if(f&128)throw new o.ErrnoError(20)}else{if(m)throw new o.ErrnoError(31);D=o.mknod(s,B|511,0),I=!0}if(!D)throw new o.ErrnoError(44);if(o.isChrdev(D.mode)&&(f&=-513),f&65536&&!o.isDir(D.mode))throw new o.ErrnoError(54);if(!I){var z=o.mayOpen(D,f);if(z)throw new o.ErrnoError(z)}f&512&&!I&&o.truncate(D,0),f&=-131713;var F0=o.createStream({node:D,path:o.getPath(D),flags:f,seekable:!0,position:0,stream_ops:D.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),I&&o.chmod(D,B&511),F0},close(s){if(o.isClosed(s))throw new o.ErrnoError(8);s.getdents&&(s.getdents=null);try{s.stream_ops.close&&s.stream_ops.close(s)}catch(f){throw f}finally{o.closeStream(s.fd)}s.fd=null},isClosed(s){return s.fd===null},llseek(s,f,B){if(o.isClosed(s))throw new o.ErrnoError(8);if(!s.seekable||!s.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return s.position=s.stream_ops.llseek(s,f,B),s.ungotten=[],s.position},read(s,f,B,D,m){if(D<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.read)throw new o.ErrnoError(28);var _=typeof m<"u";if(!_)m=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var I=s.stream_ops.read(s,f,B,D,m);return _||(s.position+=I),I},write(s,f,B,D,m,_){if(D<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.write)throw new o.ErrnoError(28);s.seekable&&s.flags&1024&&o.llseek(s,0,2);var I=typeof m<"u";if(!I)m=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var z=s.stream_ops.write(s,f,B,D,m,_);return I||(s.position+=z),z},mmap(s,f,B,D,m){if((D&2)!==0&&(m&2)===0&&(s.flags&2097155)!==2)throw new o.ErrnoError(2);if((s.flags&2097155)===1)throw new o.ErrnoError(2);if(!s.stream_ops.mmap)throw new o.ErrnoError(43);if(!f)throw new o.ErrnoError(28);return s.stream_ops.mmap(s,f,B,D,m)},msync(s,f,B,D,m){return s.stream_ops.msync?s.stream_ops.msync(s,f,B,D,m):0},ioctl(s,f,B){if(!s.stream_ops.ioctl)throw new o.ErrnoError(59);return s.stream_ops.ioctl(s,f,B)},readFile(s,f={}){f.flags=f.flags||0,f.encoding=f.encoding||"binary",f.encoding!=="utf8"&&f.encoding!=="binary"&&d0(`Invalid encoding type "${f.encoding}"`);var B=o.open(s,f.flags),D=o.stat(s),m=D.size,_=new Uint8Array(m);return o.read(B,_,0,m,0),f.encoding==="utf8"&&(_=uA(_)),o.close(B),_},writeFile(s,f,B={}){B.flags=B.flags||577;var D=o.open(s,B.flags,B.mode);f=Qx(f),o.write(D,f,0,f.byteLength,void 0,B.canOwn),o.close(D)},cwd:()=>o.currentPath,chdir(s){var f=o.lookupPath(s,{follow:!0});if(f.node===null)throw new o.ErrnoError(44);if(!o.isDir(f.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(f.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=f.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(D,m,_,I,z)=>I,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var s=new Uint8Array(1024),f=0,B=()=>(f===0&&(Ue(s),f=s.byteLength),s[--f]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var s=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var f=o.createNode(s,"fd",16895,73);return f.stream_ops={llseek:n0.stream_ops.llseek},f.node_ops={lookup(B,D){var m=+D,_=o.getStreamChecked(m),I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>_.path},id:m+1};return I.parent=I,I},readdir(){return Array.from(o.streams.entries()).filter(([B,D])=>D).map(([B,D])=>B.toString())}},f}},{},"/proc/self/fd")},createStandardStreams(s,f,B){s?o.createDevice("/dev","stdin",s):o.symlink("/dev/tty","/dev/stdin"),f?o.createDevice("/dev","stdout",null,f):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var D=o.open("/dev/stdin",0),m=o.open("/dev/stdout",1),_=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:k0}},init(s,f,B){o.initialized=!0,s??(s=n.stdin),f??(f=n.stdout),B??(B=n.stderr),o.createStandardStreams(s,f,B)},quit(){o.initialized=!1,b(0);for(var s of o.streams)s&&o.close(s)},findObject(s,f){var B=o.analyzePath(s,f);return B.exists?B.object:null},analyzePath(s,f){try{var B=o.lookupPath(s,{follow:!f});s=B.path}catch{}var D={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(s,{parent:!0});D.parentExists=!0,D.parentPath=B.path,D.parentObject=B.node,D.name=c0.basename(s),B=o.lookupPath(s,{follow:!f}),D.exists=!0,D.path=B.path,D.object=B.node,D.name=B.node.name,D.isRoot=B.path==="/"}catch(m){D.error=m.errno}return D},createPath(s,f,B,D){s=typeof s=="string"?s:o.getPath(s);for(var m=f.split("/").reverse();m.length;){var _=m.pop();if(_){var I=c0.join2(s,_);try{o.mkdir(I)}catch(z){if(z.errno!=20)throw z}s=I}}return I},createFile(s,f,B,D,m){var _=c0.join2(typeof s=="string"?s:o.getPath(s),f),I=sA(D,m);return o.create(_,I)},createDataFile(s,f,B,D,m,_){var I=f;s&&(s=typeof s=="string"?s:o.getPath(s),I=f?c0.join2(s,f):s);var z=sA(D,m),F0=o.create(I,z);if(B){B=Qx(B),o.chmod(F0,z|146);var _0=o.open(F0,577);o.write(_0,B,0,B.length,0,_),o.close(_0),o.chmod(F0,z)}},createDevice(s,f,B,D){var m,_=c0.join2(typeof s=="string"?s:o.getPath(s),f),I=sA(!!B,!!D);(m=o.createDevice).major??(m.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(F0){F0.seekable=!1},close(F0){D?.buffer?.length&&D(10)},read(F0,_0,Q0,O0,N0){for(var j0=0,Cx=0;Cx<O0;Cx++){var Sx;try{Sx=B()}catch{throw new o.ErrnoError(29)}if(Sx===void 0&&j0===0)throw new o.ErrnoError(6);if(Sx==null)break;j0++,_0[Q0+Cx]=Sx}return j0&&(F0.node.atime=Date.now()),j0},write(F0,_0,Q0,O0,N0){for(var j0=0;j0<O0;j0++)try{D(_0[Q0+j0])}catch{throw new o.ErrnoError(29)}return O0&&(F0.node.mtime=F0.node.ctime=Date.now()),j0}}),o.mkdev(_,I,z)},forceLoadFile(s){if(s.isDevice||s.isFolder||s.link||s.contents)return!0;if(globalThis.XMLHttpRequest)d0("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{s.contents=S(s.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(s,f,B,D,m){class _{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(N0){if(!(N0>this.length-1||N0<0)){var j0=N0%this.chunkSize,Cx=N0/this.chunkSize|0;return this.getter(Cx)[j0]}}setDataGetter(N0){this.getter=N0}cacheLength(){var N0=new XMLHttpRequest;N0.open("HEAD",B,!1),N0.send(null),N0.status>=200&&N0.status<300||N0.status===304||d0("Couldn't load "+B+". Status: "+N0.status);var j0=Number(N0.getResponseHeader("Content-length")),Cx,Sx=(Cx=N0.getResponseHeader("Accept-Ranges"))&&Cx==="bytes",Kx=(Cx=N0.getResponseHeader("Content-Encoding"))&&Cx==="gzip",Zx=1024*1024;Sx||(Zx=j0);var xA=(aA,Se)=>{aA>Se&&d0("invalid range ("+aA+", "+Se+") or no bytes requested!"),Se>j0-1&&d0("only "+j0+" bytes available! programmer error!");var yx=new XMLHttpRequest;return yx.open("GET",B,!1),j0!==Zx&&yx.setRequestHeader("Range","bytes="+aA+"-"+Se),yx.responseType="arraybuffer",yx.overrideMimeType&&yx.overrideMimeType("text/plain; charset=x-user-defined"),yx.send(null),yx.status>=200&&yx.status<300||yx.status===304||d0("Couldn't load "+B+". Status: "+yx.status),yx.response!==void 0?new Uint8Array(yx.response||[]):Ae(yx.responseText||"",!0)},Qe=this;Qe.setDataGetter(aA=>{var Se=aA*Zx,yx=(aA+1)*Zx-1;return yx=Math.min(yx,j0-1),typeof Qe.chunks[aA]>"u"&&(Qe.chunks[aA]=xA(Se,yx)),typeof Qe.chunks[aA]>"u"&&d0("doXHR failed!"),Qe.chunks[aA]}),(Kx||!j0)&&(Zx=j0=1,j0=this.getter(0).length,Zx=j0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=j0,this._chunkSize=Zx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var I=new _,z={isDevice:!1,contents:I}}else var z={isDevice:!1,url:B};var F0=o.createFile(s,f,z,D,m);z.contents?F0.contents=z.contents:z.url&&(F0.contents=null,F0.url=z.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[O0,N0]of Object.entries(F0.stream_ops))_0[O0]=(...j0)=>(o.forceLoadFile(F0),N0(...j0));function Q0(O0,N0,j0,Cx,Sx){var Kx=O0.node.contents;if(Sx>=Kx.length)return 0;var Zx=Math.min(Kx.length-Sx,Cx);if(Kx.slice)for(var xA=0;xA<Zx;xA++)N0[j0+xA]=Kx[Sx+xA];else for(var xA=0;xA<Zx;xA++)N0[j0+xA]=Kx.get(Sx+xA);return Zx}return _0.read=(O0,N0,j0,Cx,Sx)=>(o.forceLoadFile(F0),Q0(O0,N0,j0,Cx,Sx)),_0.mmap=(O0,N0,j0,Cx,Sx)=>{o.forceLoadFile(F0);var Kx=IA(N0);if(!Kx)throw new o.ErrnoError(48);return Q0(O0,lx,Kx,N0,j0),{ptr:Kx,allocated:!0}},F0.stream_ops=_0,F0}},w0={currentUmask:18,calculateAt(s,f,B){if(c0.isAbs(f))return f;var D;if(s===-100)D=o.cwd();else{var m=w0.getStreamFromFD(s);D=m.path}if(f.length==0){if(!B)throw new o.ErrnoError(44);return D}return D+"/"+f},writeStat(s,f){l0[s>>2]=f.dev,l0[s+4>>2]=f.mode,l0[s+8>>2]=f.nlink,l0[s+12>>2]=f.uid,l0[s+16>>2]=f.gid,l0[s+20>>2]=f.rdev,V0[s+24>>3]=BigInt(f.size),R0[s+32>>2]=4096,R0[s+36>>2]=f.blocks;var B=f.atime.getTime(),D=f.mtime.getTime(),m=f.ctime.getTime();return V0[s+40>>3]=BigInt(Math.floor(B/1e3)),l0[s+48>>2]=B%1e3*1e3*1e3,V0[s+56>>3]=BigInt(Math.floor(D/1e3)),l0[s+64>>2]=D%1e3*1e3*1e3,V0[s+72>>3]=BigInt(Math.floor(m/1e3)),l0[s+80>>2]=m%1e3*1e3*1e3,V0[s+88>>3]=BigInt(f.ino),0},writeStatFs(s,f){l0[s+4>>2]=f.bsize,l0[s+60>>2]=f.bsize,V0[s+8>>3]=BigInt(f.blocks),V0[s+16>>3]=BigInt(f.bfree),V0[s+24>>3]=BigInt(f.bavail),V0[s+32>>3]=BigInt(f.files),V0[s+40>>3]=BigInt(f.ffree),l0[s+48>>2]=f.fsid,l0[s+64>>2]=f.flags,l0[s+56>>2]=f.namelen},doMsync(s,f,B,D,m){if(!o.isFile(f.node.mode))throw new o.ErrnoError(43);if(D&2)return 0;var _=tA.slice(s,s+B);o.msync(f,_,m,B,D)},getStreamFromFD(s){var f=o.getStreamChecked(s);return f},varargs:void 0,getStr(s){var f=iA(s);return f}};function ze(s,f,B,D){try{if(f=w0.getStr(f),f=w0.calculateAt(s,f),B&-8)return-28;var m=o.lookupPath(f,{follow:!0}),_=m.node;if(!_)return-44;var I="";return B&4&&(I+="r"),B&2&&(I+="w"),B&1&&(I+="x"),I&&o.nodePermissions(_,I)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var OA=()=>{var s=R0[+w0.varargs>>2];return w0.varargs+=4,s},bA=OA;function nt(s,f,B){w0.varargs=B;try{var D=w0.getStreamFromFD(s);switch(f){case 0:{var m=OA();if(m<0)return-28;for(;o.streams[m];)m++;var _;return _=o.dupStream(D,m),_.fd}case 1:case 2:return 0;case 3:return D.flags;case 4:{var m=OA(),I=289792;return D.flags=D.flags&~I|m&I,0}case 12:{var m=bA(),z=0;return z0[m+z>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}var ge=(s,f,B)=>He(s,tA,f,B);function ur(s,f){try{if(f===0)return-28;var B=o.cwd(),D=xe(B)+1;return f<D?-68:(ge(B,s,f),D)}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function Dr(s,f,B){w0.varargs=B;try{var D=w0.getStreamFromFD(s);switch(f){case 21509:return D.tty?0:-59;case 21505:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tcgets){var m=D.tty.ops.ioctl_tcgets(D),_=bA();R0[_>>2]=m.c_iflag||0,R0[_+4>>2]=m.c_oflag||0,R0[_+8>>2]=m.c_cflag||0,R0[_+12>>2]=m.c_lflag||0;for(var I=0;I<32;I++)lx[_+I+17]=m.c_cc[I]||0;return 0}return 0}case 21510:case 21511:case 21512:return D.tty?0:-59;case 21506:case 21507:case 21508:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tcsets){for(var _=bA(),z=R0[_>>2],F0=R0[_+4>>2],_0=R0[_+8>>2],Q0=R0[_+12>>2],O0=[],I=0;I<32;I++)O0.push(lx[_+I+17]);return D.tty.ops.ioctl_tcsets(D.tty,f,{c_iflag:z,c_oflag:F0,c_cflag:_0,c_lflag:Q0,c_cc:O0})}return 0}case 21519:{if(!D.tty)return-59;var _=bA();return R0[_>>2]=0,0}case 21520:return D.tty?-28:-59;case 21537:case 21531:{var _=bA();return o.ioctl(D,f,_)}case 21523:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tiocgwinsz){var N0=D.tty.ops.ioctl_tiocgwinsz(D.tty),_=bA();z0[_>>1]=N0[0],z0[_+2>>1]=N0[1]}return 0}case 21524:return D.tty?0:-59;case 21515:return D.tty?0:-59;default:return-28}}catch(j0){if(typeof o>"u"||j0.name!=="ErrnoError")throw j0;return-j0.errno}}function it(s,f,B,D){w0.varargs=D;try{f=w0.getStr(f),f=w0.calculateAt(s,f);var m=D?OA():0;return B&64&&(m&=~w0.currentUmask),o.open(f,B,m).fd}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return-_.errno}}function st(s,f,B,D){try{if(f=w0.getStr(f),f=w0.calculateAt(s,f),D<=0)return-28;var m=o.readlink(f),_=Math.min(D,xe(m)),I=lx[B+_];return ge(m,B,D+1),lx[B+_]=I,_}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function at(s,f,B,D){try{return f=w0.getStr(f),D=w0.getStr(D),f=w0.calculateAt(s,f),D=w0.calculateAt(B,D),o.rename(f,D),0}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function ye(s){try{return s=w0.getStr(s),o.rmdir(s),0}catch(f){if(typeof o>"u"||f.name!=="ErrnoError")throw f;return-f.errno}}function pr(s,f,B){try{if(f=w0.getStr(f),f=w0.calculateAt(s,f),!B)o.unlink(f);else if(B===512)o.rmdir(f);else return-28;return 0}catch(D){if(typeof o>"u"||D.name!=="ErrnoError")throw D;return-D.errno}}var ee=()=>{throw new Y},ke=()=>performance.now(),ot=()=>Date.now(),br=1,Ft=s=>s>=0&&s<=3,re=9007199254740992,Ve=-9007199254740992,mr=s=>s<Ve||s>re?NaN:Number(s);function jr(s,f,B){if(f=mr(f),!Ft(s))return 28;var D;if(s===0)D=ot();else if(br)D=ke();else return 52;var m=Math.round(D*1e3*1e3);return V0[B>>3]=BigInt(m),0}var vt=()=>2147483648,hr=(s,f)=>Math.ceil(s/f)*f,ft=s=>{var f=I0.buffer.byteLength,B=(s-f+65535)/65536|0;try{return I0.grow(B),Z(),1}catch{}},lt=s=>{var f=tA.length;s>>>=0;var B=vt();if(s>B)return!1;for(var D=1;D<=4;D*=2){var m=f*(1+.2/D);m=Math.min(m,s+100663296);var _=Math.min(B,hr(Math.max(s,m),65536)),I=ft(_);if(I)return!0}return!1};function we(s){try{var f=w0.getStreamFromFD(s);return o.close(f),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var ct=(s,f,B,D)=>{for(var m=0,_=0;_<B;_++){var I=l0[f>>2],z=l0[f+4>>2];f+=8;var F0=o.read(s,lx,I,z,D);if(F0<0)return-1;if(m+=F0,F0<z)break;typeof D<"u"&&(D+=F0)}return m};function Et(s,f,B,D){try{var m=w0.getStreamFromFD(s),_=ct(m,f,B);return l0[D>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}function gr(s,f,B,D){f=mr(f);try{if(isNaN(f))return 22;var m=w0.getStreamFromFD(s);return o.llseek(m,f,B),V0[D>>3]=BigInt(m.position),m.getdents&&f===0&&B===0&&(m.getdents=null),0}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return _.errno}}var yr=(s,f,B,D)=>{for(var m=0,_=0;_<B;_++){var I=l0[f>>2],z=l0[f+4>>2];f+=8;var F0=o.write(s,lx,I,z,D);if(F0<0)return-1;if(m+=F0,F0<z)break;typeof D<"u"&&(D+=F0)}return m};function te(s,f,B,D){try{var m=w0.getStreamFromFD(s),_=yr(m,f,B);return l0[D>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}var kr=0,ne=()=>je||kr>0,We=s=>{M=s,ne()||(n.onExit?.(s),i0=!0),j(s,new rA(s))},Nx=(s,f)=>{M=s,ne()||f0(),We(s)},Bt=s=>{if(s instanceof rA||s=="unwind")return M;j(1,s)},RA=s=>V(s),ie=s=>{var f=xe(s)+1,B=RA(f);return ge(s,B,f),B},Xe=[],Dx=s=>{var f=Xe[s];return f||(Xe[s]=f=$0.get(s)),f},_e=(...s)=>o.createPath(...s),se=(...s)=>o.unlink(...s),a=(...s)=>o.createLazyFile(...s),l=(...s)=>o.createDevice(...s);if(o.createPreloadedFile=tt,o.preloadFile=LA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(he=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(R=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Xt,n.addRunDependency=qx,n.removeRunDependency=Ke,n.FS_preloadFile=LA,n.FS_unlink=se,n.FS_createPath=_e,n.FS_createDevice=l,n.FS=o,n.FS_createDataFile=Je,n.FS_createLazyFile=a,n.PROXYFS=k0;var d,b,k,$,G,V,o0,D0,W0,I0,$0;function m0(s){d=n._main=s.__main_argc_argv,b=s.fflush,k=s.__funcs_on_exit,$=s.setThrew,G=s._emscripten_stack_restore,V=s._emscripten_stack_alloc,o0=s.emscripten_stack_get_current,D0=I0=s.memory,W0=$0=s.__indirect_function_table}var ix={__assert_fail:NA,__syscall_faccessat:ze,__syscall_fcntl64:nt,__syscall_getcwd:ur,__syscall_ioctl:Dr,__syscall_openat:it,__syscall_readlinkat:st,__syscall_renameat:at,__syscall_rmdir:ye,__syscall_unlinkat:pr,_emscripten_throw_longjmp:ee,clock_time_get:jr,emscripten_resize_heap:lt,fd_close:we,fd_read:Et,fd_seek:gr,fd_write:te,invoke_i:ae,invoke_ii:Rx,invoke_iii:Gx,invoke_iiid:Fi,invoke_iiii:Jx,invoke_iiiii:cx,invoke_iiiiii:vi,invoke_iijii:ai,invoke_v:gx,invoke_vi:oi,invoke_vii:Ix,invoke_viii:Wt,invoke_viiii:mA,invoke_viiiii:Vt};function gx(s){var f=g0();try{Dx(s)()}catch(B){if(ox(f),!(B instanceof O))throw B;$(1,0)}}function Ix(s,f,B){var D=g0();try{Dx(s)(f,B)}catch(m){if(ox(D),!(m instanceof O))throw m;$(1,0)}}function Rx(s,f){var B=g0();try{return Dx(s)(f)}catch(D){if(ox(B),!(D instanceof O))throw D;$(1,0)}}function Gx(s,f,B){var D=g0();try{return Dx(s)(f,B)}catch(m){if(ox(D),!(m instanceof O))throw m;$(1,0)}}function ae(s){var f=g0();try{return Dx(s)()}catch(B){if(ox(f),!(B instanceof O))throw B;$(1,0)}}function Jx(s,f,B,D){var m=g0();try{return Dx(s)(f,B,D)}catch(_){if(ox(m),!(_ instanceof O))throw _;$(1,0)}}function mA(s,f,B,D,m){var _=g0();try{Dx(s)(f,B,D,m)}catch(I){if(ox(_),!(I instanceof O))throw I;$(1,0)}}function cx(s,f,B,D,m){var _=g0();try{return Dx(s)(f,B,D,m)}catch(I){if(ox(_),!(I instanceof O))throw I;$(1,0)}}function Vt(s,f,B,D,m,_){var I=g0();try{Dx(s)(f,B,D,m,_)}catch(z){if(ox(I),!(z instanceof O))throw z;$(1,0)}}function ai(s,f,B,D,m){var _=g0();try{return Dx(s)(f,B,D,m)}catch(I){if(ox(_),!(I instanceof O))throw I;$(1,0)}}function oi(s,f){var B=g0();try{Dx(s)(f)}catch(D){if(ox(B),!(D instanceof O))throw D;$(1,0)}}function Wt(s,f,B,D){var m=g0();try{Dx(s)(f,B,D)}catch(_){if(ox(m),!(_ instanceof O))throw _;$(1,0)}}function Fi(s,f,B,D){var m=g0();try{return Dx(s)(f,B,D)}catch(_){if(ox(m),!(_ instanceof O))throw _;$(1,0)}}function vi(s,f,B,D,m,_){var I=g0();try{return Dx(s)(f,B,D,m,_)}catch(z){if(ox(I),!(z instanceof O))throw z;$(1,0)}}function Xt(s=[]){var f=d;s.unshift(p);var B=s.length,D=RA((B+1)*4),m=D;for(var _ of s)l0[m>>2]=ie(_),m+=4;l0[m>>2]=0;try{var I=f(B,D);return Nx(I,!0),I}catch(z){return Bt(z)}}function Ct(s=u){if(Bx>0){b0=Ct;return}if(s0(),Bx>0){b0=Ct;return}function f(){if(n.calledRun=!0,!i0){U(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||Xt(s),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f()}var Ye;return Ye=await tx(),Ct(),a0?i=n:i=new Promise((s,f)=>{H=s,J=f}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),rE=go({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],p="./this.program",j=(a,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",g,S;if(E){var T=require("fs");w=__dirname+"/",S=a=>{a=y(a)?new URL(a):a;var l=T.readFileSync(a);return l},g=async(a,l=!0)=>{a=y(a)?new URL(a):a;var d=T.readFileSync(a,l?void 0:"utf8");return d},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),j=(a,l)=>{throw process.exitCode=a,l}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=a=>{var l=new XMLHttpRequest;return l.open("GET",a,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),g=async a=>{if(y(a))return new Promise((d,b)=>{var k=new XMLHttpRequest;k.open("GET",a,!0),k.responseType="arraybuffer",k.onload=()=>{if(k.status==200||k.status==0&&k.response){d(k.response);return}b(k.status)},k.onerror=b,k.send(null)});var l=await fetch(a,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var q=console.log.bind(console),L=console.error.bind(console),R,i0=!1,M,y=a=>a.startsWith("file://");class O{}class Y extends O{}function W(a){for(var l=0,d=a.length,b=new Uint8Array(d),k;l<d;++l)k=a.charCodeAt(l),b[l]=~k>>8&k;return b}var H,J,a0=!1,t0=!1;function Z(){var a=RA.buffer;lx=new Int8Array(a),z0=new Int16Array(a),tA=new Uint8Array(a),xt=new Uint16Array(a),R0=new Int32Array(a),l0=new Uint32Array(a),Qr=new Float32Array(a),Zr=new Float64Array(a),V0=new BigInt64Array(a),At=new BigUint64Array(a)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)dr(n.preRun.shift());TA(Yx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),se.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function f0(){yr(),o.quit(),nx.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)Cr(n.postRun.shift());TA(qA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,L(a),i0=!0,a+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(a);throw J?.(l),l}var T0;function L0(){return W(`\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 Ex(i){return i}async function Xx(i){return i}async function TA(i,l){try{var B=await Xx(i),p=await WebAssembly.instantiate(B,l);return p}catch(m){L(`failed to asynchronously prepare wasm: ${m}`),d0(m)}}async function PA(i,l,B){return TA(l,B)}function lx(){var i={env:sx,wasi_snapshot_preview1:sx};return i}async function tx(){function i(_,I){return Qe=_.exports,m0(Qe),Z(),Qe}function l(_){return i(_.instance)}var B=lx();if(n.instantiateWasm)return new Promise((_,I)=>{n.instantiateWasm(B,(z,F0)=>{_(i(z,F0))})});P0??(P0=L0());var p=await PA(O,P0,B),m=l(p);return m}class rA{constructor(l){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var V0,O0,W0,cx,et,rt,tt,c0,nt,tA,qA=i=>{for(;i.length>0;)i.shift()(n)},NA=[],dr=i=>NA.push(i),Yx=[],ur=i=>Yx.push(i),je=!1,ox=i=>G(i),g0=()=>o0(),nA=globalThis.TextDecoder&&new TextDecoder,gx=(i,l,B,p)=>{var m=l+B;if(p)return m;for(;i[l]&&!(l>=m);)++l;return l},DA=(i,l=0,B,p)=>{var m=gx(i,l,B,p);if(m-l>16&&i.buffer&&nA)return nA.decode(i.subarray(l,m));for(var _="";l<m;){var I=i[l++];if(!(I&128)){_+=String.fromCharCode(I);continue}var z=i[l++]&63;if((I&224)==192){_+=String.fromCharCode((I&31)<<6|z);continue}var F0=i[l++]&63;if((I&240)==224?I=(I&15)<<12|z<<6|F0:I=(I&7)<<18|z<<12|F0<<6|i[l++]&63,I<65536)_+=String.fromCharCode(I);else{var _0=I-65536;_+=String.fromCharCode(55296|_0>>10,56320|_0&1023)}}return _},sA=(i,l,B)=>i?DA(tA,i,l,B):"",IA=(i,l,B,p)=>d0(`Assertion failed: ${sA(i)}, at: `+[l?sA(l):"unknown filename",B,p?sA(p):"unknown function"]),f0={isAbs:i=>i.charAt(0)==="/",splitPath:i=>{var l=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return l.exec(i).slice(1)},normalizeArray:(i,l)=>{for(var B=0,p=i.length-1;p>=0;p--){var m=i[p];m==="."?i.splice(p,1):m===".."?(i.splice(p,1),B++):B&&(i.splice(p,1),B--)}if(l)for(;B;B--)i.unshift("..");return i},normalize:i=>{var l=f0.isAbs(i),B=i.slice(-1)==="/";return i=f0.normalizeArray(i.split("/").filter(p=>!!p),!l).join("/"),!i&&!l&&(i="."),i&&B&&(i+="/"),(l?"/":"")+i},dirname:i=>{var l=f0.splitPath(i),B=l[0],p=l[1];return!B&&!p?".":(p&&(p=p.slice(0,-1)),B+p)},basename:i=>i&&i.match(/([^\/]+|\/)\/*$/)[1],join:(...i)=>f0.normalize(i.join("/")),join2:(i,l)=>f0.normalize(i+"/"+l)},st=()=>{if(E){var i=require("crypto");return l=>i.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},He=i=>(He=st())(i),dx={resolve:(...i)=>{for(var l="",B=!1,p=i.length-1;p>=-1&&!B;p--){var m=p>=0?i[p]:o.cwd();if(typeof m!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!m)return"";l=m+"/"+l,B=f0.isAbs(m)}return l=f0.normalizeArray(l.split("/").filter(_=>!!_),!B).join("/"),(B?"/":"")+l||"."},relative:(i,l)=>{i=dx.resolve(i).slice(1),l=dx.resolve(l).slice(1);function B(_0){for(var xx=0;xx<_0.length&&_0[xx]==="";xx++);for(var R0=_0.length-1;R0>=0&&_0[R0]==="";R0--);return xx>R0?[]:_0.slice(xx,R0-xx+1)}for(var p=B(i.split("/")),m=B(l.split("/")),_=Math.min(p.length,m.length),I=_,z=0;z<_;z++)if(p[z]!==m[z]){I=z;break}for(var F0=[],z=I;z<p.length;z++)F0.push("..");return F0=F0.concat(m.slice(I)),F0.join("/")}},Hx=[],Ae=i=>{for(var l=0,B=0;B<i.length;++B){var p=i.charCodeAt(B);p<=127?l++:p<=2047?l+=2:p>=55296&&p<=57343?(l+=4,++B):l+=3}return l},Je=(i,l,B,p)=>{if(!(p>0))return 0;for(var m=B,_=B+p-1,I=0;I<i.length;++I){var z=i.codePointAt(I);if(z<=127){if(B>=_)break;l[B++]=z}else if(z<=2047){if(B+1>=_)break;l[B++]=192|z>>6,l[B++]=128|z&63}else if(z<=65535){if(B+2>=_)break;l[B++]=224|z>>12,l[B++]=128|z>>6&63,l[B++]=128|z&63}else{if(B+3>=_)break;l[B++]=240|z>>18,l[B++]=128|z>>12&63,l[B++]=128|z>>6&63,l[B++]=128|z&63,I++}}return l[B]=0,B-m},ee=(i,l,B)=>{var p=B>0?B:Ae(i)+1,m=new Array(p),_=Je(i,m,0,m.length);return l&&(m.length=_),m},it=()=>{if(!Hx.length){var i=null;if(E){var l=256,B=Buffer.alloc(l),p=0,m=process.stdin.fd;try{p=P.readSync(m,B,0,l)}catch(_){if(_.toString().includes("EOF"))p=0;else throw _}p>0&&(i=B.slice(0,p).toString("utf-8"))}else globalThis.window?.prompt&&(i=window.prompt("Input: "),i!==null&&(i+=`
|
|
1162
|
+
`));if(!i)return null;Hx=ee(i,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(i,l){nx.ttys[i]={input:[],output:[],ops:l},o.registerDevice(i,nx.stream_ops)},stream_ops:{open(i){var l=nx.ttys[i.node.rdev];if(!l)throw new o.ErrnoError(43);i.tty=l,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,l,B,p,m){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var _=0,I=0;I<p;I++){var z;try{z=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&_===0)throw new o.ErrnoError(6);if(z==null)break;_++,l[B+I]=z}return _&&(i.node.atime=Date.now()),_},write(i,l,B,p,m){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var _=0;_<p;_++)i.tty.ops.put_char(i.tty,l[B+_])}catch{throw new o.ErrnoError(29)}return p&&(i.node.mtime=i.node.ctime=Date.now()),_}},default_tty_ops:{get_char(i){return it()},put_char(i,l){l===null||l===10?(q(DA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(q(DA(i.output)),i.output=[])},ioctl_tcgets(i){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(i,l,B){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,l){l===null||l===10?(L(DA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(L(DA(i.output)),i.output=[])}}},MA=i=>{d0()},n0={ops_table:null,mount(i){return n0.createNode(null,"/",16895,0)},createNode(i,l,B,p){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var m=o.createNode(i,l,B,p);return o.isDir(m.mode)?(m.node_ops=n0.ops_table.dir.node,m.stream_ops=n0.ops_table.dir.stream,m.contents={}):o.isFile(m.mode)?(m.node_ops=n0.ops_table.file.node,m.stream_ops=n0.ops_table.file.stream,m.usedBytes=0,m.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(m.mode)?(m.node_ops=n0.ops_table.link.node,m.stream_ops=n0.ops_table.link.stream):o.isChrdev(m.mode)&&(m.node_ops=n0.ops_table.chrdev.node,m.stream_ops=n0.ops_table.chrdev.stream),m.atime=m.mtime=m.ctime=Date.now(),i&&(i.contents[l]=m,i.atime=i.mtime=i.ctime=m.atime),m},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,l){var B=i.contents.length;if(!(B>=l)){var p=1024*1024;l=Math.max(l,B*(B<p?2:1.125)>>>0),B&&(l=Math.max(l,256));var m=n0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(l),i.contents.set(m)}},resizeFileStorage(i,l){if(i.usedBytes!=l){var B=i.contents;i.contents=new Uint8Array(l),i.contents.set(B.subarray(0,Math.min(l,i.usedBytes))),i.usedBytes=l}},node_ops:{getattr(i){var l={};return l.dev=o.isChrdev(i.mode)?i.id:1,l.ino=i.id,l.mode=i.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=i.rdev,o.isDir(i.mode)?l.size=4096:o.isFile(i.mode)?l.size=i.usedBytes:o.isLink(i.mode)?l.size=i.link.length:l.size=0,l.atime=new Date(i.atime),l.mtime=new Date(i.mtime),l.ctime=new Date(i.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(i,l){for(let B of["mode","atime","mtime","ctime"])l[B]!=null&&(i[B]=l[B]);l.size!==void 0&&n0.resizeFileStorage(i,l.size)},lookup(i,l){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(i,l,B,p){return n0.createNode(i,l,B,p)},rename(i,l,B){var p;try{p=o.lookupNode(l,B)}catch{}if(p){if(o.isDir(i.mode))for(var m in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}delete i.parent.contents[i.name],l.contents[B]=i,i.name=B,l.ctime=l.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,l){delete i.contents[l],i.ctime=i.mtime=Date.now()},rmdir(i,l){var B=o.lookupNode(i,l);for(var p in B.contents)throw new o.ErrnoError(55);delete i.contents[l],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,l,B){var p=n0.createNode(i,l,41471,0);return p.link=B,p},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,l,B,p,m){var _=i.node.contents;if(m>=i.node.usedBytes)return 0;var I=Math.min(i.node.usedBytes-m,p);return l.set(_.subarray(m,m+I),B),I},write(i,l,B,p,m,_){if(l.buffer===cx.buffer&&(_=!1),!p)return 0;var I=i.node;return I.mtime=I.ctime=Date.now(),_?(I.contents=l.subarray(B,B+p),I.usedBytes=p):I.usedBytes===0&&m===0?(I.contents=l.slice(B,B+p),I.usedBytes=p):(n0.expandFileStorage(I,m+p),I.contents.set(l.subarray(B,B+p),m),I.usedBytes=Math.max(I.usedBytes,m+p)),p},llseek(i,l,B){var p=l;if(B===1?p+=i.position:B===2&&o.isFile(i.node.mode)&&(p+=i.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(i,l,B,p,m){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var _,I,z=i.node.contents;if(!(m&2)&&z.buffer===cx.buffer)I=!1,_=z.byteOffset;else{if(I=!0,_=MA(l),!_)throw new o.ErrnoError(48);z&&((B>0||B+l<z.length)&&(z.subarray?z=z.subarray(B,B+l):z=Array.prototype.slice.call(z,B,B+l)),cx.set(z,_))}return{ptr:_,allocated:I}},msync(i,l,B,p,m){return n0.stream_ops.write(i,l,0,p,B,!1),0}}},LA=i=>{if(typeof i!="string")return i;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=l[i];if(typeof B>"u")throw new Error(`Unknown file open mode: ${i}`);return B},Qx=i=>(typeof i=="string"&&(i=ee(i,!0)),i.subarray||(i=new Uint8Array(i)),i),iA=(i,l)=>{var B=0;return i&&(B|=365),l&&(B|=146),B},q0={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},k0={mount(i){return k0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,l,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var m=o.createNode(i,l,B);return m.node_ops=k0.node_ops,m.stream_ops=k0.stream_ops,m},realPath(i){for(var l=[];i.parent!==i;)l.push(i.name),i=i.parent;return l.push(i.mount.opts.root),l.reverse(),f0.join(...l)},node_ops:{getattr(i){var l=k0.realPath(i),B;try{B=i.mount.opts.fs.lstat(l)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(i,l){var B=k0.realPath(i);try{if(l.mode!==void 0&&(i.mount.opts.fs.chmod(B,l.mode),i.mode=l.mode),l.atime||l.mtime){var p=new Date(l.atime||l.mtime),m=new Date(l.mtime||l.atime);i.mount.opts.fs.utime(B,p,m)}l.size!==void 0&&i.mount.opts.fs.truncate(B,l.size)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},lookup(i,l){try{var B=f0.join2(k0.realPath(i),l),p=i.mount.opts.fs.lstat(B).mode,m=k0.createNode(i,l,p);return m}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},mknod(i,l,B,p){var m=k0.createNode(i,l,B,p),_=k0.realPath(m);try{o.isDir(m.mode)?m.mount.opts.fs.mkdir(_,m.mode):m.mount.opts.fs.writeFile(_,"",{mode:m.mode})}catch(I){throw I.code?new o.ErrnoError(q0[I.code]):I}return m},rename(i,l,B){var p=k0.realPath(i),m=f0.join2(k0.realPath(l),B);try{i.mount.opts.fs.rename(p,m),i.name=B}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},unlink(i,l){var B=f0.join2(k0.realPath(i),l);try{i.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},rmdir(i,l){var B=f0.join2(k0.realPath(i),l);try{i.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},readdir(i){var l=k0.realPath(i);try{return i.mount.opts.fs.readdir(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},symlink(i,l,B){var p=f0.join2(k0.realPath(i),l);try{i.mount.opts.fs.symlink(B,p)}catch(m){throw m.code?new o.ErrnoError(q0[m.code]):m}},readlink(i){var l=k0.realPath(i);try{return i.mount.opts.fs.readlink(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}}},stream_ops:{open(i){var l=k0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(l,i.flags)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},close(i){try{i.node.mount.opts.fs.close(i.nfd)}catch(l){throw l.code?new o.ErrnoError(q0[l.code]):l}},read(i,l,B,p,m){try{return i.node.mount.opts.fs.read(i.nfd,l,B,p,m)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},write(i,l,B,p,m){try{return i.node.mount.opts.fs.write(i.nfd,l,B,p,m)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},llseek(i,l,B){var p=l;if(B===1)p+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var m=i.node.node_ops.getattr(i.node);p+=m.size}catch(_){throw new o.ErrnoError(q0[_.code])}if(p<0)throw new o.ErrnoError(q0.EINVAL);return p}}},pA=async i=>{var l=await h(i);return new Uint8Array(l)},Ke=(...i)=>o.createDataFile(...i),ux=i=>i,Bx=0,b0=null,ze=i=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var l=b0;b0=null,l()}},qx=i=>{Bx++,n.monitorRunDependencies?.(Bx)},he=[],bA=async(i,l)=>{typeof Browser<"u"&&Browser.init();for(var B of he)if(B.canHandle(l))return B.handle(i,l);return i},RA=async(i,l,B,p,m,_,I,z)=>{var F0=l?dx.resolve(f0.join2(i,l)):i,_0=ux(`cp ${F0}`);qx(_0);try{var xx=B;typeof B=="string"&&(xx=await pA(B)),xx=await bA(xx,F0),z?.(),_||Ke(i,l,xx,p,m,I)}finally{ze(_0)}},at=(i,l,B,p,m,_,I,z,F0,_0)=>{RA(i,l,B,p,m,z,F0,_0).then(_).catch(I)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){bx(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(i){this.node=i}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(i){this.shared.flags=i}get position(){return this.shared.position}set position(i){this.shared.position=i}},FSNode:class{constructor(i,l,B,p){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=l,this.mode=B,this.rdev=p,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(i){i?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(i){i?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(i,l={}){if(!i)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),f0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var p=i.split("/").filter(_0=>!!_0),m=o.root,_="/",I=0;I<p.length;I++){var z=I===p.length-1;if(z&&l.parent)break;if(p[I]!=="."){if(p[I]===".."){if(_=f0.dirname(_),o.isRoot(m)){i=_+"/"+p.slice(I+1).join("/"),B--;continue x}else m=m.parent;continue}_=f0.join2(_,p[I]);try{m=o.lookupNode(m,p[I])}catch(_0){if(_0?.errno===44&&z&&l.noent_okay)return{path:_};throw _0}if(o.isMountpoint(m)&&(!z||l.follow_mount)&&(m=m.mounted.root),o.isLink(m.mode)&&(!z||l.follow)){if(!m.node_ops.readlink)throw new o.ErrnoError(52);var F0=m.node_ops.readlink(m);f0.isAbs(F0)||(F0=f0.dirname(_)+"/"+F0),i=F0+"/"+p.slice(I+1).join("/");continue x}}}return{path:_,node:m}}throw new o.ErrnoError(32)},getPath(i){for(var l;;){if(o.isRoot(i)){var B=i.mount.mountpoint;return l?B[B.length-1]!=="/"?`${B}/${l}`:B+l:B}l=l?`${i.name}/${l}`:i.name,i=i.parent}},hashName(i,l){for(var B=0,p=0;p<l.length;p++)B=(B<<5)-B+l.charCodeAt(p)|0;return(i+B>>>0)%o.nameTable.length},hashAddNode(i){var l=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[l],o.nameTable[l]=i},hashRemoveNode(i){var l=o.hashName(i.parent.id,i.name);if(o.nameTable[l]===i)o.nameTable[l]=i.name_next;else for(var B=o.nameTable[l];B;){if(B.name_next===i){B.name_next=i.name_next;break}B=B.name_next}},lookupNode(i,l){var B=o.mayLookup(i);if(B)throw new o.ErrnoError(B);for(var p=o.hashName(i.id,l),m=o.nameTable[p];m;m=m.name_next){var _=m.name;if(m.parent.id===i.id&&_===l)return m}return o.lookup(i,l)},createNode(i,l,B,p){var m=new o.FSNode(i,l,B,p);return o.hashAddNode(m),m},destroyNode(i){o.hashRemoveNode(i)},isRoot(i){return i===i.parent},isMountpoint(i){return!!i.mounted},isFile(i){return(i&61440)===32768},isDir(i){return(i&61440)===16384},isLink(i){return(i&61440)===40960},isChrdev(i){return(i&61440)===8192},isBlkdev(i){return(i&61440)===24576},isFIFO(i){return(i&61440)===4096},isSocket(i){return(i&49152)===49152},flagsToPermissionString(i){var l=["r","w","rw"][i&3];return i&512&&(l+="w"),l},nodePermissions(i,l){return o.ignorePermissions?0:l.includes("r")&&!(i.mode&292)||l.includes("w")&&!(i.mode&146)||l.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var l=o.nodePermissions(i,"x");return l||(i.node_ops.lookup?0:2)},mayCreate(i,l){if(!o.isDir(i.mode))return 54;try{var B=o.lookupNode(i,l);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,l,B){var p;try{p=o.lookupNode(i,l)}catch(_){return _.errno}var m=o.nodePermissions(i,"wx");if(m)return m;if(B){if(!o.isDir(p.mode))return 54;if(o.isRoot(p)||o.getPath(p)===o.cwd())return 10}else if(o.isDir(p.mode))return 31;return 0},mayOpen(i,l){if(!i)return 44;if(o.isLink(i.mode))return 32;var B=o.flagsToPermissionString(l);return o.isDir(i.mode)&&(B!=="r"||l&576)?31:o.nodePermissions(i,B)},checkOpExists(i,l){if(!i)throw new o.ErrnoError(l);return i},MAX_OPEN_FDS:4096,nextfd(){for(var i=0;i<=o.MAX_OPEN_FDS;i++)if(!o.streams[i])return i;throw new o.ErrnoError(33)},getStreamChecked(i){var l=o.getStream(i);if(!l)throw new o.ErrnoError(8);return l},getStream:i=>o.streams[i],createStream(i,l=-1){return i=Object.assign(new o.FSStream,i),l==-1&&(l=o.nextfd()),i.fd=l,o.streams[l]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,l=-1){var B=o.createStream(i,l);return B.stream_ops?.dup?.(B),B},doSetAttr(i,l,B){var p=i?.stream_ops.setattr,m=p?i:l;p??(p=l.node_ops.setattr),o.checkOpExists(p,63);try{p(m,B)}catch(_){throw _ instanceof RangeError?new o.ErrnoError(22):_}},chrdev_stream_ops:{open(i){var l=o.getDevice(i.node.rdev);i.stream_ops=l.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,l)=>i<<8|l,registerDevice(i,l){o.devices[i]={stream_ops:l}},getDevice:i=>o.devices[i],getMounts(i){for(var l=[],B=[i];B.length;){var p=B.pop();l.push(p),B.push(...p.mounts)}return l},syncfs(i,l){typeof i=="function"&&(l=i,i=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),p=0;function m(z){return o.syncFSRequests--,l(z)}function _(z){if(z)return _.errored?void 0:(_.errored=!0,m(z));++p>=B.length&&m(null)}for(var I of B)I.type.syncfs?I.type.syncfs(I,i,_):_(null)},mount(i,l,B){var p=B==="/",m=!B,_;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!m){var I=o.lookupPath(B,{follow_mount:!1});if(B=I.path,_=I.node,o.isMountpoint(_))throw new o.ErrnoError(10);if(!o.isDir(_.mode))throw new o.ErrnoError(54)}var z={type:i,opts:l,mountpoint:B,mounts:[]},F0=i.mount(z);return F0.mount=z,z.root=F0,p?o.root=F0:_&&(_.mounted=z,_.mount&&_.mount.mounts.push(z)),F0},unmount(i){var l=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var B=l.node,p=B.mounted,m=o.getMounts(p);for(var[_,I]of Object.entries(o.nameTable))for(;I;){var z=I.name_next;m.includes(I.mount)&&o.destroyNode(I),I=z}B.mounted=null;var F0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(F0,1)},lookup(i,l){return i.node_ops.lookup(i,l)},mknod(i,l,B){var p=o.lookupPath(i,{parent:!0}),m=p.node,_=f0.basename(i);if(!_)throw new o.ErrnoError(28);if(_==="."||_==="..")throw new o.ErrnoError(20);var I=o.mayCreate(m,_);if(I)throw new o.ErrnoError(I);if(!m.node_ops.mknod)throw new o.ErrnoError(63);return m.node_ops.mknod(m,_,l,B)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return i.node_ops.statfs&&Object.assign(l,i.node_ops.statfs(i.mount.opts.root)),l},create(i,l=438){return l&=4095,l|=32768,o.mknod(i,l,0)},mkdir(i,l=511){return l&=1023,l|=16384,o.mknod(i,l,0)},mkdirTree(i,l){var B=i.split("/"),p="";for(var m of B)if(m){(p||f0.isAbs(i))&&(p+="/"),p+=m;try{o.mkdir(p,l)}catch(_){if(_.errno!=20)throw _}}},mkdev(i,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(i,l,B)},symlink(i,l){if(!dx.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var m=f0.basename(l),_=o.mayCreate(p,m);if(_)throw new o.ErrnoError(_);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,m,i)},rename(i,l){var B=f0.dirname(i),p=f0.dirname(l),m=f0.basename(i),_=f0.basename(l),I,z,F0;if(I=o.lookupPath(i,{parent:!0}),z=I.node,I=o.lookupPath(l,{parent:!0}),F0=I.node,!z||!F0)throw new o.ErrnoError(44);if(z.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(z,m),xx=dx.relative(i,p);if(xx.charAt(0)!==".")throw new o.ErrnoError(28);if(xx=dx.relative(l,B),xx.charAt(0)!==".")throw new o.ErrnoError(55);var R0;try{R0=o.lookupNode(F0,_)}catch{}if(_0!==R0){var N0=o.isDir(_0.mode),j0=o.mayDelete(z,m,N0);if(j0)throw new o.ErrnoError(j0);if(j0=R0?o.mayDelete(F0,_,N0):o.mayCreate(F0,_),j0)throw new o.ErrnoError(j0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||R0&&o.isMountpoint(R0))throw new o.ErrnoError(10);if(F0!==z&&(j0=o.nodePermissions(z,"w"),j0))throw new o.ErrnoError(j0);o.hashRemoveNode(_0);try{z.node_ops.rename(_0,F0,_),_0.parent=F0}catch(Cx){throw Cx}finally{o.hashAddNode(_0)}}},rmdir(i){var l=o.lookupPath(i,{parent:!0}),B=l.node,p=f0.basename(i),m=o.lookupNode(B,p),_=o.mayDelete(B,p,!0);if(_)throw new o.ErrnoError(_);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(m)},readdir(i){var l=o.lookupPath(i,{follow:!0}),B=l.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(i){var l=o.lookupPath(i,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var p=f0.basename(i),m=o.lookupNode(B,p),_=o.mayDelete(B,p,!1);if(_)throw new o.ErrnoError(_);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(m)},readlink(i){var l=o.lookupPath(i),B=l.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(i,l){var B=o.lookupPath(i,{follow:!l}),p=B.node,m=o.checkOpExists(p.node_ops.getattr,63);return m(p)},fstat(i){var l=o.getStreamChecked(i),B=l.node,p=l.stream_ops.getattr,m=p?l:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(m)},lstat(i){return o.stat(i,!0)},doChmod(i,l,B,p){o.doSetAttr(i,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(i,l,B){var p;if(typeof i=="string"){var m=o.lookupPath(i,{follow:!B});p=m.node}else p=i;o.doChmod(null,p,l,B)},lchmod(i,l){o.chmod(i,l,!0)},fchmod(i,l){var B=o.getStreamChecked(i);o.doChmod(B,B.node,l,!1)},doChown(i,l,B){o.doSetAttr(i,l,{timestamp:Date.now(),dontFollow:B})},chown(i,l,B,p){var m;if(typeof i=="string"){var _=o.lookupPath(i,{follow:!p});m=_.node}else m=i;o.doChown(null,m,p)},lchown(i,l,B){o.chown(i,l,B,!0)},fchown(i,l,B){var p=o.getStreamChecked(i);o.doChown(p,p.node,!1)},doTruncate(i,l,B){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var p=o.nodePermissions(l,"w");if(p)throw new o.ErrnoError(p);o.doSetAttr(i,l,{size:B,timestamp:Date.now()})},truncate(i,l){if(l<0)throw new o.ErrnoError(28);var B;if(typeof i=="string"){var p=o.lookupPath(i,{follow:!0});B=p.node}else B=i;o.doTruncate(null,B,l)},ftruncate(i,l){var B=o.getStreamChecked(i);if(l<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,l)},utime(i,l,B){var p=o.lookupPath(i,{follow:!0}),m=p.node,_=o.checkOpExists(m.node_ops.setattr,63);_(m,{atime:l,mtime:B})},open(i,l,B=438){if(i==="")throw new o.ErrnoError(44);l=LA(l),l&64?B=B&4095|32768:B=0;var p,m;if(typeof i=="object")p=i;else{m=i.endsWith("/");var _=o.lookupPath(i,{follow:!(l&131072),noent_okay:!0});p=_.node,i=_.path}var I=!1;if(l&64)if(p){if(l&128)throw new o.ErrnoError(20)}else{if(m)throw new o.ErrnoError(31);p=o.mknod(i,B|511,0),I=!0}if(!p)throw new o.ErrnoError(44);if(o.isChrdev(p.mode)&&(l&=-513),l&65536&&!o.isDir(p.mode))throw new o.ErrnoError(54);if(!I){var z=o.mayOpen(p,l);if(z)throw new o.ErrnoError(z)}l&512&&!I&&o.truncate(p,0),l&=-131713;var F0=o.createStream({node:p,path:o.getPath(p),flags:l,seekable:!0,position:0,stream_ops:p.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),I&&o.chmod(p,B&511),F0},close(i){if(o.isClosed(i))throw new o.ErrnoError(8);i.getdents&&(i.getdents=null);try{i.stream_ops.close&&i.stream_ops.close(i)}catch(l){throw l}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,l,B){if(o.isClosed(i))throw new o.ErrnoError(8);if(!i.seekable||!i.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return i.position=i.stream_ops.llseek(i,l,B),i.ungotten=[],i.position},read(i,l,B,p,m){if(p<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.read)throw new o.ErrnoError(28);var _=typeof m<"u";if(!_)m=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var I=i.stream_ops.read(i,l,B,p,m);return _||(i.position+=I),I},write(i,l,B,p,m,_){if(p<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.write)throw new o.ErrnoError(28);i.seekable&&i.flags&1024&&o.llseek(i,0,2);var I=typeof m<"u";if(!I)m=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var z=i.stream_ops.write(i,l,B,p,m,_);return I||(i.position+=z),z},mmap(i,l,B,p,m){if((p&2)!==0&&(m&2)===0&&(i.flags&2097155)!==2)throw new o.ErrnoError(2);if((i.flags&2097155)===1)throw new o.ErrnoError(2);if(!i.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,l,B,p,m)},msync(i,l,B,p,m){return i.stream_ops.msync?i.stream_ops.msync(i,l,B,p,m):0},ioctl(i,l,B){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,l,B)},readFile(i,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&d0(`Invalid encoding type "${l.encoding}"`);var B=o.open(i,l.flags),p=o.stat(i),m=p.size,_=new Uint8Array(m);return o.read(B,_,0,m,0),l.encoding==="utf8"&&(_=DA(_)),o.close(B),_},writeFile(i,l,B={}){B.flags=B.flags||577;var p=o.open(i,B.flags,B.mode);l=Qx(l),o.write(p,l,0,l.byteLength,void 0,B.canOwn),o.close(p)},cwd:()=>o.currentPath,chdir(i){var l=o.lookupPath(i,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(l.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(p,m,_,I,z)=>I,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),l=0,B=()=>(l===0&&(He(i),l=i.byteLength),i[--l]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var i=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(i,"fd",16895,73);return l.stream_ops={llseek:n0.stream_ops.llseek},l.node_ops={lookup(B,p){var m=+p,_=o.getStreamChecked(m),I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>_.path},id:m+1};return I.parent=I,I},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>B.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(i,l,B){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var p=o.open("/dev/stdin",0),m=o.open("/dev/stdout",1),_=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:k0}},init(i,l,B){o.initialized=!0,i??(i=n.stdin),l??(l=n.stdout),B??(B=n.stderr),o.createStandardStreams(i,l,B)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,l){var B=o.analyzePath(i,l);return B.exists?B.object:null},analyzePath(i,l){try{var B=o.lookupPath(i,{follow:!l});i=B.path}catch{}var p={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(i,{parent:!0});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=f0.basename(i),B=o.lookupPath(i,{follow:!l}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(m){p.error=m.errno}return p},createPath(i,l,B,p){i=typeof i=="string"?i:o.getPath(i);for(var m=l.split("/").reverse();m.length;){var _=m.pop();if(_){var I=f0.join2(i,_);try{o.mkdir(I)}catch(z){if(z.errno!=20)throw z}i=I}}return I},createFile(i,l,B,p,m){var _=f0.join2(typeof i=="string"?i:o.getPath(i),l),I=iA(p,m);return o.create(_,I)},createDataFile(i,l,B,p,m,_){var I=l;i&&(i=typeof i=="string"?i:o.getPath(i),I=l?f0.join2(i,l):i);var z=iA(p,m),F0=o.create(I,z);if(B){B=Qx(B),o.chmod(F0,z|146);var _0=o.open(F0,577);o.write(_0,B,0,B.length,0,_),o.close(_0),o.chmod(F0,z)}},createDevice(i,l,B,p){var m,_=f0.join2(typeof i=="string"?i:o.getPath(i),l),I=iA(!!B,!!p);(m=o.createDevice).major??(m.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(F0){F0.seekable=!1},close(F0){p?.buffer?.length&&p(10)},read(F0,_0,xx,R0,N0){for(var j0=0,Cx=0;Cx<R0;Cx++){var Sx;try{Sx=B()}catch{throw new o.ErrnoError(29)}if(Sx===void 0&&j0===0)throw new o.ErrnoError(6);if(Sx==null)break;j0++,_0[xx+Cx]=Sx}return j0&&(F0.node.atime=Date.now()),j0},write(F0,_0,xx,R0,N0){for(var j0=0;j0<R0;j0++)try{p(_0[xx+j0])}catch{throw new o.ErrnoError(29)}return R0&&(F0.node.mtime=F0.node.ctime=Date.now()),j0}}),o.mkdev(_,I,z)},forceLoadFile(i){if(i.isDevice||i.isFolder||i.link||i.contents)return!0;if(globalThis.XMLHttpRequest)d0("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{i.contents=S(i.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(i,l,B,p,m){class _{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(N0){if(!(N0>this.length-1||N0<0)){var j0=N0%this.chunkSize,Cx=N0/this.chunkSize|0;return this.getter(Cx)[j0]}}setDataGetter(N0){this.getter=N0}cacheLength(){var N0=new XMLHttpRequest;N0.open("HEAD",B,!1),N0.send(null),N0.status>=200&&N0.status<300||N0.status===304||d0("Couldn't load "+B+". Status: "+N0.status);var j0=Number(N0.getResponseHeader("Content-length")),Cx,Sx=(Cx=N0.getResponseHeader("Accept-Ranges"))&&Cx==="bytes",Kx=(Cx=N0.getResponseHeader("Content-Encoding"))&&Cx==="gzip",Zx=1024*1024;Sx||(Zx=j0);var xA=(aA,Se)=>{aA>Se&&d0("invalid range ("+aA+", "+Se+") or no bytes requested!"),Se>j0-1&&d0("only "+j0+" bytes available! programmer error!");var kx=new XMLHttpRequest;return kx.open("GET",B,!1),j0!==Zx&&kx.setRequestHeader("Range","bytes="+aA+"-"+Se),kx.responseType="arraybuffer",kx.overrideMimeType&&kx.overrideMimeType("text/plain; charset=x-user-defined"),kx.send(null),kx.status>=200&&kx.status<300||kx.status===304||d0("Couldn't load "+B+". Status: "+kx.status),kx.response!==void 0?new Uint8Array(kx.response||[]):ee(kx.responseText||"",!0)},Ze=this;Ze.setDataGetter(aA=>{var Se=aA*Zx,kx=(aA+1)*Zx-1;return kx=Math.min(kx,j0-1),typeof Ze.chunks[aA]>"u"&&(Ze.chunks[aA]=xA(Se,kx)),typeof Ze.chunks[aA]>"u"&&d0("doXHR failed!"),Ze.chunks[aA]}),(Kx||!j0)&&(Zx=j0=1,j0=this.getter(0).length,Zx=j0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=j0,this._chunkSize=Zx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var I=new _,z={isDevice:!1,contents:I}}else var z={isDevice:!1,url:B};var F0=o.createFile(i,l,z,p,m);z.contents?F0.contents=z.contents:z.url&&(F0.contents=null,F0.url=z.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[R0,N0]of Object.entries(F0.stream_ops))_0[R0]=(...j0)=>(o.forceLoadFile(F0),N0(...j0));function xx(R0,N0,j0,Cx,Sx){var Kx=R0.node.contents;if(Sx>=Kx.length)return 0;var Zx=Math.min(Kx.length-Sx,Cx);if(Kx.slice)for(var xA=0;xA<Zx;xA++)N0[j0+xA]=Kx[Sx+xA];else for(var xA=0;xA<Zx;xA++)N0[j0+xA]=Kx.get(Sx+xA);return Zx}return _0.read=(R0,N0,j0,Cx,Sx)=>(o.forceLoadFile(F0),xx(R0,N0,j0,Cx,Sx)),_0.mmap=(R0,N0,j0,Cx,Sx)=>{o.forceLoadFile(F0);var Kx=MA(N0);if(!Kx)throw new o.ErrnoError(48);return xx(R0,cx,Kx,N0,j0),{ptr:Kx,allocated:!0}},F0.stream_ops=_0,F0}},w0={currentUmask:18,calculateAt(i,l,B){if(f0.isAbs(l))return l;var p;if(i===-100)p=o.cwd();else{var m=w0.getStreamFromFD(i);p=m.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+l},writeStat(i,l){c0[i>>2]=l.dev,c0[i+4>>2]=l.mode,c0[i+8>>2]=l.nlink,c0[i+12>>2]=l.uid,c0[i+16>>2]=l.gid,c0[i+20>>2]=l.rdev,W0[i+24>>3]=BigInt(l.size),O0[i+32>>2]=4096,O0[i+36>>2]=l.blocks;var B=l.atime.getTime(),p=l.mtime.getTime(),m=l.ctime.getTime();return W0[i+40>>3]=BigInt(Math.floor(B/1e3)),c0[i+48>>2]=B%1e3*1e3*1e3,W0[i+56>>3]=BigInt(Math.floor(p/1e3)),c0[i+64>>2]=p%1e3*1e3*1e3,W0[i+72>>3]=BigInt(Math.floor(m/1e3)),c0[i+80>>2]=m%1e3*1e3*1e3,W0[i+88>>3]=BigInt(l.ino),0},writeStatFs(i,l){c0[i+4>>2]=l.bsize,c0[i+60>>2]=l.bsize,W0[i+8>>3]=BigInt(l.blocks),W0[i+16>>3]=BigInt(l.bfree),W0[i+24>>3]=BigInt(l.bavail),W0[i+32>>3]=BigInt(l.files),W0[i+40>>3]=BigInt(l.ffree),c0[i+48>>2]=l.fsid,c0[i+64>>2]=l.flags,c0[i+56>>2]=l.namelen},doMsync(i,l,B,p,m){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var _=tA.slice(i,i+B);o.msync(l,_,m,B,p)},getStreamFromFD(i){var l=o.getStreamChecked(i);return l},varargs:void 0,getStr(i){var l=sA(i);return l}};function Ve(i,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(i,l),B&-8)return-28;var m=o.lookupPath(l,{follow:!0}),_=m.node;if(!_)return-44;var I="";return B&4&&(I+="r"),B&2&&(I+="w"),B&1&&(I+="x"),I&&o.nodePermissions(_,I)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var OA=()=>{var i=O0[+w0.varargs>>2];return w0.varargs+=4,i},mA=OA;function ot(i,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(i);switch(l){case 0:{var m=OA();if(m<0)return-28;for(;o.streams[m];)m++;var _;return _=o.dupStream(p,m),_.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var m=OA(),I=289792;return p.flags=p.flags&~I|m&I,0}case 12:{var m=mA(),z=0;return V0[m+z>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}var ge=(i,l,B)=>Je(i,tA,l,B);function Dr(i,l){try{if(l===0)return-28;var B=o.cwd(),p=Ae(B)+1;return l<p?-68:(ge(B,i,l),p)}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function pr(i,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(i);switch(l){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var m=p.tty.ops.ioctl_tcgets(p),_=mA();O0[_>>2]=m.c_iflag||0,O0[_+4>>2]=m.c_oflag||0,O0[_+8>>2]=m.c_cflag||0,O0[_+12>>2]=m.c_lflag||0;for(var I=0;I<32;I++)cx[_+I+17]=m.c_cc[I]||0;return 0}return 0}case 21510:case 21511:case 21512:return p.tty?0:-59;case 21506:case 21507:case 21508:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcsets){for(var _=mA(),z=O0[_>>2],F0=O0[_+4>>2],_0=O0[_+8>>2],xx=O0[_+12>>2],R0=[],I=0;I<32;I++)R0.push(cx[_+I+17]);return p.tty.ops.ioctl_tcsets(p.tty,l,{c_iflag:z,c_oflag:F0,c_cflag:_0,c_lflag:xx,c_cc:R0})}return 0}case 21519:{if(!p.tty)return-59;var _=mA();return O0[_>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var _=mA();return o.ioctl(p,l,_)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var N0=p.tty.ops.ioctl_tiocgwinsz(p.tty),_=mA();V0[_>>1]=N0[0],V0[_+2>>1]=N0[1]}return 0}case 21524:return p.tty?0:-59;case 21515:return p.tty?0:-59;default:return-28}}catch(j0){if(typeof o>"u"||j0.name!=="ErrnoError")throw j0;return-j0.errno}}function Ft(i,l,B,p){w0.varargs=p;try{l=w0.getStr(l),l=w0.calculateAt(i,l);var m=p?OA():0;return B&64&&(m&=~w0.currentUmask),o.open(l,B,m).fd}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return-_.errno}}function vt(i,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(i,l),p<=0)return-28;var m=o.readlink(l),_=Math.min(p,Ae(m)),I=cx[B+_];return ge(m,B,p+1),cx[B+_]=I,_}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function lt(i,l,B,p){try{return l=w0.getStr(l),p=w0.getStr(p),l=w0.calculateAt(i,l),p=w0.calculateAt(B,p),o.rename(l,p),0}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function ye(i){try{return i=w0.getStr(i),o.rmdir(i),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function br(i,l,B){try{if(l=w0.getStr(l),l=w0.calculateAt(i,l),!B)o.unlink(l);else if(B===512)o.rmdir(l);else return-28;return 0}catch(p){if(typeof o>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}var re=()=>{throw new Y},ke=()=>performance.now(),ct=()=>Date.now(),mr=1,ft=i=>i>=0&&i<=3,te=9007199254740992,We=-9007199254740992,jr=i=>i<We||i>te?NaN:Number(i);function hr(i,l,B){if(l=jr(l),!ft(i))return 28;var p;if(i===0)p=ct();else if(mr)p=ke();else return 52;var m=Math.round(p*1e3*1e3);return W0[B>>3]=BigInt(m),0}var Et=()=>2147483648,gr=(i,l)=>Math.ceil(i/l)*l,Bt=i=>{var l=I0.buffer.byteLength,B=(i-l+65535)/65536|0;try{return I0.grow(B),Z(),1}catch{}},Ct=i=>{var l=tA.length;i>>>=0;var B=Et();if(i>B)return!1;for(var p=1;p<=4;p*=2){var m=l*(1+.2/p);m=Math.min(m,i+100663296);var _=Math.min(B,gr(Math.max(i,m),65536)),I=Bt(_);if(I)return!0}return!1};function we(i){try{var l=w0.getStreamFromFD(i);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var dt=(i,l,B,p)=>{for(var m=0,_=0;_<B;_++){var I=c0[l>>2],z=c0[l+4>>2];l+=8;var F0=o.read(i,cx,I,z,p);if(F0<0)return-1;if(m+=F0,F0<z)break;typeof p<"u"&&(p+=F0)}return m};function ut(i,l,B,p){try{var m=w0.getStreamFromFD(i),_=dt(m,l,B);return c0[p>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}function yr(i,l,B,p){l=jr(l);try{if(isNaN(l))return 22;var m=w0.getStreamFromFD(i);return o.llseek(m,l,B),W0[p>>3]=BigInt(m.position),m.getdents&&l===0&&B===0&&(m.getdents=null),0}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return _.errno}}var kr=(i,l,B,p)=>{for(var m=0,_=0;_<B;_++){var I=c0[l>>2],z=c0[l+4>>2];l+=8;var F0=o.write(i,cx,I,z,p);if(F0<0)return-1;if(m+=F0,F0<z)break;typeof p<"u"&&(p+=F0)}return m};function ne(i,l,B,p){try{var m=w0.getStreamFromFD(i),_=kr(m,l,B);return c0[p>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}var wr=0,se=()=>je||wr>0,Xe=i=>{M=i,se()||(n.onExit?.(i),s0=!0),j(i,new rA(i))},Nx=(i,l)=>{M=i,se()||l0(),Xe(i)},Dt=i=>{if(i instanceof rA||i=="unwind")return M;j(1,i)},GA=i=>V(i),ie=i=>{var l=Ae(i)+1,B=GA(l);return ge(i,B,l),B},Ye=[],Dx=i=>{var l=Ye[i];return l||(Ye[i]=l=$0.get(i)),l},_e=(...i)=>o.createPath(...i),ae=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),c=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=at,o.preloadFile=RA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(he=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=An,n.addRunDependency=qx,n.removeRunDependency=ze,n.FS_preloadFile=RA,n.FS_unlink=ae,n.FS_createPath=_e,n.FS_createDevice=c,n.FS=o,n.FS_createDataFile=Ke,n.FS_createLazyFile=a,n.PROXYFS=k0;var d,b,k,$,G,V,o0,D0,X0,I0,$0;function m0(i){d=n._main=i.__main_argc_argv,b=i.fflush,k=i.__funcs_on_exit,$=i.setThrew,G=i._emscripten_stack_restore,V=i._emscripten_stack_alloc,o0=i.emscripten_stack_get_current,D0=I0=i.memory,X0=$0=i.__indirect_function_table}var sx={__assert_fail:IA,__syscall_faccessat:Ve,__syscall_fcntl64:ot,__syscall_getcwd:Dr,__syscall_ioctl:pr,__syscall_openat:Ft,__syscall_readlinkat:vt,__syscall_renameat:lt,__syscall_rmdir:ye,__syscall_unlinkat:br,_emscripten_throw_longjmp:re,clock_time_get:hr,emscripten_resize_heap:Ct,fd_close:we,fd_read:ut,fd_seek:yr,fd_write:ne,invoke_i:oe,invoke_ii:Ox,invoke_iii:Gx,invoke_iiid:Bs,invoke_iiii:Jx,invoke_iiiii:fx,invoke_iiiiii:Cs,invoke_iijii:fs,invoke_v:yx,invoke_vi:Es,invoke_vii:Ix,invoke_viii:xn,invoke_viiii:jA,invoke_viiiii:Zt};function yx(i){var l=g0();try{Dx(i)()}catch(B){if(ox(l),!(B instanceof R))throw B;$(1,0)}}function Ix(i,l,B){var p=g0();try{Dx(i)(l,B)}catch(m){if(ox(p),!(m instanceof R))throw m;$(1,0)}}function Ox(i,l){var B=g0();try{return Dx(i)(l)}catch(p){if(ox(B),!(p instanceof R))throw p;$(1,0)}}function Gx(i,l,B){var p=g0();try{return Dx(i)(l,B)}catch(m){if(ox(p),!(m instanceof R))throw m;$(1,0)}}function oe(i){var l=g0();try{return Dx(i)()}catch(B){if(ox(l),!(B instanceof R))throw B;$(1,0)}}function Jx(i,l,B,p){var m=g0();try{return Dx(i)(l,B,p)}catch(_){if(ox(m),!(_ instanceof R))throw _;$(1,0)}}function jA(i,l,B,p,m){var _=g0();try{Dx(i)(l,B,p,m)}catch(I){if(ox(_),!(I instanceof R))throw I;$(1,0)}}function fx(i,l,B,p,m){var _=g0();try{return Dx(i)(l,B,p,m)}catch(I){if(ox(_),!(I instanceof R))throw I;$(1,0)}}function Zt(i,l,B,p,m,_){var I=g0();try{Dx(i)(l,B,p,m,_)}catch(z){if(ox(I),!(z instanceof R))throw z;$(1,0)}}function fs(i,l,B,p,m){var _=g0();try{return Dx(i)(l,B,p,m)}catch(I){if(ox(_),!(I instanceof R))throw I;$(1,0)}}function Es(i,l){var B=g0();try{Dx(i)(l)}catch(p){if(ox(B),!(p instanceof R))throw p;$(1,0)}}function xn(i,l,B,p){var m=g0();try{Dx(i)(l,B,p)}catch(_){if(ox(m),!(_ instanceof R))throw _;$(1,0)}}function Bs(i,l,B,p){var m=g0();try{return Dx(i)(l,B,p)}catch(_){if(ox(m),!(_ instanceof R))throw _;$(1,0)}}function Cs(i,l,B,p,m,_){var I=g0();try{return Dx(i)(l,B,p,m,_)}catch(z){if(ox(I),!(z instanceof R))throw z;$(1,0)}}function An(i=[]){var l=d;i.unshift(D);var B=i.length,p=GA((B+1)*4),m=p;for(var _ of i)c0[m>>2]=ie(_),m+=4;c0[m>>2]=0;try{var I=l(B,p);return Nx(I,!0),I}catch(z){return Dt(z)}}function pt(i=u){if(Bx>0){b0=pt;return}if(i0(),Bx>0){b0=pt;return}function l(){if(n.calledRun=!0,!s0){U(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||An(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Qe;return Qe=await tx(),pt(),a0?s=n:s=new Promise((i,l)=>{H=i,J=l}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),wE=Ro({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",j=(a,c)=>{throw c};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",h,S;if(E){var P=require("fs");w=__dirname+"/",S=a=>{a=y(a)?new URL(a):a;var c=P.readFileSync(a);return c},h=async(a,c=!0)=>{a=y(a)?new URL(a):a;var d=P.readFileSync(a,c?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),j=(a,c)=>{throw process.exitCode=a,c}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=a=>{var c=new XMLHttpRequest;return c.open("GET",a,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),h=async a=>{if(y(a))return new Promise((d,b)=>{var k=new XMLHttpRequest;k.open("GET",a,!0),k.responseType="arraybuffer",k.onload=()=>{if(k.status==200||k.status==0&&k.response){d(k.response);return}b(k.status)},k.onerror=b,k.send(null)});var c=await fetch(a,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var q=console.log.bind(console),L=console.error.bind(console),O,s0=!1,M,y=a=>a.startsWith("file://");class R{}class Y extends R{}function W(a){for(var c=0,d=a.length,b=new Uint8Array(d),k;c<d;++c)k=a.charCodeAt(c),b[c]=~k>>8&k;return b}var H,J,a0=!1,t0=!1;function Z(){var a=GA.buffer;cx=new Int8Array(a),V0=new Int16Array(a),tA=new Uint8Array(a),tt=new Uint16Array(a),O0=new Int32Array(a),c0=new Uint32Array(a),et=new Float32Array(a),rt=new Float64Array(a),W0=new BigInt64Array(a),nt=new BigUint64Array(a)}function i0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)ur(n.preRun.shift());qA(Yx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),ae.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){kr(),o.quit(),nx.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)dr(n.postRun.shift());qA(NA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,L(a),s0=!0,a+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(a);throw J?.(c),c}var P0;function L0(){return W(`\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 Ex(a){return a}async function Xx(a){return a}async function
|
|
1527
|
-
`));if(!a)return null;Hx=Ae(a,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(a,l){nx.ttys[a]={input:[],output:[],ops:l},o.registerDevice(a,nx.stream_ops)},stream_ops:{open(a){var l=nx.ttys[a.node.rdev];if(!l)throw new o.ErrnoError(43);a.tty=l,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,l,d,b,k){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,l[d+G]=V}return $&&(a.node.atime=Date.now()),$},write(a,l,d,b,k){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,l[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return rt()},put_char(a,l){l===null||l===10?(q(nA(a.output)),a.output=[]):l!=0&&a.output.push(l)},fsync(a){a.output?.length>0&&(q(nA(a.output)),a.output=[])},ioctl_tcgets(a){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(a,l,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,l){l===null||l===10?(L(nA(a.output)),a.output=[]):l!=0&&a.output.push(l)},fsync(a){a.output?.length>0&&(L(nA(a.output)),a.output=[])}}},IA=a=>{d0()},n0={ops_table:null,mount(a){return n0.createNode(null,"/",16895,0)},createNode(a,l,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var k=o.createNode(a,l,d,b);return o.isDir(k.mode)?(k.node_ops=n0.ops_table.dir.node,k.stream_ops=n0.ops_table.dir.stream,k.contents={}):o.isFile(k.mode)?(k.node_ops=n0.ops_table.file.node,k.stream_ops=n0.ops_table.file.stream,k.usedBytes=0,k.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(k.mode)?(k.node_ops=n0.ops_table.link.node,k.stream_ops=n0.ops_table.link.stream):o.isChrdev(k.mode)&&(k.node_ops=n0.ops_table.chrdev.node,k.stream_ops=n0.ops_table.chrdev.stream),k.atime=k.mtime=k.ctime=Date.now(),a&&(a.contents[l]=k,a.atime=a.mtime=a.ctime=k.atime),k},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,l){var d=a.contents.length;if(!(d>=l)){var b=1024*1024;l=Math.max(l,d*(d<b?2:1.125)>>>0),d&&(l=Math.max(l,256));var k=n0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(l),a.contents.set(k)}},resizeFileStorage(a,l){if(a.usedBytes!=l){var d=a.contents;a.contents=new Uint8Array(l),a.contents.set(d.subarray(0,Math.min(l,a.usedBytes))),a.usedBytes=l}},node_ops:{getattr(a){var l={};return l.dev=o.isChrdev(a.mode)?a.id:1,l.ino=a.id,l.mode=a.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=a.rdev,o.isDir(a.mode)?l.size=4096:o.isFile(a.mode)?l.size=a.usedBytes:o.isLink(a.mode)?l.size=a.link.length:l.size=0,l.atime=new Date(a.atime),l.mtime=new Date(a.mtime),l.ctime=new Date(a.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(a,l){for(let d of["mode","atime","mtime","ctime"])l[d]!=null&&(a[d]=l[d]);l.size!==void 0&&n0.resizeFileStorage(a,l.size)},lookup(a,l){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(a,l,d,b){return n0.createNode(a,l,d,b)},rename(a,l,d){var b;try{b=o.lookupNode(l,d)}catch{}if(b){if(o.isDir(a.mode))for(var k in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],l.contents[d]=a,a.name=d,l.ctime=l.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,l){delete a.contents[l],a.ctime=a.mtime=Date.now()},rmdir(a,l){var d=o.lookupNode(a,l);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[l],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,l,d){var b=n0.createNode(a,l,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,l,d,b,k){var $=a.node.contents;if(k>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-k,b);return l.set($.subarray(k,k+G),d),G},write(a,l,d,b,k,$){if(l.buffer===lx.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=l.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&k===0?(G.contents=l.slice(d,d+b),G.usedBytes=b):(n0.expandFileStorage(G,k+b),G.contents.set(l.subarray(d,d+b),k),G.usedBytes=Math.max(G.usedBytes,k+b)),b},llseek(a,l,d){var b=l;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,l,d,b,k){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,V=a.node.contents;if(!(k&2)&&V.buffer===lx.buffer)G=!1,$=V.byteOffset;else{if(G=!0,$=IA(l),!$)throw new o.ErrnoError(48);V&&((d>0||d+l<V.length)&&(V.subarray?V=V.subarray(d,d+l):V=Array.prototype.slice.call(V,d,d+l)),lx.set(V,$))}return{ptr:$,allocated:G}},msync(a,l,d,b,k){return n0.stream_ops.write(a,l,0,b,d,!1),0}}},MA=a=>{if(typeof a!="string")return a;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=l[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Qx=a=>(typeof a=="string"&&(a=Ae(a,!0)),a.subarray||(a=new Uint8Array(a)),a),sA=(a,l)=>{var d=0;return a&&(d|=365),l&&(d|=146),d},q0={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},k0={mount(a){return k0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,l,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var k=o.createNode(a,l,d);return k.node_ops=k0.node_ops,k.stream_ops=k0.stream_ops,k},realPath(a){for(var l=[];a.parent!==a;)l.push(a.name),a=a.parent;return l.push(a.mount.opts.root),l.reverse(),c0.join(...l)},node_ops:{getattr(a){var l=k0.realPath(a),d;try{d=a.mount.opts.fs.lstat(l)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,l){var d=k0.realPath(a);try{if(l.mode!==void 0&&(a.mount.opts.fs.chmod(d,l.mode),a.mode=l.mode),l.atime||l.mtime){var b=new Date(l.atime||l.mtime),k=new Date(l.mtime||l.atime);a.mount.opts.fs.utime(d,b,k)}l.size!==void 0&&a.mount.opts.fs.truncate(d,l.size)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},lookup(a,l){try{var d=c0.join2(k0.realPath(a),l),b=a.mount.opts.fs.lstat(d).mode,k=k0.createNode(a,l,b);return k}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},mknod(a,l,d,b){var k=k0.createNode(a,l,d,b),$=k0.realPath(k);try{o.isDir(k.mode)?k.mount.opts.fs.mkdir($,k.mode):k.mount.opts.fs.writeFile($,"",{mode:k.mode})}catch(G){throw G.code?new o.ErrnoError(q0[G.code]):G}return k},rename(a,l,d){var b=k0.realPath(a),k=c0.join2(k0.realPath(l),d);try{a.mount.opts.fs.rename(b,k),a.name=d}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},unlink(a,l){var d=c0.join2(k0.realPath(a),l);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,l){var d=c0.join2(k0.realPath(a),l);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var l=k0.realPath(a);try{return a.mount.opts.fs.readdir(l)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,l,d){var b=c0.join2(k0.realPath(a),l);try{a.mount.opts.fs.symlink(d,b)}catch(k){throw k.code?new o.ErrnoError(q0[k.code]):k}},readlink(a){var l=k0.realPath(a);try{return a.mount.opts.fs.readlink(l)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var l=k0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(l,a.flags)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(l){throw l.code?new o.ErrnoError(q0[l.code]):l}},read(a,l,d,b,k){try{return a.node.mount.opts.fs.read(a.nfd,l,d,b,k)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},write(a,l,d,b,k){try{return a.node.mount.opts.fs.write(a.nfd,l,d,b,k)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},llseek(a,l,d){var b=l;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var k=a.node.node_ops.getattr(a.node);b+=k.size}catch($){throw new o.ErrnoError(q0[$.code])}if(b<0)throw new o.ErrnoError(q0.EINVAL);return b}}},DA=async a=>{var l=await g(a);return new Uint8Array(l)},Je=(...a)=>o.createDataFile(...a),ux=a=>a,Bx=0,b0=null,Ke=a=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var l=b0;b0=null,l()}},qx=a=>{Bx++,n.monitorRunDependencies?.(Bx)},he=[],pA=async(a,l)=>{typeof Browser<"u"&&Browser.init();for(var d of he)if(d.canHandle(l))return d.handle(a,l);return a},LA=async(a,l,d,b,k,$,G,V)=>{var o0=l?dx.resolve(c0.join2(a,l)):a,D0=ux(`cp ${o0}`);qx(D0);try{var W0=d;typeof d=="string"&&(W0=await DA(d)),W0=await pA(W0,o0),V?.(),$||Je(a,l,W0,b,k,G)}finally{Ke(D0)}},tt=(a,l,d,b,k,$,G,V,o0,D0)=>{LA(a,l,d,b,k,V,o0,D0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){bx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}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(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,l,d,b){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=l,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,l={}){if(!a)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),c0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),k=o.root,$="/",G=0;G<b.length;G++){var V=G===b.length-1;if(V&&l.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=c0.dirname($),o.isRoot(k)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else k=k.parent;continue}$=c0.join2($,b[G]);try{k=o.lookupNode(k,b[G])}catch(D0){if(D0?.errno===44&&V&&l.noent_okay)return{path:$};throw D0}if(o.isMountpoint(k)&&(!V||l.follow_mount)&&(k=k.mounted.root),o.isLink(k.mode)&&(!V||l.follow)){if(!k.node_ops.readlink)throw new o.ErrnoError(52);var o0=k.node_ops.readlink(k);c0.isAbs(o0)||(o0=c0.dirname($)+"/"+o0),a=o0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:k}}throw new o.ErrnoError(32)},getPath(a){for(var l;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return l?d[d.length-1]!=="/"?`${d}/${l}`:d+l:d}l=l?`${a.name}/${l}`:a.name,a=a.parent}},hashName(a,l){for(var d=0,b=0;b<l.length;b++)d=(d<<5)-d+l.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var l=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[l],o.nameTable[l]=a},hashRemoveNode(a){var l=o.hashName(a.parent.id,a.name);if(o.nameTable[l]===a)o.nameTable[l]=a.name_next;else for(var d=o.nameTable[l];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,l){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,l),k=o.nameTable[b];k;k=k.name_next){var $=k.name;if(k.parent.id===a.id&&$===l)return k}return o.lookup(a,l)},createNode(a,l,d,b){var k=new o.FSNode(a,l,d,b);return o.hashAddNode(k),k},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var l=["r","w","rw"][a&3];return a&512&&(l+="w"),l},nodePermissions(a,l){return o.ignorePermissions?0:l.includes("r")&&!(a.mode&292)||l.includes("w")&&!(a.mode&146)||l.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var l=o.nodePermissions(a,"x");return l||(a.node_ops.lookup?0:2)},mayCreate(a,l){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,l);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,l,d){var b;try{b=o.lookupNode(a,l)}catch($){return $.errno}var k=o.nodePermissions(a,"wx");if(k)return k;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,l){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(l);return o.isDir(a.mode)&&(d!=="r"||l&576)?31:o.nodePermissions(a,d)},checkOpExists(a,l){if(!a)throw new o.ErrnoError(l);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var l=o.getStream(a);if(!l)throw new o.ErrnoError(8);return l},getStream:a=>o.streams[a],createStream(a,l=-1){return a=Object.assign(new o.FSStream,a),l==-1&&(l=o.nextfd()),a.fd=l,o.streams[l]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,l=-1){var d=o.createStream(a,l);return d.stream_ops?.dup?.(d),d},doSetAttr(a,l,d){var b=a?.stream_ops.setattr,k=b?a:l;b??(b=l.node_ops.setattr),o.checkOpExists(b,63);try{b(k,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var l=o.getDevice(a.node.rdev);a.stream_ops=l.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,l)=>a<<8|l,registerDevice(a,l){o.devices[a]={stream_ops:l}},getDevice:a=>o.devices[a],getMounts(a){for(var l=[],d=[a];d.length;){var b=d.pop();l.push(b),d.push(...b.mounts)}return l},syncfs(a,l){typeof a=="function"&&(l=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function k(V){return o.syncFSRequests--,l(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,k(V));++b>=d.length&&k(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,l,d){var b=d==="/",k=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!k){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:l,mountpoint:d,mounts:[]},o0=a.mount(V);return o0.mount=V,V.root=o0,b?o.root=o0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),o0},unmount(a){var l=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var d=l.node,b=d.mounted,k=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var V=G.name_next;k.includes(G.mount)&&o.destroyNode(G),G=V}d.mounted=null;var o0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(o0,1)},lookup(a,l){return a.node_ops.lookup(a,l)},mknod(a,l,d){var b=o.lookupPath(a,{parent:!0}),k=b.node,$=c0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(k,$);if(G)throw new o.ErrnoError(G);if(!k.node_ops.mknod)throw new o.ErrnoError(63);return k.node_ops.mknod(k,$,l,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(l,a.node_ops.statfs(a.mount.opts.root)),l},create(a,l=438){return l&=4095,l|=32768,o.mknod(a,l,0)},mkdir(a,l=511){return l&=1023,l|=16384,o.mknod(a,l,0)},mkdirTree(a,l){var d=a.split("/"),b="";for(var k of d)if(k){(b||c0.isAbs(a))&&(b+="/"),b+=k;try{o.mkdir(b,l)}catch($){if($.errno!=20)throw $}}},mkdev(a,l,d){return typeof d>"u"&&(d=l,l=438),l|=8192,o.mknod(a,l,d)},symlink(a,l){if(!dx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(l,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var k=c0.basename(l),$=o.mayCreate(b,k);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,k,a)},rename(a,l){var d=c0.dirname(a),b=c0.dirname(l),k=c0.basename(a),$=c0.basename(l),G,V,o0;if(G=o.lookupPath(a,{parent:!0}),V=G.node,G=o.lookupPath(l,{parent:!0}),o0=G.node,!V||!o0)throw new o.ErrnoError(44);if(V.mount!==o0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,k),W0=dx.relative(a,b);if(W0.charAt(0)!==".")throw new o.ErrnoError(28);if(W0=dx.relative(l,d),W0.charAt(0)!==".")throw new o.ErrnoError(55);var I0;try{I0=o.lookupNode(o0,$)}catch{}if(D0!==I0){var $0=o.isDir(D0.mode),m0=o.mayDelete(V,k,$0);if(m0)throw new o.ErrnoError(m0);if(m0=I0?o.mayDelete(o0,$,$0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||I0&&o.isMountpoint(I0))throw new o.ErrnoError(10);if(o0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,o0,$),D0.parent=o0}catch(ix){throw ix}finally{o.hashAddNode(D0)}}},rmdir(a){var l=o.lookupPath(a,{parent:!0}),d=l.node,b=c0.basename(a),k=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(k))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(k)},readdir(a){var l=o.lookupPath(a,{follow:!0}),d=l.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var l=o.lookupPath(a,{parent:!0}),d=l.node;if(!d)throw new o.ErrnoError(44);var b=c0.basename(a),k=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(k))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(k)},readlink(a){var l=o.lookupPath(a),d=l.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,l){var d=o.lookupPath(a,{follow:!l}),b=d.node,k=o.checkOpExists(b.node_ops.getattr,63);return k(b)},fstat(a){var l=o.getStreamChecked(a),d=l.node,b=l.stream_ops.getattr,k=b?l:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(k)},lstat(a){return o.stat(a,!0)},doChmod(a,l,d,b){o.doSetAttr(a,l,{mode:d&4095|l.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,l,d){var b;if(typeof a=="string"){var k=o.lookupPath(a,{follow:!d});b=k.node}else b=a;o.doChmod(null,b,l,d)},lchmod(a,l){o.chmod(a,l,!0)},fchmod(a,l){var d=o.getStreamChecked(a);o.doChmod(d,d.node,l,!1)},doChown(a,l,d){o.doSetAttr(a,l,{timestamp:Date.now(),dontFollow:d})},chown(a,l,d,b){var k;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});k=$.node}else k=a;o.doChown(null,k,b)},lchown(a,l,d){o.chown(a,l,d,!0)},fchown(a,l,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,l,d){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(l,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,l,{size:d,timestamp:Date.now()})},truncate(a,l){if(l<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,l)},ftruncate(a,l){var d=o.getStreamChecked(a);if(l<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,l)},utime(a,l,d){var b=o.lookupPath(a,{follow:!0}),k=b.node,$=o.checkOpExists(k.node_ops.setattr,63);$(k,{atime:l,mtime:d})},open(a,l,d=438){if(a==="")throw new o.ErrnoError(44);l=MA(l),l&64?d=d&4095|32768:d=0;var b,k;if(typeof a=="object")b=a;else{k=a.endsWith("/");var $=o.lookupPath(a,{follow:!(l&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(l&64)if(b){if(l&128)throw new o.ErrnoError(20)}else{if(k)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(l&=-513),l&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var V=o.mayOpen(b,l);if(V)throw new o.ErrnoError(V)}l&512&&!G&&o.truncate(b,0),l&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:l,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),G&&o.chmod(b,d&511),o0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(l){throw l}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,l,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,l,d),a.ungotten=[],a.position},read(a,l,d,b,k){if(b<0||k<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof k<"u";if(!$)k=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,l,d,b,k);return $||(a.position+=G),G},write(a,l,d,b,k,$){if(b<0||k<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof k<"u";if(!G)k=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,l,d,b,k,$);return G||(a.position+=V),V},mmap(a,l,d,b,k){if((b&2)!==0&&(k&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,l,d,b,k)},msync(a,l,d,b,k){return a.stream_ops.msync?a.stream_ops.msync(a,l,d,b,k):0},ioctl(a,l,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,l,d)},readFile(a,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&d0(`Invalid encoding type "${l.encoding}"`);var d=o.open(a,l.flags),b=o.stat(a),k=b.size,$=new Uint8Array(k);return o.read(d,$,0,k,0),l.encoding==="utf8"&&($=nA($)),o.close(d),$},writeFile(a,l,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);l=Qx(l),o.write(b,l,0,l.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var l=o.lookupPath(a,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(l.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,k,$,G,V)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),l=0,d=()=>(l===0&&(Ue(a),l=a.byteLength),a[--l]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(a,"fd",16895,73);return l.stream_ops={llseek:n0.stream_ops.llseek},l.node_ops={lookup(d,b){var k=+b,$=o.getStreamChecked(k),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:k+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(a,l,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),k=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:k0}},init(a,l,d){o.initialized=!0,a??(a=n.stdin),l??(l=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,l,d)},quit(){o.initialized=!1,te(0);for(var a of o.streams)a&&o.close(a)},findObject(a,l){var d=o.analyzePath(a,l);return d.exists?d.object:null},analyzePath(a,l){try{var d=o.lookupPath(a,{follow:!l});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=c0.basename(a),d=o.lookupPath(a,{follow:!l}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(k){b.error=k.errno}return b},createPath(a,l,d,b){a=typeof a=="string"?a:o.getPath(a);for(var k=l.split("/").reverse();k.length;){var $=k.pop();if($){var G=c0.join2(a,$);try{o.mkdir(G)}catch(V){if(V.errno!=20)throw V}a=G}}return G},createFile(a,l,d,b,k){var $=c0.join2(typeof a=="string"?a:o.getPath(a),l),G=sA(b,k);return o.create($,G)},createDataFile(a,l,d,b,k,$){var G=l;a&&(a=typeof a=="string"?a:o.getPath(a),G=l?c0.join2(a,l):a);var V=sA(b,k),o0=o.create(G,V);if(d){d=Qx(d),o.chmod(o0,V|146);var D0=o.open(o0,577);o.write(D0,d,0,d.length,0,$),o.close(D0),o.chmod(o0,V)}},createDevice(a,l,d,b){var k,$=c0.join2(typeof a=="string"?a:o.getPath(a),l),G=sA(!!d,!!b);(k=o.createDevice).major??(k.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(o0){o0.seekable=!1},close(o0){b?.buffer?.length&&b(10)},read(o0,D0,W0,I0,$0){for(var m0=0,ix=0;ix<I0;ix++){var gx;try{gx=d()}catch{throw new o.ErrnoError(29)}if(gx===void 0&&m0===0)throw new o.ErrnoError(6);if(gx==null)break;m0++,D0[W0+ix]=gx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,D0,W0,I0,$0){for(var m0=0;m0<I0;m0++)try{b(D0[W0+m0])}catch{throw new o.ErrnoError(29)}return I0&&(o0.node.mtime=o0.node.ctime=Date.now()),m0}}),o.mkdev($,G,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)d0("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{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,l,d,b,k){class ${constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var m0=$0%this.chunkSize,ix=$0/this.chunkSize|0;return this.getter(ix)[m0]}}setDataGetter($0){this.getter=$0}cacheLength(){var $0=new XMLHttpRequest;$0.open("HEAD",d,!1),$0.send(null),$0.status>=200&&$0.status<300||$0.status===304||d0("Couldn't load "+d+". Status: "+$0.status);var m0=Number($0.getResponseHeader("Content-length")),ix,gx=(ix=$0.getResponseHeader("Accept-Ranges"))&&ix==="bytes",Ix=(ix=$0.getResponseHeader("Content-Encoding"))&&ix==="gzip",Rx=1024*1024;gx||(Rx=m0);var Gx=(Jx,mA)=>{Jx>mA&&d0("invalid range ("+Jx+", "+mA+") or no bytes requested!"),mA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var cx=new XMLHttpRequest;return cx.open("GET",d,!1),m0!==Rx&&cx.setRequestHeader("Range","bytes="+Jx+"-"+mA),cx.responseType="arraybuffer",cx.overrideMimeType&&cx.overrideMimeType("text/plain; charset=x-user-defined"),cx.send(null),cx.status>=200&&cx.status<300||cx.status===304||d0("Couldn't load "+d+". Status: "+cx.status),cx.response!==void 0?new Uint8Array(cx.response||[]):Ae(cx.responseText||"",!0)},ae=this;ae.setDataGetter(Jx=>{var mA=Jx*Rx,cx=(Jx+1)*Rx-1;return cx=Math.min(cx,m0-1),typeof ae.chunks[Jx]>"u"&&(ae.chunks[Jx]=Gx(mA,cx)),typeof ae.chunks[Jx]>"u"&&d0("doXHR failed!"),ae.chunks[Jx]}),(Ix||!m0)&&(Rx=m0=1,m0=this.getter(0).length,Rx=m0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Rx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,V={isDevice:!1,contents:G}}else var V={isDevice:!1,url:d};var o0=o.createFile(a,l,V,b,k);V.contents?o0.contents=V.contents:V.url&&(o0.contents=null,o0.url=V.url),Object.defineProperties(o0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[I0,$0]of Object.entries(o0.stream_ops))D0[I0]=(...m0)=>(o.forceLoadFile(o0),$0(...m0));function W0(I0,$0,m0,ix,gx){var Ix=I0.node.contents;if(gx>=Ix.length)return 0;var Rx=Math.min(Ix.length-gx,ix);if(Ix.slice)for(var Gx=0;Gx<Rx;Gx++)$0[m0+Gx]=Ix[gx+Gx];else for(var Gx=0;Gx<Rx;Gx++)$0[m0+Gx]=Ix.get(gx+Gx);return Rx}return D0.read=(I0,$0,m0,ix,gx)=>(o.forceLoadFile(o0),W0(I0,$0,m0,ix,gx)),D0.mmap=(I0,$0,m0,ix,gx)=>{o.forceLoadFile(o0);var Ix=IA($0);if(!Ix)throw new o.ErrnoError(48);return W0(I0,lx,Ix,$0,m0),{ptr:Ix,allocated:!0}},o0.stream_ops=D0,o0}},w0={currentUmask:18,calculateAt(a,l,d){if(c0.isAbs(l))return l;var b;if(a===-100)b=o.cwd();else{var k=w0.getStreamFromFD(a);b=k.path}if(l.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+l},writeStat(a,l){l0[a>>2]=l.dev,l0[a+4>>2]=l.mode,l0[a+8>>2]=l.nlink,l0[a+12>>2]=l.uid,l0[a+16>>2]=l.gid,l0[a+20>>2]=l.rdev,V0[a+24>>3]=BigInt(l.size),R0[a+32>>2]=4096,R0[a+36>>2]=l.blocks;var d=l.atime.getTime(),b=l.mtime.getTime(),k=l.ctime.getTime();return V0[a+40>>3]=BigInt(Math.floor(d/1e3)),l0[a+48>>2]=d%1e3*1e3*1e3,V0[a+56>>3]=BigInt(Math.floor(b/1e3)),l0[a+64>>2]=b%1e3*1e3*1e3,V0[a+72>>3]=BigInt(Math.floor(k/1e3)),l0[a+80>>2]=k%1e3*1e3*1e3,V0[a+88>>3]=BigInt(l.ino),0},writeStatFs(a,l){l0[a+4>>2]=l.bsize,l0[a+60>>2]=l.bsize,V0[a+8>>3]=BigInt(l.blocks),V0[a+16>>3]=BigInt(l.bfree),V0[a+24>>3]=BigInt(l.bavail),V0[a+32>>3]=BigInt(l.files),V0[a+40>>3]=BigInt(l.ffree),l0[a+48>>2]=l.fsid,l0[a+64>>2]=l.flags,l0[a+56>>2]=l.namelen},doMsync(a,l,d,b,k){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=tA.slice(a,a+d);o.msync(l,$,k,d,b)},getStreamFromFD(a){var l=o.getStreamChecked(a);return l},varargs:void 0,getStr(a){var l=hx(a);return l}};function ze(a,l,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(l){case 0:{var k=iA();if(k<0)return-28;for(;o.streams[k];)k++;var $;return $=o.dupStream(b,k),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var k=iA(),G=289792;return b.flags=b.flags&~G|k&G,0}case 12:{var k=NA(),V=0;return z0[k+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(o0){if(typeof o>"u"||o0.name!=="ErrnoError")throw o0;return-o0.errno}}function OA(a,l,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(l){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var k=b.tty.ops.ioctl_tcgets(b),$=NA();R0[$>>2]=k.c_iflag||0,R0[$+4>>2]=k.c_oflag||0,R0[$+8>>2]=k.c_cflag||0,R0[$+12>>2]=k.c_lflag||0;for(var G=0;G<32;G++)lx[$+G+17]=k.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=NA(),V=R0[$>>2],o0=R0[$+4>>2],D0=R0[$+8>>2],W0=R0[$+12>>2],I0=[],G=0;G<32;G++)I0.push(lx[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,l,{c_iflag:V,c_oflag:o0,c_cflag:D0,c_lflag:W0,c_cc:I0})}return 0}case 21519:{if(!b.tty)return-59;var $=NA();return R0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=NA();return o.ioctl(b,l,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=NA();z0[$>>1]=$0[0],z0[$+2>>1]=$0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(m0){if(typeof o>"u"||m0.name!=="ErrnoError")throw m0;return-m0.errno}}function bA(a,l,d,b){w0.varargs=b;try{l=w0.getStr(l),l=w0.calculateAt(a,l);var k=b?iA():0;return d&64&&(k&=~w0.currentUmask),o.open(l,d,k).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var nt=()=>2147483648,ge=(a,l)=>Math.ceil(a/l)*l,ur=a=>{var l=RA.buffer.byteLength,d=(a-l+65535)/65536|0;try{return RA.grow(d),Z(),1}catch{}},Dr=a=>{var l=tA.length;a>>>=0;var d=nt();if(a>d)return!1;for(var b=1;b<=4;b*=2){var k=l*(1+.2/b);k=Math.min(k,a+100663296);var $=Math.min(d,ge(Math.max(a,k),65536)),G=ur($);if(G)return!0}return!1};function it(a){try{var l=w0.getStreamFromFD(a);return o.close(l),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var st=(a,l,d,b)=>{for(var k=0,$=0;$<d;$++){var G=l0[l>>2],V=l0[l+4>>2];l+=8;var o0=o.read(a,lx,G,V,b);if(o0<0)return-1;if(k+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return k};function at(a,l,d,b){try{var k=w0.getStreamFromFD(a),$=st(k,l,d);return l0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var ye=9007199254740992,pr=-9007199254740992,ee=a=>a<pr||a>ye?NaN:Number(a);function ke(a,l,d,b){l=ee(l);try{if(isNaN(l))return 22;var k=w0.getStreamFromFD(a);return o.llseek(k,l,d),V0[b>>3]=BigInt(k.position),k.getdents&&l===0&&d===0&&(k.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var ot=(a,l,d,b)=>{for(var k=0,$=0;$<d;$++){var G=l0[l>>2],V=l0[l+4>>2];l+=8;var o0=o.write(a,lx,G,V,b);if(o0<0)return-1;if(k+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return k};function br(a,l,d,b){try{var k=w0.getStreamFromFD(a),$=ot(k,l,d);return l0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Ft=0,re=()=>je||Ft>0,Ve=a=>{M=a,re()||(n.onExit?.(a),i0=!0),j(a,new rA(a))},mr=(a,l)=>{M=a,re()||f0(),Ve(a)},jr=a=>{if(a instanceof rA||a=="unwind")return M;j(1,a)},vt=(a,l,d)=>He(a,tA,l,d),hr=a=>ne(a),ft=a=>{var l=xe(a)+1,d=hr(l);return vt(a,d,l),d},lt=(...a)=>o.createPath(...a),we=(...a)=>o.unlink(...a),ct=(...a)=>o.createLazyFile(...a),Et=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=tt,o.preloadFile=LA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(he=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(R=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Dx,n.addRunDependency=qx,n.removeRunDependency=Ke,n.FS_preloadFile=LA,n.FS_unlink=we,n.FS_createPath=lt,n.FS_createDevice=Et,n.FS=o,n.FS_createDataFile=Je,n.FS_createLazyFile=ct,n.PROXYFS=k0;var gr,yr,te,kr,ne,We,Nx,Bt,RA;function ie(a){gr=n._main=a.__main_argc_argv,yr=a.__funcs_on_exit,te=a.fflush,kr=a._emscripten_stack_restore,ne=a._emscripten_stack_alloc,We=a.emscripten_stack_get_current,Nx=RA=a.memory,Bt=a.__indirect_function_table}var Xe={__assert_fail:uA,__syscall_fcntl64:ze,__syscall_ioctl:OA,__syscall_openat:bA,emscripten_resize_heap:Dr,fd_close:it,fd_read:at,fd_seek:ke,fd_write:br};function Dx(a=[]){var l=gr;a.unshift(p);var d=a.length,b=hr((d+1)*4),k=b;for(var $ of a)l0[k>>2]=ft($),k+=4;l0[k>>2]=0;try{var G=l(d,b);return mr(G,!0),G}catch(V){return jr(V)}}function _e(a=u){if(Bx>0){b0=_e;return}if(s0(),Bx>0){b0=_e;return}function l(){if(n.calledRun=!0,!i0){U(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Dx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var se;return se=await tx(),_e(),a0?i=n:i=new Promise((a,l)=>{H=a,J=l}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),wo={};xE(wo,{createPawnCC:()=>iE,createPawnDbg:()=>sE});_o.exports=AE(wo);var tE=ko(eE(),1),nE=ko(rE(),1),iE=tE.default,sE=nE.default});var Fr=Sa((Ib,nv)=>{"use strict";var CE=Object.create,wt=Object.defineProperty,dE=Object.getOwnPropertyDescriptor,lF=Object.getOwnPropertyNames,uE=Object.getPrototypeOf,DE=Object.prototype.hasOwnProperty,pE=(x,A,e)=>A in x?wt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,bE=(x,A)=>function(){try{return A||(0,x[lF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},mE=(x,A)=>{for(var e in A)wt(x,e,{get:A[e],enumerable:!0})},cF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of lF(A))!DE.call(x,t)&&t!==e&&wt(x,t,{get:()=>A[t],enumerable:!(r=dE(A,t))||r.enumerable});return x},jE=(x,A,e)=>(e=x!=null?CE(uE(x)):{},cF(A||!x||!x.__esModule?wt(e,"default",{value:x,enumerable:!0}):e,x)),hE=x=>cF(wt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>pE(x,typeof A!="symbol"?A+"":A,e),gE=bE({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i;(function(){function c(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((p0,Y0,X0)=>p0.padStart(2,"0")),E0.join("")}var C=e0=>[e0/1e4|0,(e0/100|0)%100,e0%100].join("."),h=2147483647,P=typeof process<"u"&&process.versions?.node?c(process.versions.node):h;if(P<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(P)})`);var N=typeof navigator<"u"&&navigator.userAgent;if(N){var Q=N.includes("Safari/")&&!N.includes("Chrome/")&&N.match(/Version\/(\d+\.?\d*\.?\d*)/)?c(N.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):h;if(Q<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Q})`);var X=N.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):h;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=N.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):h;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,p=[],j="./this.program",w=(c,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var g="",S,T;if(E){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 q=require("fs");g=__dirname+"/",T=C=>{C=O(C)?new URL(C):C;var h=q.readFileSync(C);return y(Buffer.isBuffer(h)),h},S=async(C,h=!0)=>{C=O(C)?new URL(C):C;var P=q.readFileSync(C,h?void 0:"utf8");return y(h?Buffer.isBuffer(P):typeof P=="string"),P},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),w=(C,h)=>{throw process.exitCode=C,h}}else if(!u)if(F||v){try{g=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?)");v&&(T=c=>{var C=new XMLHttpRequest;return C.open("GET",c,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async c=>{if(O(c))return new Promise((h,P)=>{var N=new XMLHttpRequest;N.open("GET",c,!0),N.responseType="arraybuffer",N.onload=()=>{if(N.status==200||N.status==0&&N.response){h(N.response);return}P(N.status)},N.onerror=P,N.send(null)});var C=await fetch(c,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var L=console.log.bind(console),R=console.error.bind(console);y(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var i0;globalThis.WebAssembly||R("no native wasm support detected");var M=!1;function y(c,C){c||fx("Assertion failed"+(C?": "+C:""))}var O=c=>c.startsWith("file://");function Y(){var c=Ci();y((c&3)==0),c==0&&(c+=4),g0[c>>2]=34821223,g0[c+4>>2]=2310721022,g0[0]=1668509029}function W(){if(!M){var c=Ci();c==0&&(c+=4);var C=g0[c>>2],h=g0[c+4>>2];(C!=34821223||h!=2310721022)&&fx(`Stack overflow! Stack cookie has been overwritten at ${dx(c)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${dx(h)} ${dx(C)}`),g0[0]!=1668509029&&fx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class J extends H{}var a0=!0;(()=>{var c=new Int16Array(1),C=new Int8Array(c.buffer);c[0]=25459,(C[0]!==115||C[1]!==99)&&fx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function t0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,set(){fx(`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 Z(c){return()=>y(!1,`call to '${c}' via reference taken before Wasm module initialization`)}function s0(c){Object.getOwnPropertyDescriptor(n,c)&&fx(`\`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){f0(c)}function f0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,get(){var C=`'${c}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(c)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),fx(C)}})}function B0(c){for(var C=0,h=c.length,P=new Uint8Array(h),N;C<h;++C)N=c.charCodeAt(C),P[C]=~N>>8&N;return P}var d0,T0,L0=!1;function Ex(){var c=Yt.buffer;Yx=new Int8Array(c),TA=new Int16Array(c),n.HEAPU8=hx=new Uint8Array(c),ox=new Uint16Array(c),qA=new Int32Array(c),g0=new Uint32Array(c),dr=new Float32Array(c),je=new Float64Array(c),Cr=new BigInt64Array(c),nA=new BigUint64Array(c)}y(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Xx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)et(n.preRun.shift());t0("preRun"),uA(c0)}function $A(){y(!L0),L0=!0,W(),wr.__wasm_call_ctors()}function PA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)NA(n.postRun.shift());t0("postRun"),uA(iA)}function fx(c){n.onAbort?.(c),c=`Aborted(${c})`,R(c),M=!0;var C=new WebAssembly.RuntimeError(c);throw T0?.(C),C}function tx(){fx("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 rA={init:tx,createDataFile:tx,createPreloadedFile:tx,createLazyFile:tx,open:tx,mkdev:tx,registerDevice:tx,analyzePath:tx,ErrnoError:tx};function z0(c,C){return(...h)=>{y(L0,`native function \`${c}\` called before runtime initialization`);var P=wr[c];return y(P,`exported native function \`${c}\` not found`),y(h.length<=C,`native function \`${c}\` called with ${h.length} args but expects ${C}`),P(...h)}}var R0;function V0(){return B0(`\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~\`
|
|
1526
|
+
\0A\x80\v\vp\0\0D\0\0\0`)}function Ex(a){return a}async function Xx(a){return a}async function TA(a,c){try{var d=await Xx(a),b=await WebAssembly.instantiate(d,c);return b}catch(k){L(`failed to asynchronously prepare wasm: ${k}`),d0(k)}}async function PA(a,c,d){return TA(c,d)}function lx(){var a={env:Ye,wasi_snapshot_preview1:Ye};return a}async function tx(){function a($,G){return ae=$.exports,ie(ae),Z(),ae}function c($){return a($.instance)}var d=lx();if(n.instantiateWasm)return new Promise(($,G)=>{n.instantiateWasm(d,(V,o0)=>{$(a(V,o0))})});P0??(P0=L0());var b=await PA(O,P0,d),k=c(b);return k}class rA{constructor(c){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${c})`,this.status=c}}var V0,O0,W0,cx,et,rt,tt,c0,nt,tA,qA=a=>{for(;a.length>0;)a.shift()(n)},NA=[],dr=a=>NA.push(a),Yx=[],ur=a=>Yx.push(a),je=!1,ox=globalThis.TextDecoder&&new TextDecoder,g0=(a,c,d,b)=>{var k=c+d;if(b)return k;for(;a[c]&&!(c>=k);)++c;return c},nA=(a,c=0,d,b)=>{var k=g0(a,c,d,b);if(k-c>16&&a.buffer&&ox)return ox.decode(a.subarray(c,k));for(var $="";c<k;){var G=a[c++];if(!(G&128)){$+=String.fromCharCode(G);continue}var V=a[c++]&63;if((G&224)==192){$+=String.fromCharCode((G&31)<<6|V);continue}var o0=a[c++]&63;if((G&240)==224?G=(G&15)<<12|V<<6|o0:G=(G&7)<<18|V<<12|o0<<6|a[c++]&63,G<65536)$+=String.fromCharCode(G);else{var D0=G-65536;$+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return $},gx=(a,c,d)=>a?nA(tA,a,c,d):"",DA=(a,c,d,b)=>d0(`Assertion failed: ${gx(a)}, at: `+[c?gx(c):"unknown filename",d,b?gx(b):"unknown function"]),sA=()=>{var a=O0[+w0.varargs>>2];return w0.varargs+=4,a},IA=sA,f0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return c.exec(a).slice(1)},normalizeArray:(a,c)=>{for(var d=0,b=a.length-1;b>=0;b--){var k=a[b];k==="."?a.splice(b,1):k===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(c)for(;d;d--)a.unshift("..");return a},normalize:a=>{var c=f0.isAbs(a),d=a.slice(-1)==="/";return a=f0.normalizeArray(a.split("/").filter(b=>!!b),!c).join("/"),!a&&!c&&(a="."),a&&d&&(a+="/"),(c?"/":"")+a},dirname:a=>{var c=f0.splitPath(a),d=c[0],b=c[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>f0.normalize(a.join("/")),join2:(a,c)=>f0.normalize(a+"/"+c)},st=()=>{if(E){var a=require("crypto");return c=>a.randomFillSync(c)}return c=>(crypto.getRandomValues(c),0)},He=a=>(He=st())(a),dx={resolve:(...a)=>{for(var c="",d=!1,b=a.length-1;b>=-1&&!d;b--){var k=b>=0?a[b]:o.cwd();if(typeof k!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!k)return"";c=k+"/"+c,d=f0.isAbs(k)}return c=f0.normalizeArray(c.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+c||"."},relative:(a,c)=>{a=dx.resolve(a).slice(1),c=dx.resolve(c).slice(1);function d(D0){for(var X0=0;X0<D0.length&&D0[X0]==="";X0++);for(var I0=D0.length-1;I0>=0&&D0[I0]==="";I0--);return X0>I0?[]:D0.slice(X0,I0-X0+1)}for(var b=d(a.split("/")),k=d(c.split("/")),$=Math.min(b.length,k.length),G=$,V=0;V<$;V++)if(b[V]!==k[V]){G=V;break}for(var o0=[],V=G;V<b.length;V++)o0.push("..");return o0=o0.concat(k.slice(G)),o0.join("/")}},Hx=[],Ae=a=>{for(var c=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?c++:b<=2047?c+=2:b>=55296&&b<=57343?(c+=4,++d):c+=3}return c},Je=(a,c,d,b)=>{if(!(b>0))return 0;for(var k=d,$=d+b-1,G=0;G<a.length;++G){var V=a.codePointAt(G);if(V<=127){if(d>=$)break;c[d++]=V}else if(V<=2047){if(d+1>=$)break;c[d++]=192|V>>6,c[d++]=128|V&63}else if(V<=65535){if(d+2>=$)break;c[d++]=224|V>>12,c[d++]=128|V>>6&63,c[d++]=128|V&63}else{if(d+3>=$)break;c[d++]=240|V>>18,c[d++]=128|V>>12&63,c[d++]=128|V>>6&63,c[d++]=128|V&63,G++}}return c[d]=0,d-k},ee=(a,c,d)=>{var b=d>0?d:Ae(a)+1,k=new Array(b),$=Je(a,k,0,k.length);return c&&(k.length=$),k},it=()=>{if(!Hx.length){var a=null;if(E){var c=256,d=Buffer.alloc(c),b=0,k=process.stdin.fd;try{b=P.readSync(k,d,0,c)}catch($){if($.toString().includes("EOF"))b=0;else throw $}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
|
|
1527
|
+
`));if(!a)return null;Hx=ee(a,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(a,c){nx.ttys[a]={input:[],output:[],ops:c},o.registerDevice(a,nx.stream_ops)},stream_ops:{open(a){var c=nx.ttys[a.node.rdev];if(!c)throw new o.ErrnoError(43);a.tty=c,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,c,d,b,k){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,c[d+G]=V}return $&&(a.node.atime=Date.now()),$},write(a,c,d,b,k){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,c[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return it()},put_char(a,c){c===null||c===10?(q(nA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(q(nA(a.output)),a.output=[])},ioctl_tcgets(a){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(a,c,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,c){c===null||c===10?(L(nA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(L(nA(a.output)),a.output=[])}}},MA=a=>{d0()},n0={ops_table:null,mount(a){return n0.createNode(null,"/",16895,0)},createNode(a,c,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var k=o.createNode(a,c,d,b);return o.isDir(k.mode)?(k.node_ops=n0.ops_table.dir.node,k.stream_ops=n0.ops_table.dir.stream,k.contents={}):o.isFile(k.mode)?(k.node_ops=n0.ops_table.file.node,k.stream_ops=n0.ops_table.file.stream,k.usedBytes=0,k.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(k.mode)?(k.node_ops=n0.ops_table.link.node,k.stream_ops=n0.ops_table.link.stream):o.isChrdev(k.mode)&&(k.node_ops=n0.ops_table.chrdev.node,k.stream_ops=n0.ops_table.chrdev.stream),k.atime=k.mtime=k.ctime=Date.now(),a&&(a.contents[c]=k,a.atime=a.mtime=a.ctime=k.atime),k},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,c){var d=a.contents.length;if(!(d>=c)){var b=1024*1024;c=Math.max(c,d*(d<b?2:1.125)>>>0),d&&(c=Math.max(c,256));var k=n0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(c),a.contents.set(k)}},resizeFileStorage(a,c){if(a.usedBytes!=c){var d=a.contents;a.contents=new Uint8Array(c),a.contents.set(d.subarray(0,Math.min(c,a.usedBytes))),a.usedBytes=c}},node_ops:{getattr(a){var c={};return c.dev=o.isChrdev(a.mode)?a.id:1,c.ino=a.id,c.mode=a.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=a.rdev,o.isDir(a.mode)?c.size=4096:o.isFile(a.mode)?c.size=a.usedBytes:o.isLink(a.mode)?c.size=a.link.length:c.size=0,c.atime=new Date(a.atime),c.mtime=new Date(a.mtime),c.ctime=new Date(a.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(a,c){for(let d of["mode","atime","mtime","ctime"])c[d]!=null&&(a[d]=c[d]);c.size!==void 0&&n0.resizeFileStorage(a,c.size)},lookup(a,c){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(a,c,d,b){return n0.createNode(a,c,d,b)},rename(a,c,d){var b;try{b=o.lookupNode(c,d)}catch{}if(b){if(o.isDir(a.mode))for(var k in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],c.contents[d]=a,a.name=d,c.ctime=c.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,c){delete a.contents[c],a.ctime=a.mtime=Date.now()},rmdir(a,c){var d=o.lookupNode(a,c);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[c],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,c,d){var b=n0.createNode(a,c,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,c,d,b,k){var $=a.node.contents;if(k>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-k,b);return c.set($.subarray(k,k+G),d),G},write(a,c,d,b,k,$){if(c.buffer===cx.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=c.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&k===0?(G.contents=c.slice(d,d+b),G.usedBytes=b):(n0.expandFileStorage(G,k+b),G.contents.set(c.subarray(d,d+b),k),G.usedBytes=Math.max(G.usedBytes,k+b)),b},llseek(a,c,d){var b=c;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,c,d,b,k){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,V=a.node.contents;if(!(k&2)&&V.buffer===cx.buffer)G=!1,$=V.byteOffset;else{if(G=!0,$=MA(c),!$)throw new o.ErrnoError(48);V&&((d>0||d+c<V.length)&&(V.subarray?V=V.subarray(d,d+c):V=Array.prototype.slice.call(V,d,d+c)),cx.set(V,$))}return{ptr:$,allocated:G}},msync(a,c,d,b,k){return n0.stream_ops.write(a,c,0,b,d,!1),0}}},LA=a=>{if(typeof a!="string")return a;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=c[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Qx=a=>(typeof a=="string"&&(a=ee(a,!0)),a.subarray||(a=new Uint8Array(a)),a),iA=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},q0={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},k0={mount(a){return k0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,c,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var k=o.createNode(a,c,d);return k.node_ops=k0.node_ops,k.stream_ops=k0.stream_ops,k},realPath(a){for(var c=[];a.parent!==a;)c.push(a.name),a=a.parent;return c.push(a.mount.opts.root),c.reverse(),f0.join(...c)},node_ops:{getattr(a){var c=k0.realPath(a),d;try{d=a.mount.opts.fs.lstat(c)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,c){var d=k0.realPath(a);try{if(c.mode!==void 0&&(a.mount.opts.fs.chmod(d,c.mode),a.mode=c.mode),c.atime||c.mtime){var b=new Date(c.atime||c.mtime),k=new Date(c.mtime||c.atime);a.mount.opts.fs.utime(d,b,k)}c.size!==void 0&&a.mount.opts.fs.truncate(d,c.size)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},lookup(a,c){try{var d=f0.join2(k0.realPath(a),c),b=a.mount.opts.fs.lstat(d).mode,k=k0.createNode(a,c,b);return k}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},mknod(a,c,d,b){var k=k0.createNode(a,c,d,b),$=k0.realPath(k);try{o.isDir(k.mode)?k.mount.opts.fs.mkdir($,k.mode):k.mount.opts.fs.writeFile($,"",{mode:k.mode})}catch(G){throw G.code?new o.ErrnoError(q0[G.code]):G}return k},rename(a,c,d){var b=k0.realPath(a),k=f0.join2(k0.realPath(c),d);try{a.mount.opts.fs.rename(b,k),a.name=d}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},unlink(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readdir(c)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,c,d){var b=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.symlink(d,b)}catch(k){throw k.code?new o.ErrnoError(q0[k.code]):k}},readlink(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readlink(c)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var c=k0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(c,a.flags)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(c){throw c.code?new o.ErrnoError(q0[c.code]):c}},read(a,c,d,b,k){try{return a.node.mount.opts.fs.read(a.nfd,c,d,b,k)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},write(a,c,d,b,k){try{return a.node.mount.opts.fs.write(a.nfd,c,d,b,k)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},llseek(a,c,d){var b=c;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var k=a.node.node_ops.getattr(a.node);b+=k.size}catch($){throw new o.ErrnoError(q0[$.code])}if(b<0)throw new o.ErrnoError(q0.EINVAL);return b}}},pA=async a=>{var c=await h(a);return new Uint8Array(c)},Ke=(...a)=>o.createDataFile(...a),ux=a=>a,Bx=0,b0=null,ze=a=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var c=b0;b0=null,c()}},qx=a=>{Bx++,n.monitorRunDependencies?.(Bx)},he=[],bA=async(a,c)=>{typeof Browser<"u"&&Browser.init();for(var d of he)if(d.canHandle(c))return d.handle(a,c);return a},RA=async(a,c,d,b,k,$,G,V)=>{var o0=c?dx.resolve(f0.join2(a,c)):a,D0=ux(`cp ${o0}`);qx(D0);try{var X0=d;typeof d=="string"&&(X0=await pA(d)),X0=await bA(X0,o0),V?.(),$||Ke(a,c,X0,b,k,G)}finally{ze(D0)}},at=(a,c,d,b,k,$,G,V,o0,D0)=>{RA(a,c,d,b,k,V,o0,D0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){bx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}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(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,c,d,b){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=c,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,c={}){if(!a)throw new o.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),f0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),k=o.root,$="/",G=0;G<b.length;G++){var V=G===b.length-1;if(V&&c.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=f0.dirname($),o.isRoot(k)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else k=k.parent;continue}$=f0.join2($,b[G]);try{k=o.lookupNode(k,b[G])}catch(D0){if(D0?.errno===44&&V&&c.noent_okay)return{path:$};throw D0}if(o.isMountpoint(k)&&(!V||c.follow_mount)&&(k=k.mounted.root),o.isLink(k.mode)&&(!V||c.follow)){if(!k.node_ops.readlink)throw new o.ErrnoError(52);var o0=k.node_ops.readlink(k);f0.isAbs(o0)||(o0=f0.dirname($)+"/"+o0),a=o0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:k}}throw new o.ErrnoError(32)},getPath(a){for(var c;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return c?d[d.length-1]!=="/"?`${d}/${c}`:d+c:d}c=c?`${a.name}/${c}`:a.name,a=a.parent}},hashName(a,c){for(var d=0,b=0;b<c.length;b++)d=(d<<5)-d+c.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var c=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[c],o.nameTable[c]=a},hashRemoveNode(a){var c=o.hashName(a.parent.id,a.name);if(o.nameTable[c]===a)o.nameTable[c]=a.name_next;else for(var d=o.nameTable[c];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,c){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,c),k=o.nameTable[b];k;k=k.name_next){var $=k.name;if(k.parent.id===a.id&&$===c)return k}return o.lookup(a,c)},createNode(a,c,d,b){var k=new o.FSNode(a,c,d,b);return o.hashAddNode(k),k},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var c=["r","w","rw"][a&3];return a&512&&(c+="w"),c},nodePermissions(a,c){return o.ignorePermissions?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var c=o.nodePermissions(a,"x");return c||(a.node_ops.lookup?0:2)},mayCreate(a,c){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,c);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,c,d){var b;try{b=o.lookupNode(a,c)}catch($){return $.errno}var k=o.nodePermissions(a,"wx");if(k)return k;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,c){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(c);return o.isDir(a.mode)&&(d!=="r"||c&576)?31:o.nodePermissions(a,d)},checkOpExists(a,c){if(!a)throw new o.ErrnoError(c);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var c=o.getStream(a);if(!c)throw new o.ErrnoError(8);return c},getStream:a=>o.streams[a],createStream(a,c=-1){return a=Object.assign(new o.FSStream,a),c==-1&&(c=o.nextfd()),a.fd=c,o.streams[c]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,c=-1){var d=o.createStream(a,c);return d.stream_ops?.dup?.(d),d},doSetAttr(a,c,d){var b=a?.stream_ops.setattr,k=b?a:c;b??(b=c.node_ops.setattr),o.checkOpExists(b,63);try{b(k,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var c=o.getDevice(a.node.rdev);a.stream_ops=c.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,c)=>a<<8|c,registerDevice(a,c){o.devices[a]={stream_ops:c}},getDevice:a=>o.devices[a],getMounts(a){for(var c=[],d=[a];d.length;){var b=d.pop();c.push(b),d.push(...b.mounts)}return c},syncfs(a,c){typeof a=="function"&&(c=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function k(V){return o.syncFSRequests--,c(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,k(V));++b>=d.length&&k(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,c,d){var b=d==="/",k=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!k){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:c,mountpoint:d,mounts:[]},o0=a.mount(V);return o0.mount=V,V.root=o0,b?o.root=o0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),o0},unmount(a){var c=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(c.node))throw new o.ErrnoError(28);var d=c.node,b=d.mounted,k=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var V=G.name_next;k.includes(G.mount)&&o.destroyNode(G),G=V}d.mounted=null;var o0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(o0,1)},lookup(a,c){return a.node_ops.lookup(a,c)},mknod(a,c,d){var b=o.lookupPath(a,{parent:!0}),k=b.node,$=f0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(k,$);if(G)throw new o.ErrnoError(G);if(!k.node_ops.mknod)throw new o.ErrnoError(63);return k.node_ops.mknod(k,$,c,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(c,a.node_ops.statfs(a.mount.opts.root)),c},create(a,c=438){return c&=4095,c|=32768,o.mknod(a,c,0)},mkdir(a,c=511){return c&=1023,c|=16384,o.mknod(a,c,0)},mkdirTree(a,c){var d=a.split("/"),b="";for(var k of d)if(k){(b||f0.isAbs(a))&&(b+="/"),b+=k;try{o.mkdir(b,c)}catch($){if($.errno!=20)throw $}}},mkdev(a,c,d){return typeof d>"u"&&(d=c,c=438),c|=8192,o.mknod(a,c,d)},symlink(a,c){if(!dx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(c,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var k=f0.basename(c),$=o.mayCreate(b,k);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,k,a)},rename(a,c){var d=f0.dirname(a),b=f0.dirname(c),k=f0.basename(a),$=f0.basename(c),G,V,o0;if(G=o.lookupPath(a,{parent:!0}),V=G.node,G=o.lookupPath(c,{parent:!0}),o0=G.node,!V||!o0)throw new o.ErrnoError(44);if(V.mount!==o0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,k),X0=dx.relative(a,b);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=dx.relative(c,d),X0.charAt(0)!==".")throw new o.ErrnoError(55);var I0;try{I0=o.lookupNode(o0,$)}catch{}if(D0!==I0){var $0=o.isDir(D0.mode),m0=o.mayDelete(V,k,$0);if(m0)throw new o.ErrnoError(m0);if(m0=I0?o.mayDelete(o0,$,$0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||I0&&o.isMountpoint(I0))throw new o.ErrnoError(10);if(o0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,o0,$),D0.parent=o0}catch(sx){throw sx}finally{o.hashAddNode(D0)}}},rmdir(a){var c=o.lookupPath(a,{parent:!0}),d=c.node,b=f0.basename(a),k=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(k))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(k)},readdir(a){var c=o.lookupPath(a,{follow:!0}),d=c.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var c=o.lookupPath(a,{parent:!0}),d=c.node;if(!d)throw new o.ErrnoError(44);var b=f0.basename(a),k=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(k))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(k)},readlink(a){var c=o.lookupPath(a),d=c.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,c){var d=o.lookupPath(a,{follow:!c}),b=d.node,k=o.checkOpExists(b.node_ops.getattr,63);return k(b)},fstat(a){var c=o.getStreamChecked(a),d=c.node,b=c.stream_ops.getattr,k=b?c:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(k)},lstat(a){return o.stat(a,!0)},doChmod(a,c,d,b){o.doSetAttr(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,c,d){var b;if(typeof a=="string"){var k=o.lookupPath(a,{follow:!d});b=k.node}else b=a;o.doChmod(null,b,c,d)},lchmod(a,c){o.chmod(a,c,!0)},fchmod(a,c){var d=o.getStreamChecked(a);o.doChmod(d,d.node,c,!1)},doChown(a,c,d){o.doSetAttr(a,c,{timestamp:Date.now(),dontFollow:d})},chown(a,c,d,b){var k;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});k=$.node}else k=a;o.doChown(null,k,b)},lchown(a,c,d){o.chown(a,c,d,!0)},fchown(a,c,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,c,d){if(o.isDir(c.mode))throw new o.ErrnoError(31);if(!o.isFile(c.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(c,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,c,{size:d,timestamp:Date.now()})},truncate(a,c){if(c<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,c)},ftruncate(a,c){var d=o.getStreamChecked(a);if(c<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,c)},utime(a,c,d){var b=o.lookupPath(a,{follow:!0}),k=b.node,$=o.checkOpExists(k.node_ops.setattr,63);$(k,{atime:c,mtime:d})},open(a,c,d=438){if(a==="")throw new o.ErrnoError(44);c=LA(c),c&64?d=d&4095|32768:d=0;var b,k;if(typeof a=="object")b=a;else{k=a.endsWith("/");var $=o.lookupPath(a,{follow:!(c&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(c&64)if(b){if(c&128)throw new o.ErrnoError(20)}else{if(k)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(c&=-513),c&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var V=o.mayOpen(b,c);if(V)throw new o.ErrnoError(V)}c&512&&!G&&o.truncate(b,0),c&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:c,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),G&&o.chmod(b,d&511),o0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(c){throw c}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,c,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,c,d),a.ungotten=[],a.position},read(a,c,d,b,k){if(b<0||k<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof k<"u";if(!$)k=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,c,d,b,k);return $||(a.position+=G),G},write(a,c,d,b,k,$){if(b<0||k<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof k<"u";if(!G)k=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,c,d,b,k,$);return G||(a.position+=V),V},mmap(a,c,d,b,k){if((b&2)!==0&&(k&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!c)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,c,d,b,k)},msync(a,c,d,b,k){return a.stream_ops.msync?a.stream_ops.msync(a,c,d,b,k):0},ioctl(a,c,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,c,d)},readFile(a,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&d0(`Invalid encoding type "${c.encoding}"`);var d=o.open(a,c.flags),b=o.stat(a),k=b.size,$=new Uint8Array(k);return o.read(d,$,0,k,0),c.encoding==="utf8"&&($=nA($)),o.close(d),$},writeFile(a,c,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);c=Qx(c),o.write(b,c,0,c.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var c=o.lookupPath(a,{follow:!0});if(c.node===null)throw new o.ErrnoError(44);if(!o.isDir(c.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(c.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=c.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,k,$,G,V)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(He(a),c=a.byteLength),a[--c]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var c=o.createNode(a,"fd",16895,73);return c.stream_ops={llseek:n0.stream_ops.llseek},c.node_ops={lookup(d,b){var k=+b,$=o.getStreamChecked(k),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:k+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(a,c,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),c?o.createDevice("/dev","stdout",null,c):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),k=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:k0}},init(a,c,d){o.initialized=!0,a??(a=n.stdin),c??(c=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,c,d)},quit(){o.initialized=!1,ne(0);for(var a of o.streams)a&&o.close(a)},findObject(a,c){var d=o.analyzePath(a,c);return d.exists?d.object:null},analyzePath(a,c){try{var d=o.lookupPath(a,{follow:!c});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=f0.basename(a),d=o.lookupPath(a,{follow:!c}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(k){b.error=k.errno}return b},createPath(a,c,d,b){a=typeof a=="string"?a:o.getPath(a);for(var k=c.split("/").reverse();k.length;){var $=k.pop();if($){var G=f0.join2(a,$);try{o.mkdir(G)}catch(V){if(V.errno!=20)throw V}a=G}}return G},createFile(a,c,d,b,k){var $=f0.join2(typeof a=="string"?a:o.getPath(a),c),G=iA(b,k);return o.create($,G)},createDataFile(a,c,d,b,k,$){var G=c;a&&(a=typeof a=="string"?a:o.getPath(a),G=c?f0.join2(a,c):a);var V=iA(b,k),o0=o.create(G,V);if(d){d=Qx(d),o.chmod(o0,V|146);var D0=o.open(o0,577);o.write(D0,d,0,d.length,0,$),o.close(D0),o.chmod(o0,V)}},createDevice(a,c,d,b){var k,$=f0.join2(typeof a=="string"?a:o.getPath(a),c),G=iA(!!d,!!b);(k=o.createDevice).major??(k.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(o0){o0.seekable=!1},close(o0){b?.buffer?.length&&b(10)},read(o0,D0,X0,I0,$0){for(var m0=0,sx=0;sx<I0;sx++){var yx;try{yx=d()}catch{throw new o.ErrnoError(29)}if(yx===void 0&&m0===0)throw new o.ErrnoError(6);if(yx==null)break;m0++,D0[X0+sx]=yx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,D0,X0,I0,$0){for(var m0=0;m0<I0;m0++)try{b(D0[X0+m0])}catch{throw new o.ErrnoError(29)}return I0&&(o0.node.mtime=o0.node.ctime=Date.now()),m0}}),o.mkdev($,G,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)d0("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{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,c,d,b,k){class ${constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var m0=$0%this.chunkSize,sx=$0/this.chunkSize|0;return this.getter(sx)[m0]}}setDataGetter($0){this.getter=$0}cacheLength(){var $0=new XMLHttpRequest;$0.open("HEAD",d,!1),$0.send(null),$0.status>=200&&$0.status<300||$0.status===304||d0("Couldn't load "+d+". Status: "+$0.status);var m0=Number($0.getResponseHeader("Content-length")),sx,yx=(sx=$0.getResponseHeader("Accept-Ranges"))&&sx==="bytes",Ix=(sx=$0.getResponseHeader("Content-Encoding"))&&sx==="gzip",Ox=1024*1024;yx||(Ox=m0);var Gx=(Jx,jA)=>{Jx>jA&&d0("invalid range ("+Jx+", "+jA+") or no bytes requested!"),jA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var fx=new XMLHttpRequest;return fx.open("GET",d,!1),m0!==Ox&&fx.setRequestHeader("Range","bytes="+Jx+"-"+jA),fx.responseType="arraybuffer",fx.overrideMimeType&&fx.overrideMimeType("text/plain; charset=x-user-defined"),fx.send(null),fx.status>=200&&fx.status<300||fx.status===304||d0("Couldn't load "+d+". Status: "+fx.status),fx.response!==void 0?new Uint8Array(fx.response||[]):ee(fx.responseText||"",!0)},oe=this;oe.setDataGetter(Jx=>{var jA=Jx*Ox,fx=(Jx+1)*Ox-1;return fx=Math.min(fx,m0-1),typeof oe.chunks[Jx]>"u"&&(oe.chunks[Jx]=Gx(jA,fx)),typeof oe.chunks[Jx]>"u"&&d0("doXHR failed!"),oe.chunks[Jx]}),(Ix||!m0)&&(Ox=m0=1,m0=this.getter(0).length,Ox=m0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Ox,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,V={isDevice:!1,contents:G}}else var V={isDevice:!1,url:d};var o0=o.createFile(a,c,V,b,k);V.contents?o0.contents=V.contents:V.url&&(o0.contents=null,o0.url=V.url),Object.defineProperties(o0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[I0,$0]of Object.entries(o0.stream_ops))D0[I0]=(...m0)=>(o.forceLoadFile(o0),$0(...m0));function X0(I0,$0,m0,sx,yx){var Ix=I0.node.contents;if(yx>=Ix.length)return 0;var Ox=Math.min(Ix.length-yx,sx);if(Ix.slice)for(var Gx=0;Gx<Ox;Gx++)$0[m0+Gx]=Ix[yx+Gx];else for(var Gx=0;Gx<Ox;Gx++)$0[m0+Gx]=Ix.get(yx+Gx);return Ox}return D0.read=(I0,$0,m0,sx,yx)=>(o.forceLoadFile(o0),X0(I0,$0,m0,sx,yx)),D0.mmap=(I0,$0,m0,sx,yx)=>{o.forceLoadFile(o0);var Ix=MA($0);if(!Ix)throw new o.ErrnoError(48);return X0(I0,cx,Ix,$0,m0),{ptr:Ix,allocated:!0}},o0.stream_ops=D0,o0}},w0={currentUmask:18,calculateAt(a,c,d){if(f0.isAbs(c))return c;var b;if(a===-100)b=o.cwd();else{var k=w0.getStreamFromFD(a);b=k.path}if(c.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+c},writeStat(a,c){c0[a>>2]=c.dev,c0[a+4>>2]=c.mode,c0[a+8>>2]=c.nlink,c0[a+12>>2]=c.uid,c0[a+16>>2]=c.gid,c0[a+20>>2]=c.rdev,W0[a+24>>3]=BigInt(c.size),O0[a+32>>2]=4096,O0[a+36>>2]=c.blocks;var d=c.atime.getTime(),b=c.mtime.getTime(),k=c.ctime.getTime();return W0[a+40>>3]=BigInt(Math.floor(d/1e3)),c0[a+48>>2]=d%1e3*1e3*1e3,W0[a+56>>3]=BigInt(Math.floor(b/1e3)),c0[a+64>>2]=b%1e3*1e3*1e3,W0[a+72>>3]=BigInt(Math.floor(k/1e3)),c0[a+80>>2]=k%1e3*1e3*1e3,W0[a+88>>3]=BigInt(c.ino),0},writeStatFs(a,c){c0[a+4>>2]=c.bsize,c0[a+60>>2]=c.bsize,W0[a+8>>3]=BigInt(c.blocks),W0[a+16>>3]=BigInt(c.bfree),W0[a+24>>3]=BigInt(c.bavail),W0[a+32>>3]=BigInt(c.files),W0[a+40>>3]=BigInt(c.ffree),c0[a+48>>2]=c.fsid,c0[a+64>>2]=c.flags,c0[a+56>>2]=c.namelen},doMsync(a,c,d,b,k){if(!o.isFile(c.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=tA.slice(a,a+d);o.msync(c,$,k,d,b)},getStreamFromFD(a){var c=o.getStreamChecked(a);return c},varargs:void 0,getStr(a){var c=gx(a);return c}};function Ve(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 0:{var k=sA();if(k<0)return-28;for(;o.streams[k];)k++;var $;return $=o.dupStream(b,k),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var k=sA(),G=289792;return b.flags=b.flags&~G|k&G,0}case 12:{var k=IA(),V=0;return V0[k+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(o0){if(typeof o>"u"||o0.name!=="ErrnoError")throw o0;return-o0.errno}}function OA(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var k=b.tty.ops.ioctl_tcgets(b),$=IA();O0[$>>2]=k.c_iflag||0,O0[$+4>>2]=k.c_oflag||0,O0[$+8>>2]=k.c_cflag||0,O0[$+12>>2]=k.c_lflag||0;for(var G=0;G<32;G++)cx[$+G+17]=k.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=IA(),V=O0[$>>2],o0=O0[$+4>>2],D0=O0[$+8>>2],X0=O0[$+12>>2],I0=[],G=0;G<32;G++)I0.push(cx[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,c,{c_iflag:V,c_oflag:o0,c_cflag:D0,c_lflag:X0,c_cc:I0})}return 0}case 21519:{if(!b.tty)return-59;var $=IA();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=IA();return o.ioctl(b,c,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=IA();V0[$>>1]=$0[0],V0[$+2>>1]=$0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(m0){if(typeof o>"u"||m0.name!=="ErrnoError")throw m0;return-m0.errno}}function mA(a,c,d,b){w0.varargs=b;try{c=w0.getStr(c),c=w0.calculateAt(a,c);var k=b?sA():0;return d&64&&(k&=~w0.currentUmask),o.open(c,d,k).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var ot=()=>2147483648,ge=(a,c)=>Math.ceil(a/c)*c,Dr=a=>{var c=GA.buffer.byteLength,d=(a-c+65535)/65536|0;try{return GA.grow(d),Z(),1}catch{}},pr=a=>{var c=tA.length;a>>>=0;var d=ot();if(a>d)return!1;for(var b=1;b<=4;b*=2){var k=c*(1+.2/b);k=Math.min(k,a+100663296);var $=Math.min(d,ge(Math.max(a,k),65536)),G=Dr($);if(G)return!0}return!1};function Ft(a){try{var c=w0.getStreamFromFD(a);return o.close(c),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var vt=(a,c,d,b)=>{for(var k=0,$=0;$<d;$++){var G=c0[c>>2],V=c0[c+4>>2];c+=8;var o0=o.read(a,cx,G,V,b);if(o0<0)return-1;if(k+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return k};function lt(a,c,d,b){try{var k=w0.getStreamFromFD(a),$=vt(k,c,d);return c0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var ye=9007199254740992,br=-9007199254740992,re=a=>a<br||a>ye?NaN:Number(a);function ke(a,c,d,b){c=re(c);try{if(isNaN(c))return 22;var k=w0.getStreamFromFD(a);return o.llseek(k,c,d),W0[b>>3]=BigInt(k.position),k.getdents&&c===0&&d===0&&(k.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var ct=(a,c,d,b)=>{for(var k=0,$=0;$<d;$++){var G=c0[c>>2],V=c0[c+4>>2];c+=8;var o0=o.write(a,cx,G,V,b);if(o0<0)return-1;if(k+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return k};function mr(a,c,d,b){try{var k=w0.getStreamFromFD(a),$=ct(k,c,d);return c0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var ft=0,te=()=>je||ft>0,We=a=>{M=a,te()||(n.onExit?.(a),s0=!0),j(a,new rA(a))},jr=(a,c)=>{M=a,te()||l0(),We(a)},hr=a=>{if(a instanceof rA||a=="unwind")return M;j(1,a)},Et=(a,c,d)=>Je(a,tA,c,d),gr=a=>se(a),Bt=a=>{var c=Ae(a)+1,d=gr(c);return Et(a,d,c),d},Ct=(...a)=>o.createPath(...a),we=(...a)=>o.unlink(...a),dt=(...a)=>o.createLazyFile(...a),ut=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=at,o.preloadFile=RA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(he=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Dx,n.addRunDependency=qx,n.removeRunDependency=ze,n.FS_preloadFile=RA,n.FS_unlink=we,n.FS_createPath=Ct,n.FS_createDevice=ut,n.FS=o,n.FS_createDataFile=Ke,n.FS_createLazyFile=dt,n.PROXYFS=k0;var yr,kr,ne,wr,se,Xe,Nx,Dt,GA;function ie(a){yr=n._main=a.__main_argc_argv,kr=a.__funcs_on_exit,ne=a.fflush,wr=a._emscripten_stack_restore,se=a._emscripten_stack_alloc,Xe=a.emscripten_stack_get_current,Nx=GA=a.memory,Dt=a.__indirect_function_table}var Ye={__assert_fail:DA,__syscall_fcntl64:Ve,__syscall_ioctl:OA,__syscall_openat:mA,emscripten_resize_heap:pr,fd_close:Ft,fd_read:lt,fd_seek:ke,fd_write:mr};function Dx(a=[]){var c=yr;a.unshift(D);var d=a.length,b=gr((d+1)*4),k=b;for(var $ of a)c0[k>>2]=Bt($),k+=4;c0[k>>2]=0;try{var G=c(d,b);return jr(G,!0),G}catch(V){return hr(V)}}function _e(a=u){if(Bx>0){b0=_e;return}if(i0(),Bx>0){b0=_e;return}function c(){if(n.calledRun=!0,!s0){U(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Dx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c()}var ae;return ae=await tx(),_e(),a0?s=n:s=new Promise((a,c)=>{H=a,J=c}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),Uo={};gE(Uo,{createPawnCC:()=>$E,createPawnDbg:()=>TE});Ho.exports=yE(Uo);var _E=Go(kE(),1),SE=Go(wE(),1),$E=_E.default,TE=SE.default});var Ie=Ja((qm,uv)=>{"use strict";var UE=Object.create,Tt=Object.defineProperty,HE=Object.getOwnPropertyDescriptor,yF=Object.getOwnPropertyNames,JE=Object.getPrototypeOf,KE=Object.prototype.hasOwnProperty,zE=(x,A,e)=>A in x?Tt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,VE=(x,A)=>function(){try{return A||(0,x[yF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},WE=(x,A)=>{for(var e in A)Tt(x,e,{get:A[e],enumerable:!0})},kF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of yF(A))!KE.call(x,t)&&t!==e&&Tt(x,t,{get:()=>A[t],enumerable:!(r=HE(A,t))||r.enumerable});return x},XE=(x,A,e)=>(e=x!=null?UE(JE(x)):{},kF(A||!x||!x.__esModule?Tt(e,"default",{value:x,enumerable:!0}):e,x)),YE=x=>kF(Tt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>zE(x,typeof A!="symbol"?A+"":A,e),QE=VE({"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 f(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((p0,Z0,Y0)=>p0.padStart(2,"0")),E0.join("")}var C=e0=>[e0/1e4|0,(e0/100|0)%100,e0%100].join("."),g=2147483647,T=typeof process<"u"&&process.versions?.node?f(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var N=typeof navigator<"u"&&navigator.userAgent;if(N){var Q=N.includes("Safari/")&&!N.includes("Chrome/")&&N.match(/Version\/(\d+\.?\d*\.?\d*)/)?f(N.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):g;if(Q<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Q})`);var X=N.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=N.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,D=[],j="./this.program",w=(f,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var h="",S,P;if(E){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 q=require("fs");h=__dirname+"/",P=C=>{C=R(C)?new URL(C):C;var g=q.readFileSync(C);return y(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=R(C)?new URL(C):C;var T=q.readFileSync(C,g?void 0:"utf8");return y(g?Buffer.isBuffer(T):typeof T=="string"),T},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),w=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{h=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?)");v&&(P=f=>{var C=new XMLHttpRequest;return C.open("GET",f,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async f=>{if(R(f))return new Promise((g,T)=>{var N=new XMLHttpRequest;N.open("GET",f,!0),N.responseType="arraybuffer",N.onload=()=>{if(N.status==200||N.status==0&&N.response){g(N.response);return}T(N.status)},N.onerror=T,N.send(null)});var C=await fetch(f,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var L=console.log.bind(console),O=console.error.bind(console);y(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var s0;globalThis.WebAssembly||O("no native wasm support detected");var M=!1;function y(f,C){f||lx("Assertion failed"+(C?": "+C:""))}var R=f=>f.startsWith("file://");function Y(){var f=ms();y((f&3)==0),f==0&&(f+=4),g0[f>>2]=34821223,g0[f+4>>2]=2310721022,g0[0]=1668509029}function W(){if(!M){var f=ms();f==0&&(f+=4);var C=g0[f>>2],g=g0[f+4>>2];(C!=34821223||g!=2310721022)&&lx(`Stack overflow! Stack cookie has been overwritten at ${dx(f)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${dx(g)} ${dx(C)}`),g0[0]!=1668509029&&lx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class J extends H{}var a0=!0;(()=>{var f=new Int16Array(1),C=new Int8Array(f.buffer);f[0]=25459,(C[0]!==115||C[1]!==99)&&lx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function t0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,set(){lx(`Attempt to set \`Module.${f}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(f){return()=>y(!1,`call to '${f}' via reference taken before Wasm module initialization`)}function i0(f){Object.getOwnPropertyDescriptor(n,f)&&lx(`\`Module.${f}\` was supplied but \`${f}\` not included in INCOMING_MODULE_JS_API`)}function U(f){return f==="FS_createPath"||f==="FS_createDataFile"||f==="FS_createPreloadedFile"||f==="FS_preloadFile"||f==="FS_unlink"||f==="addRunDependency"||f==="FS_createLazyFile"||f==="FS_createDevice"||f==="removeRunDependency"}function v0(f){l0(f)}function l0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,get(){var C=`'${f}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(f)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),lx(C)}})}function B0(f){for(var C=0,g=f.length,T=new Uint8Array(g),N;C<g;++C)N=f.charCodeAt(C),T[C]=~N>>8&N;return T}var d0,P0,L0=!1;function Ex(){var f=en.buffer;Yx=new Int8Array(f),qA=new Int16Array(f),n.HEAPU8=gx=new Uint8Array(f),ox=new Uint16Array(f),NA=new Int32Array(f),g0=new Uint32Array(f),ur=new Float32Array(f),je=new Float64Array(f),dr=new BigInt64Array(f),nA=new BigUint64Array(f)}y(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Xx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)st(n.preRun.shift());t0("preRun"),DA(f0)}function TA(){y(!L0),L0=!0,W(),_r.__wasm_call_ctors()}function PA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)IA(n.postRun.shift());t0("postRun"),DA(sA)}function lx(f){n.onAbort?.(f),f=`Aborted(${f})`,O(f),M=!0;var C=new WebAssembly.RuntimeError(f);throw P0?.(C),C}function tx(){lx("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 rA={init:tx,createDataFile:tx,createPreloadedFile:tx,createLazyFile:tx,open:tx,mkdev:tx,registerDevice:tx,analyzePath:tx,ErrnoError:tx};function V0(f,C){return(...g)=>{y(L0,`native function \`${f}\` called before runtime initialization`);var T=_r[f];return y(T,`exported native function \`${f}\` not found`),y(g.length<=C,`native function \`${f}\` called with ${g.length} args but expects ${C}`),T(...g)}}var O0;function W0(){return B0(`\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~\`
|
|
1528
1528
|
\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
|
|
1529
1529
|
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
|
|
1530
1530
|
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
|
|
@@ -2172,51 +2172,51 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
|
|
|
2172
2172
|
\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
|
|
2173
2173
|
\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
|
|
2174
2174
|
\0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
|
|
2175
|
-
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
|
|
2175
|
+
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 cx(f){return f}async function et(f){return f}async function rt(f,C){try{var g=await et(f),T=await WebAssembly.instantiate(g,C);return T}catch(N){O(`failed to asynchronously prepare wasm: ${N}`),R(f)&&O(`warning: Loading from a file URI (${f}) 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`),lx(N)}}async function tt(f,C,g){return rt(C,g)}function c0(){var f={env:Ra,wasi_snapshot_preview1:Ra};return f}async function nt(){function f(X,x0){return _r=X.exports,Zc(_r),Ex(),_r}var C=n;function g(X){return y(n===C,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),C=null,f(X.instance)}var T=c0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(T,(e0,E0)=>{X(f(e0,E0))})}catch(e0){O(`Module.instantiateWasm callback failed with error: ${e0}`),x0(e0)}});O0??(O0=W0());var N=await tt(s0,O0,T),Q=g(N);return Q}class tA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var qA,NA,dr,Yx,ur,je,ox,g0,nA,gx,DA=f=>{for(;f.length>0;)f.shift()(n)},sA=[],IA=f=>sA.push(f),f0=[],st=f=>f0.push(f),He=!0;function dx(f){return y(typeof f=="number",`ptrToString expects a number, got ${typeof f}`),f>>>=0,"0x"+f.toString(16).padStart(8,"0")}var Hx=f=>{Hx.shown||(Hx.shown={}),Hx.shown[f]||(Hx.shown[f]=1,E&&(f="warning: "+f),O(f))};class Ae{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){g0[this.ptr+4>>2]=C}get_type(){return g0[this.ptr+4>>2]}set_destructor(C){g0[this.ptr+8>>2]=C}get_destructor(){return g0[this.ptr+8>>2]}set_caught(C){C=C?1:0,Yx[this.ptr+12]=C}get_caught(){return Yx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,Yx[this.ptr+13]=C}get_rethrown(){return Yx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){g0[this.ptr+16>>2]=C}get_adjusted_ptr(){return g0[this.ptr+16>>2]}}var Je=0,ee=(f,C,g)=>{var T=new Ae(f);T.init(C,g),Je++,y(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},it=()=>lx("native code called abort()"),nx={},MA=f=>{for(;f.length;){var C=f.pop(),g=f.pop();g(C)}};function n0(f){return this.fromWireType(g0[f>>2])}var LA={},Qx={},iA={},q0=class extends Error{constructor(C){super(C),this.name="InternalError"}},k0=f=>{throw new q0(f)},pA=(f,C,g)=>{f.forEach(x0=>iA[x0]=C);function T(x0){var e0=g(x0);e0.length!==f.length&&k0("Mismatched type converter count");for(var E0=0;E0<f.length;++E0)qx(f[E0],e0[E0])}var N=new Array(C.length),Q=[],X=0;for(let[x0,e0]of C.entries())Qx.hasOwnProperty(e0)?N[x0]=Qx[e0]:(Q.push(e0),LA.hasOwnProperty(e0)||(LA[e0]=[]),LA[e0].push(()=>{N[x0]=Qx[e0],++X,X===Q.length&&T(N)}));Q.length===0&&T(N)},Ke=f=>{var C=nx[f];delete nx[f];var g=C.rawConstructor,T=C.rawDestructor,N=C.fields,Q=N.map(X=>X.getterReturnType).concat(N.map(X=>X.setterArgumentType));pA([f],Q,X=>{var x0={};for(var[e0,E0]of N.entries()){let p0=X[e0],Z0=E0.getter,Y0=E0.getterContext,Ax=X[e0+N.length],Mx=E0.setter,wx=E0.setterContext;x0[E0.fieldName]={read:oA=>p0.fromWireType(Z0(Y0,oA)),write:(oA,UA)=>{var hA=[];Mx(wx,oA,Ax.toWireType(hA,UA)),MA(hA)},optional:p0.optional}}return[{name:C.name,fromWireType:p0=>{var Z0={};for(var Y0 in x0)Z0[Y0]=x0[Y0].read(p0);return T(p0),Z0},toWireType:(p0,Z0)=>{for(var Y0 in x0)if(!(Y0 in Z0)&&!x0[Y0].optional)throw new TypeError(`Missing field: "${Y0}"`);var Ax=g();for(Y0 in x0)x0[Y0].write(Ax,Z0[Y0]);return p0!==null&&p0.push(T,Ax),Ax},readValueFromPointer:n0,destructorFunction:T}]})},ux=f=>{for(var C="";;){var g=gx[f++];if(!g)return C;C+=String.fromCharCode(g)}},Bx=class extends Error{constructor(C){super(C),this.name="BindingError"}},b0=f=>{throw new Bx(f)};function ze(f,C,g={}){var T=C.name;if(f||b0(`type "${T}" must have a positive integer typeid pointer`),Qx.hasOwnProperty(f)){if(g.ignoreDuplicateRegistrations)return;b0(`Cannot register type '${T}' twice`)}if(Qx[f]=C,delete iA[f],LA.hasOwnProperty(f)){var N=LA[f];delete LA[f],N.forEach(Q=>Q())}}function qx(f,C,g={}){return ze(f,C,g)}var he=(f,C,g)=>{switch(C){case 1:return g?T=>Yx[T]:T=>gx[T];case 2:return g?T=>qA[T>>1]:T=>ox[T>>1];case 4:return g?T=>NA[T>>2]:T=>g0[T>>2];case 8:return g?T=>dr[T>>3]:T=>nA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${f}`)}},bA=f=>{if(f===null)return"null";var C=typeof f;return C==="object"||C==="array"||C==="function"?f.toString():""+f},RA=(f,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${bA(C)}" from JS side to C/C++ side to an argument of type "${f}", which is outside the valid range [${g}, ${T}]!`)},at=(f,C,g,T,N)=>{C=ux(C);let Q=T===0n,X=x0=>x0;if(Q){let x0=g*8;X=e0=>BigInt.asUintN(x0,e0),N=X(N)}qx(f,{name:C,fromWireType:X,toWireType:(x0,e0)=>{if(typeof e0=="number")e0=BigInt(e0);else if(typeof e0!="bigint")throw new TypeError(`Cannot convert "${bA(e0)}" to ${C}`);return RA(C,e0,T,N),e0},readValueFromPointer:he(C,g,!Q),destructorFunction:null})},o=(f,C,g,T)=>{C=ux(C),qx(f,{name:C,fromWireType:function(N){return!!N},toWireType:function(N,Q){return Q?g:T},readValueFromPointer:function(N){return this.fromWireType(gx[N])},destructorFunction:null})},w0=f=>({count:f.count,deleteScheduled:f.deleteScheduled,preservePointerOnDelete:f.preservePointerOnDelete,ptr:f.ptr,ptrType:f.ptrType,smartPtr:f.smartPtr,smartPtrType:f.smartPtrType}),Ve=f=>{function C(g){return g.$$.ptrType.registeredClass.name}b0(C(f)+" instance already deleted")},OA=!1,mA=f=>{},ot=f=>{f.smartPtr?f.smartPtrType.rawDestructor(f.smartPtr):f.ptrType.registeredClass.rawDestructor(f.ptr)},ge=f=>{f.count.value-=1;var C=f.count.value===0;C&&ot(f)},Dr=(f,C,g)=>{if(C===g)return f;if(g.baseClass===void 0)return null;var T=Dr(f,C,g.baseClass);return T===null?null:g.downcast(T)},pr={},Ft={},vt=(f,C)=>{for(C===void 0&&b0("ptr should not be undefined");f.baseClass;)C=f.upcast(C),f=f.baseClass;return C},lt=(f,C)=>(C=vt(f,C),Ft[C]),ye=(f,C)=>{(!C.ptrType||!C.ptr)&&k0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&k0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},re(Object.create(f,{$$:{value:C,writable:!0}}))};function br(f){var C=this.getPointee(f);if(!C)return this.destructor(f),null;var g=lt(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=f,g.clone();var T=g.clone();return this.destructor(f),T}function N(){return this.isSmartPointer?ye(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:f}):ye(this.registeredClass.instancePrototype,{ptrType:this,ptr:f})}var Q=this.registeredClass.getActualType(C),X=pr[Q];if(!X)return N.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var e0=Dr(C,this.registeredClass,x0.registeredClass);return e0===null?N.call(this):this.isSmartPointer?ye(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0,smartPtrType:this,smartPtr:f}):ye(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0})}var re=f=>globalThis.FinalizationRegistry?(OA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),ge(C.$$)}),re=C=>{var g=C.$$,T=!!g.smartPtr;if(T){var N={$$:g},Q=g.ptrType.registeredClass,X=new Error(`Embind found a leaked C++ instance ${Q.name} <${dx(g.ptr)}>.
|
|
2176
2176
|
We'll free it automatically in this case, but this functionality is not reliable across various environments.
|
|
2177
2177
|
Make sure to invoke .delete() manually once you're done with the instance instead.
|
|
2178
|
-
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,
|
|
2178
|
+
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,br),N.leakWarning=X.stack.replace(/^Error: /,""),OA.register(C,N,C)}return C},mA=C=>OA.unregister(C),re(f)):(re=C=>C,f),ke=[],ct=()=>{for(;ke.length;){var f=ke.pop();f.$$.deleteScheduled=!1,f.delete()}},mr,ft=()=>{let f=te.prototype;Object.assign(f,{isAliasOf(g){if(!(this instanceof te)||!(g instanceof te))return!1;var T=this.$$.ptrType.registeredClass,N=this.$$.ptr;g.$$=g.$$;for(var Q=g.$$.ptrType.registeredClass,X=g.$$.ptr;T.baseClass;)N=T.upcast(N),T=T.baseClass;for(;Q.baseClass;)X=Q.upcast(X),Q=Q.baseClass;return T===Q&&N===X},clone(){if(this.$$.ptr||Ve(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=re(Object.create(Object.getPrototypeOf(this),{$$:{value:w0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||Ve(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),mA(this),ge(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Ve(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),ke.push(this),ke.length===1&&mr&&mr(ct),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(f[C]=f.delete)};function te(){}var We=(f,C)=>Object.defineProperty(C,"name",{value:f}),jr=(f,C,g)=>{if(f[C].overloadTable===void 0){var T=f[C];f[C]=function(...N){return f[C].overloadTable.hasOwnProperty(N.length)||b0(`Function '${g}' called with an invalid number of arguments (${N.length}) - expects one of (${f[C].overloadTable})!`),f[C].overloadTable[N.length].apply(this,N)},f[C].overloadTable=[],f[C].overloadTable[T.argCount]=T}},hr=(f,C,g)=>{n.hasOwnProperty(f)?((g===void 0||n[f].overloadTable!==void 0&&n[f].overloadTable[g]!==void 0)&&b0(`Cannot register public name '${f}' twice`),jr(n,f,f),n[f].overloadTable.hasOwnProperty(g)&&b0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[f].overloadTable[g]=C):(n[f]=C,n[f].argCount=g)},Et=48,gr=57,Bt=f=>{y(typeof f=="string"),f=f.replace(/[^a-zA-Z0-9_]/g,"$");var C=f.charCodeAt(0);return C>=Et&&C<=gr?`_${f}`:f};function Ct(f,C,g,T,N,Q,X,x0){this.name=f,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=N,this.getActualType=Q,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var we=(f,C,g)=>{for(;C!==g;)C.upcast||b0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),f=C.upcast(f),C=C.baseClass;return f};function dt(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${bA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=we(C.$$.ptr,g,this.registeredClass);return T}function ut(f,C){var g;if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),f!==null&&f.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&b0(`Cannot pass "${bA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);var T=C.$$.ptrType.registeredClass;if(g=we(C.$$.ptr,T,this.registeredClass),this.isSmartPointer)switch(C.$$.smartPtr===void 0&&b0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:C.$$.smartPtrType===this?g=C.$$.smartPtr:b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=C.$$.smartPtr;break;case 2:if(C.$$.smartPtrType===this)g=C.$$.smartPtr;else{var N=C.clone();g=this.rawShare(g,D0.toHandle(()=>N.delete())),f!==null&&f.push(this.rawDestructor,g)}break;default:b0("Unsupported sharing policy")}return g}function yr(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${bA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.ptrType.name} to parameter type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=we(C.$$.ptr,g,this.registeredClass);return T}var kr=()=>{Object.assign(ne.prototype,{getPointee(f){return this.rawGetPointee&&(f=this.rawGetPointee(f)),f},destructor(f){this.rawDestructor?.(f)},readValueFromPointer:n0,fromWireType:br})};function ne(f,C,g,T,N,Q,X,x0,e0,E0,p0){this.name=f,this.registeredClass=C,this.isReference=g,this.isConst=T,this.isSmartPointer=N,this.pointeeType=Q,this.sharingPolicy=X,this.rawGetPointee=x0,this.rawConstructor=e0,this.rawShare=E0,this.rawDestructor=p0,!N&&C.baseClass===void 0?T?(this.toWireType=dt,this.destructorFunction=null):(this.toWireType=yr,this.destructorFunction=null):this.toWireType=ut}var wr=(f,C,g)=>{n.hasOwnProperty(f)||k0("Replacing nonexistent public symbol"),n[f].overloadTable!==void 0&&g!==void 0?n[f].overloadTable[g]=C:(n[f]=C,n[f].argCount=g)},se=[],Xe=f=>{var C=se[f];return C||(se[f]=C=Ar.get(f)),y(Ar.get(f)==C,"table mirror is out of date"),C},Nx=(f,C,g=!1)=>{y(!g,"async bindings are only supported with JSPI"),f=ux(f);function T(){var Q=Xe(C);return Q}var N=T();return typeof N!="function"&&b0(`unknown function pointer with signature ${f}: ${C}`),N};class Dt extends Error{}var GA=f=>{var C=Ia(f),g=ux(C);return Fe(C),g},ie=(f,C)=>{var g=[],T={};function N(Q){if(!T[Q]&&!Qx[Q]){if(iA[Q]){iA[Q].forEach(N);return}g.push(Q),T[Q]=!0}}throw C.forEach(N),new Dt(`${f}: `+g.map(GA).join([", "]))},Ye=(f,C,g,T,N,Q,X,x0,e0,E0,p0,Z0,Y0)=>{p0=ux(p0),Q=Nx(N,Q),x0&&(x0=Nx(X,x0)),E0&&(E0=Nx(e0,E0)),Y0=Nx(Z0,Y0);var Ax=Bt(p0);hr(Ax,function(){ie(`Cannot construct ${p0} due to unbound types`,[T])}),pA([f,C,g],T?[T]:[],Mx=>{var wx;Mx=Mx[0];var oA,UA;T?(oA=Mx.registeredClass,UA=oA.instancePrototype):UA=te.prototype;var hA=We(p0,function(...js){if(Object.getPrototypeOf(this)!==Sr)throw new Bx(`Use 'new' to construct ${p0}`);if(HA.constructor_body===void 0)throw new Bx(`${p0} has no accessible constructor`);var Ha=HA.constructor_body[js.length];if(Ha===void 0)throw new Bx(`Tried to invoke ctor of ${p0} with invalid number of parameters (${js.length}) - expected (${Object.keys(HA.constructor_body).toString()}) parameters instead!`);return Ha.apply(this,js)}),Sr=Object.create(UA,{constructor:{value:hA}});hA.prototype=Sr;var HA=new Ct(p0,hA,Sr,Y0,oA,Q,x0,E0);HA.baseClass&&((wx=HA.baseClass).__derivedClasses??(wx.__derivedClasses=[]),HA.baseClass.__derivedClasses.push(HA));var ef=new ne(p0,HA,!0,!1,!1),Ga=new ne(p0+"*",HA,!1,!1,!1),Ua=new ne(p0+" const*",HA,!1,!0,!1);return pr[f]={pointerType:Ga,constPointerType:Ua},wr(Ax,hA),[ef,Ga,Ua]})},Dx=(f,C)=>{for(var g=[],T=0;T<f;T++)g.push(g0[C+T*4>>2]);return g};function _e(f){for(var C=1;C<f.length;++C)if(f[C]!==null&&f[C].destructorFunction===void 0)return!0;return!1}function ae(f,C,g,T,N){if(f<C||f>g){var Q=C==g?C:`${C} to ${g}`;N(`function ${T} called with ${f} arguments, expected ${Q}`)}}function a(f,C,g,T){var N=_e(f),Q=f.length-2,X=[],x0=["fn"];C&&x0.push("thisWired");for(var e0=0;e0<Q;++e0)X.push(`arg${e0}`),x0.push(`arg${e0}Wired`);X=X.join(","),x0=x0.join(",");var E0=`return function (${X}) {
|
|
2179
2179
|
`;E0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
|
|
2180
2180
|
`,N&&(E0+=`var destructors = [];
|
|
2181
|
-
`);var p0=N?"destructors":"null",
|
|
2182
|
-
`);for(var e0=0;e0<Q;++e0){var
|
|
2183
|
-
`,
|
|
2181
|
+
`);var p0=N?"destructors":"null",Z0=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];C&&(E0+=`var thisWired = toClassParamWire(${p0}, this);
|
|
2182
|
+
`);for(var e0=0;e0<Q;++e0){var Y0=`toArg${e0}Wire`;E0+=`var arg${e0}Wired = ${Y0}(${p0}, arg${e0});
|
|
2183
|
+
`,Z0.push(Y0)}if(E0+=(g||T?"var rv = ":"")+`invoker(${x0});
|
|
2184
2184
|
`,N)E0+=`runDestructors(destructors);
|
|
2185
|
-
`;else for(var e0=C?1:2;e0<
|
|
2186
|
-
`,
|
|
2185
|
+
`;else for(var e0=C?1:2;e0<f.length;++e0){var Ax=e0===1?"thisWired":"arg"+(e0-2)+"Wired";f[e0].destructorFunction!==null&&(E0+=`${Ax}_dtor(${Ax});
|
|
2186
|
+
`,Z0.push(`${Ax}_dtor`))}return g&&(E0+=`var ret = fromRetWire(rv);
|
|
2187
2187
|
return ret;
|
|
2188
2188
|
`),E0+=`}
|
|
2189
|
-
`,
|
|
2190
|
-
${E0}`,new Function(
|
|
2189
|
+
`,Z0.push("checkArgCount","minArgs","maxArgs"),E0=`if (arguments.length !== ${Z0.length}){ throw new Error(humanName + "Expected ${Z0.length} closure arguments " + arguments.length + " given."); }
|
|
2190
|
+
${E0}`,new Function(Z0,E0)}function c(f){for(var C=f.length-2,g=f.length-1;g>=2&&f[g].optional;--g)C--;return C}function d(f,C,g,T,N,Q){var X=C.length;X<2&&b0("argTypes array size mismatch! Must at least get return value and 'this' types!"),y(!Q,"async bindings are only supported with JSPI");for(var x0=C[1]!==null&&g!==null,e0=_e(C),E0=!C[0].isVoid,p0=X-2,Z0=c(C),Y0=C[0],Ax=C[1],Mx=[f,b0,T,N,MA,Y0.fromWireType.bind(Y0),Ax?.toWireType.bind(Ax)],wx=2;wx<X;++wx){var oA=C[wx];Mx.push(oA.toWireType.bind(oA))}if(!e0)for(var wx=x0?1:2;wx<C.length;++wx)C[wx].destructorFunction!==null&&Mx.push(C[wx].destructorFunction);Mx.push(ae,Z0,p0);var hA=a(C,x0,E0,Q)(...Mx);return We(f,hA)}var b=(f,C,g,T,N,Q)=>{y(C>0);var X=Dx(C,g);N=Nx(T,N),pA([],[f],x0=>{x0=x0[0];var e0=`constructor ${x0.name}`;if(x0.registeredClass.constructor_body===void 0&&(x0.registeredClass.constructor_body=[]),x0.registeredClass.constructor_body[C-1]!==void 0)throw new Bx(`Cannot register multiple constructors with identical number of parameters (${C-1}) for class '${x0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return x0.registeredClass.constructor_body[C-1]=()=>{ie(`Cannot construct ${x0.name} due to unbound types`,X)},pA([],X,E0=>(E0.splice(1,0,null),x0.registeredClass.constructor_body[C-1]=d(e0,E0,null,N,Q),[])),[]})},k=(f,C,g)=>(f instanceof Object||b0(`${g} with invalid "this": ${f}`),f instanceof C.registeredClass.constructor||b0(`${g} incompatible with "this" of type ${f.constructor.name}`),f.$$.ptr||b0(`cannot call emscripten binding method ${g} on deleted object`),we(f.$$.ptr,f.$$.ptrType.registeredClass,C.registeredClass)),$=(f,C,g,T,N,Q,X,x0,e0,E0)=>{C=ux(C),N=Nx(T,N),pA([],[f],p0=>{p0=p0[0];var Z0=`${p0.name}.${C}`,Y0={get(){ie(`Cannot access ${Z0} due to unbound types`,[g,X])},enumerable:!0,configurable:!0};return e0?Y0.set=()=>ie(`Cannot access ${Z0} due to unbound types`,[g,X]):Y0.set=Ax=>b0(Z0+" is a read-only property"),Object.defineProperty(p0.registeredClass.instancePrototype,C,Y0),pA([],e0?[g,X]:[g],Ax=>{var Mx=Ax[0],wx={get(){var UA=k(this,p0,Z0+" getter");return Mx.fromWireType(N(Q,UA))},enumerable:!0};if(e0){e0=Nx(x0,e0);var oA=Ax[1];wx.set=function(UA){var hA=k(this,p0,Z0+" setter"),Sr=[];e0(E0,hA,oA.toWireType(Sr,UA)),MA(Sr)}}return Object.defineProperty(p0.registeredClass.instancePrototype,C,wx),[]}),[]})},G=[],V=[0,1,,1,null,1,!0,1,!1,1],o0=f=>{if(f>9&&--V[f+1]===0){y(V[f]!==void 0,"decref for unallocated handle");var C=V[f];V[f]=void 0,G.push(f)}},D0={toValue:f=>(f||b0(`Cannot use deleted val. handle = ${f}`),y(f===2||V[f]!==void 0&&f%2===0,`invalid handle: ${f}`),V[f]),toHandle:f=>{switch(f){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=G.pop()||V.length;return V[C]=f,V[C+1]=1,C}}}},X0={name:"emscripten::val",fromWireType:f=>{var C=D0.toValue(f);return o0(f),C},toWireType:(f,C)=>D0.toHandle(C),readValueFromPointer:n0,destructorFunction:null},I0=f=>qx(f,X0),$0=(f,C)=>{switch(C){case 4:return function(g){return this.fromWireType(ur[g>>2])};case 8:return function(g){return this.fromWireType(je[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${f}`)}},m0=(f,C,g)=>{C=ux(C),qx(f,{name:C,fromWireType:T=>T,toWireType:(T,N)=>{if(typeof N!="number"&&typeof N!="boolean")throw new TypeError(`Cannot convert ${bA(N)} to ${C}`);return N},readValueFromPointer:$0(C,g),destructorFunction:null})},sx=f=>{f=f.trim();let C=f.indexOf("(");return C===-1?f:(y(f.endsWith(")"),"Parentheses for argument names should match."),f.slice(0,C))},yx=(f,C,g,T,N,Q,X,x0)=>{var e0=Dx(C,g);f=ux(f),f=sx(f),N=Nx(T,N,X),hr(f,function(){ie(`Cannot call ${f} due to unbound types`,e0)},C-1),pA([],e0,E0=>{var p0=[E0[0],null].concat(E0.slice(1));return wr(f,d(f,p0,null,N,Q,X),C-1),[]})},Ix=(f,C,g,T,N)=>{C=ux(C);let Q=T===0,X=e0=>e0;if(Q){var x0=32-8*g;X=e0=>e0<<x0>>>x0,N=X(N)}qx(f,{name:C,fromWireType:X,toWireType:(e0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${bA(E0)}" to ${C}`);return RA(C,E0,T,N),E0},readValueFromPointer:he(C,g,T!==0),destructorFunction:null})},Ox=(f,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],N=T[C];function Q(X){var x0=g0[X>>2],e0=g0[X+4>>2];return new N(Yx.buffer,e0,x0)}g=ux(g),qx(f,{name:g,fromWireType:Q,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},Gx=(f,C,g,T)=>{if(y(typeof f=="string",`stringToUTF8Array expects a string (got ${typeof f})`),!(T>0))return 0;for(var N=g,Q=g+T-1,X=0;X<f.length;++X){var x0=f.codePointAt(X);if(x0<=127){if(g>=Q)break;C[g++]=x0}else if(x0<=2047){if(g+1>=Q)break;C[g++]=192|x0>>6,C[g++]=128|x0&63}else if(x0<=65535){if(g+2>=Q)break;C[g++]=224|x0>>12,C[g++]=128|x0>>6&63,C[g++]=128|x0&63}else{if(g+3>=Q)break;x0>1114111&&Hx(`Invalid Unicode code point ${dx(x0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),C[g++]=240|x0>>18,C[g++]=128|x0>>12&63,C[g++]=128|x0>>6&63,C[g++]=128|x0&63,X++}}return C[g]=0,g-N},oe=(f,C,g)=>(y(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Gx(f,gx,C,g)),Jx=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},jA=globalThis.TextDecoder&&new TextDecoder,fx=(f,C,g,T)=>{var N=C+g;if(T)return N;for(;f[C]&&!(C>=N);)++C;return C},Zt=(f,C=0,g,T)=>{var N=fx(f,C,g,T);if(N-C>16&&f.buffer&&jA)return jA.decode(f.subarray(C,N));for(var Q="";C<N;){var X=f[C++];if(!(X&128)){Q+=String.fromCharCode(X);continue}var x0=f[C++]&63;if((X&224)==192){Q+=String.fromCharCode((X&31)<<6|x0);continue}var e0=f[C++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|e0:((X&248)!=240&&Hx(`Invalid UTF-8 leading byte ${dx(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|e0<<6|f[C++]&63),X<65536)Q+=String.fromCharCode(X);else{var E0=X-65536;Q+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Q},fs=(f,C,g)=>(y(typeof f=="number",`UTF8ToString expects a number (got ${typeof f})`),f?Zt(gx,f,C,g):""),Es=(f,C)=>{C=ux(C);var g=!0;qx(f,{name:C,fromWireType(T){var N=g0[T>>2],Q=T+4,X;if(g)X=fs(Q,N,!0);else{X="";for(var x0=0;x0<N;++x0)X+=String.fromCharCode(gx[Q+x0])}return Fe(T),X},toWireType(T,N){N instanceof ArrayBuffer&&(N=new Uint8Array(N));var Q,X=typeof N=="string";X||ArrayBuffer.isView(N)&&N.BYTES_PER_ELEMENT==1||b0("Cannot pass non-string to std::string"),g&&X?Q=Jx(N):Q=N.length;var x0=bs(4+Q+1),e0=x0+4;if(g0[x0>>2]=Q,X)if(g)oe(N,e0,Q+1);else for(var E0=0;E0<Q;++E0){var p0=N.charCodeAt(E0);p0>255&&(Fe(x0),b0("String has UTF-16 code units that do not fit in 8 bits")),gx[e0+E0]=p0}else gx.set(N,e0);return T!==null&&T.push(Fe,x0),x0},readValueFromPointer:n0,destructorFunction(T){Fe(T)}})},xn=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Bs=(f,C,g)=>{y(f%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=f>>1,N=fx(ox,T,C/2,g);if(N-T>16&&xn)return xn.decode(ox.subarray(T,N));for(var Q="",X=T;X<N;++X){var x0=ox[X];Q+=String.fromCharCode(x0)}return Q},Cs=(f,C,g)=>{if(y(C%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),y(typeof g=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<2)return 0;g-=2;for(var T=C,N=g<f.length*2?g/2:f.length,Q=0;Q<N;++Q){var X=f.charCodeAt(Q);qA[C>>1]=X,C+=2}return qA[C>>1]=0,C-T},An=f=>f.length*2,pt=(f,C,g)=>{y(f%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",N=f>>2,Q=0;!(Q>=C/4);Q++){var X=g0[N+Q];if(!X&&!g)break;T+=String.fromCodePoint(X)}return T},Qe=(f,C,g)=>{if(y(C%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),y(typeof g=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<4)return 0;for(var T=C,N=T+g-4,Q=0;Q<f.length;++Q){var X=f.codePointAt(Q);if(X>65535&&Q++,NA[C>>2]=X,C+=4,C+4>N)break}return NA[C>>2]=0,C-T},i=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.codePointAt(g);T>65535&&g++,C+=4}return C},l=(f,C,g)=>{g=ux(g);var T,N,Q;C===2?(T=Bs,N=Cs,Q=An):(y(C===4,"only 2-byte and 4-byte strings are currently supported"),T=pt,N=Qe,Q=i),qx(f,{name:g,fromWireType:X=>{var x0=g0[X>>2],e0=T(X+4,x0*C,!0);return Fe(X),e0},toWireType:(X,x0)=>{typeof x0!="string"&&b0(`Cannot pass non-string to C++ string type ${g}`);var e0=Q(x0),E0=bs(4+e0+C);return g0[E0>>2]=e0/C,N(x0,E0+4,e0+C),X!==null&&X.push(Fe,E0),E0},readValueFromPointer:n0,destructorFunction(X){Fe(X)}})},B=(f,C,g,T,N,Q)=>{nx[f]={name:ux(C),rawConstructor:Nx(g,T),rawDestructor:Nx(N,Q),fields:[]}},p=(f,C,g,T,N,Q,X,x0,e0,E0)=>{nx[f].fields.push({fieldName:ux(C),getterReturnType:g,getter:Nx(T,N),getterContext:Q,setterArgumentType:X,setter:Nx(x0,e0),setterContext:E0})},m=(f,C)=>{C=ux(C),qx(f,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},_=[],I=f=>{var C=_.length;return _.push(f),C},z=(f,C)=>{var g=Qx[f];return g===void 0&&b0(`${C} has unknown type ${GA(f)}`),g},F0=(f,C)=>{for(var g=new Array(f),T=0;T<f;++T)g[T]=z(g0[C+T*4>>2],`parameter ${T}`);return g},_0=(f,C,g)=>{var T=[],N=f(T,g);return T.length&&(g0[C>>2]=D0.toHandle(T)),N},xx={},R0=f=>{var C=xx[f];return C===void 0?ux(f):C},N0=(f,C,g)=>{var T=8,[N,...Q]=F0(f,C),X=N.toWireType.bind(N),x0=Q.map(Ax=>Ax.readValueFromPointer.bind(Ax));f--;var e0={toValue:D0.toValue},E0=x0.map((Ax,Mx)=>{var wx=`argFromPtr${Mx}`;return e0[wx]=Ax,`${wx}(args${Mx?"+"+Mx*T:""})`}),p0;switch(g){case 0:p0="toValue(handle)";break;case 2:p0="new (toValue(handle))";break;case 3:p0="";break;case 1:e0.getStringOrSymbol=R0,p0="toValue(handle)[getStringOrSymbol(methodName)]";break}p0+=`(${E0})`,N.isVoid||(e0.toReturnWire=X,e0.emval_returnValue=_0,p0=`return emval_returnValue(toReturnWire, destructorsRef, ${p0})`),p0=`return function (handle, methodName, destructorsRef, args) {
|
|
2191
2191
|
${p0}
|
|
2192
|
-
}`;var Y0=new Function(Object.keys(e0),p0)(...Object.values(e0)),X0=`methodCaller<(${Q.map(Z0=>Z0.name)}) => ${N.name}>`;return I(Ve(X0,Y0))},j0=c=>(c=O0(c),D0.toHandle(n[c])),Cx=(c,C)=>(c=D0.toValue(c),C=D0.toValue(C),D0.toHandle(c[C])),Sx=c=>{c>9&&(V[c+1]+=1)},Kx=(c,C,h,P,N)=>_[c](C,h,P,N),Zx=c=>D0.toHandle(O0(c)),xA=c=>{var C=D0.toValue(c);IA(C),o0(c)},Qe=()=>2147483648,aA=(c,C)=>(y(C,"alignment argument is required"),Math.ceil(c/C)*C),Se=c=>{var C=Yt.buffer.byteLength,h=(c-C+65535)/65536|0;try{return Yt.grow(h),Ex(),1}catch(P){R(`growMemory: Attempted to grow heap from ${C} bytes to ${c} bytes, but got error: ${P}`)}},yx=c=>{var C=hx.length;c>>>=0,y(c>C);var h=Qe();if(c>h)return R(`Cannot enlarge memory, requested ${c} bytes, but the limit is ${h} bytes!`),!1;for(var P=1;P<=4;P*=2){var N=C*(1+.2/P);N=Math.min(N,c+100663296);var Q=Math.min(h,aA(Math.max(c,N),65536)),X=Se(Q);if(X)return!0}return R(`Failed to grow the heap from ${C} bytes to ${Q} bytes, not enough memory!`),!1},Uf=c=>{fx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Hf=9007199254740992,Jf=-9007199254740992,Kf=c=>c<Jf||c>Hf?NaN:Number(c);function zf(c,C,h,P){return C=Kf(C),70}var fi=[null,[],[]],li=(c,C)=>{var h=fi[c];y(h),C===0||C===10?((c===1?L:R)(Vt(h)),h.length=0):h.push(C)},H6=()=>{ja(0),fi[1].length&&li(1,10),fi[2].length&&li(2,10)},Vf=(c,C,h,P)=>{for(var N=0,Q=0;Q<h;Q++){var X=g0[C>>2],x0=g0[C+4>>2];C+=8;for(var e0=0;e0<x0;e0++)li(c,hx[X+e0]);N+=x0}return g0[P>>2]=N,0},Wf=()=>{if(E){var c=require("crypto");return C=>c.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},Da=c=>(Da=Wf())(c),Xf=(c,C)=>Da(hx.subarray(c,c+C)),Yf=(c,C)=>{if(Ze)for(var h=c;h<c+C;h++){var P=We(h);P&&Ze.set(P,h)}},Ze,Qf=c=>(Ze||(Ze=new WeakMap,Yf(0,xr.length)),Ze.get(c)||0),ci=[],Zf=()=>{if(ci.length)return ci.pop();try{return xr.grow(1)}catch(c){if(!(c instanceof RangeError))throw c;fx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Ei=(c,C)=>{xr.set(c,C),ne[c]=xr.get(c)},pa=c=>{let C=c.length;return y(C<16384),[C%128|128,C>>7,...c]},xl={i:127,p:127,j:126,f:125,d:124,e:111},ba=c=>pa(Array.from(c,C=>{var h=xl[C];return y(h,`invalid signature char: ${C}`),h})),Al=(c,C)=>{var h=Uint8Array.of(0,97,115,109,1,0,0,0,1,...pa([1,96,...ba(C.slice(1)),...ba(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),P=new WebAssembly.Module(h),N=new WebAssembly.Instance(P,{e:{f:c}}),Q=N.exports.f;return Q},el=(c,C)=>{y(typeof c<"u");var h=Qf(c);if(h)return h;var P=Zf();try{Ei(P,c)}catch(Q){if(!(Q instanceof TypeError))throw Q;y(typeof C<"u","Missing signature argument to addFunction: "+c);var N=Al(c,C);Ei(P,N)}return Ze.set(c,P),P},rl=c=>{Ze.delete(We(c)),Ei(c,null),ci.push(c)};Ft(),yr(),y(V.length===10);{if(n.noExitRuntime&&(Ue=n.noExitRuntime),n.print&&(L=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(i0=n.wasmBinary),n.FS_createDataFile=rA.createDataFile,n.FS_createPreloadedFile=rA.createPreloadedFile,il(),n.arguments&&(p=n.arguments),n.thisProgram&&(j=n.thisProgram),y(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),y(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),y(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),y(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),y(typeof n.read>"u","Module.read option was removed"),y(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),y(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),y(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),y(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),y(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),y(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),y(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),y(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();t0("preInit")}n.addFunction=el,n.removeFunction=rl;var tl=["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"];tl.forEach(v0);var nl=["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"];nl.forEach(f0);function il(){s0("fetchSettings"),s0("logReadFiles"),s0("loadSplitModule"),s0("onMalloc"),s0("onRealloc"),s0("onFree"),s0("onSbrkGrow")}var ma=Z("___getTypeName"),Bi=Z("_malloc"),oe=Z("_free"),sl=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),al=n._MdnCom_Free=Z("_MdnCom_Free"),ol=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),Fl=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),vl=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),fl=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),ll=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),cl=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),El=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),Bl=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),Cl=n._MdnCom_Init=Z("_MdnCom_Init"),dl=n._SendUtoQuery=Z("_SendUtoQuery"),ul=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),ja=Z("_fflush"),Ci=Z("_emscripten_stack_get_end"),Dl=Z("_emscripten_stack_get_base"),pl=Z("_strerror"),ha=Z("_emscripten_stack_init"),bl=Z("_emscripten_stack_get_free"),ml=Z("__emscripten_stack_restore"),jl=Z("__emscripten_stack_alloc"),hl=Z("_emscripten_stack_get_current"),gl=Z("memory"),yl=Z("__indirect_function_table"),Yt=Z("wasmMemory"),xr=Z("wasmTable");function kl(c){y(typeof c.__getTypeName<"u","missing Wasm export: __getTypeName"),y(typeof c.malloc<"u","missing Wasm export: malloc"),y(typeof c.free<"u","missing Wasm export: free"),y(typeof c.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),y(typeof c.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),y(typeof c.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),y(typeof c.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),y(typeof c.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),y(typeof c.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),y(typeof c.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),y(typeof c.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),y(typeof c.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),y(typeof c.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),y(typeof c.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),y(typeof c.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),y(typeof c.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),y(typeof c.fflush<"u","missing Wasm export: fflush"),y(typeof c.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),y(typeof c.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),y(typeof c.strerror<"u","missing Wasm export: strerror"),y(typeof c.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),y(typeof c.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),y(typeof c._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),y(typeof c._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),y(typeof c.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),y(typeof c.memory<"u","missing Wasm export: memory"),y(typeof c.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),ma=z0("__getTypeName",1),Bi=z0("malloc",1),oe=z0("free",1),sl=n._MdnCom_ESCHandler=z0("MdnCom_ESCHandler",1),al=n._MdnCom_Free=z0("MdnCom_Free",1),ol=n._MdnCom_RawRx=z0("MdnCom_RawRx",1),Fl=n._MdnCom_CryptoSelfTest=z0("MdnCom_CryptoSelfTest",0),vl=n._MdnCom_SetCompanionKeypair=z0("MdnCom_SetCompanionKeypair",2),fl=n._MdnCom_InitiateEcsHandshake=z0("MdnCom_InitiateEcsHandshake",0),ll=n._MdnCom_SetSecDebug=z0("MdnCom_SetSecDebug",1),cl=n._MdnCom_GetEcsState=z0("MdnCom_GetEcsState",0),El=n._MdnCom_ResetEcs=z0("MdnCom_ResetEcs",0),Bl=n._MdnCom_RegisterEcsHandshakeCallback=z0("MdnCom_RegisterEcsHandshakeCallback",1),Cl=n._MdnCom_Init=z0("MdnCom_Init",2),dl=n._SendUtoQuery=z0("SendUtoQuery",2),ul=n._SendUtoCmdExt=z0("SendUtoCmdExt",4),ja=z0("fflush",1),Ci=c.emscripten_stack_get_end,Dl=c.emscripten_stack_get_base,pl=z0("strerror",1),ha=c.emscripten_stack_init,bl=c.emscripten_stack_get_free,ml=c._emscripten_stack_restore,jl=c._emscripten_stack_alloc,hl=c.emscripten_stack_get_current,gl=Yt=c.memory,yl=xr=c.__indirect_function_table}var ga={__cxa_throw:Ae,_abort_js:rt,_embind_finalize_value_object:Je,_embind_register_bigint:tt,_embind_register_bool:o,_embind_register_class:Xe,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:I0,_embind_register_float:m0,_embind_register_function:gx,_embind_register_integer:Ix,_embind_register_memory_view:Rx,_embind_register_std_string:oi,_embind_register_std_wstring:f,_embind_register_value_object:B,_embind_register_value_object_field:D,_embind_register_void:m,_emval_create_invoker:N0,_emval_decref:o0,_emval_get_module_property:j0,_emval_get_property:Cx,_emval_incref:Sx,_emval_invoke:Kx,_emval_new_cstring:Zx,_emval_run_destructors:xA,emscripten_resize_heap:yx,fd_close:Uf,fd_seek:zf,fd_write:Vf,random_get:Xf},ya;function wl(){ha(),Y()}function _l(){wl(),Xx();function c(){y(!ya),ya=!0,n.calledRun=!0,!M&&($A(),d0?.(n),n.onRuntimeInitialized?.(),t0("onRuntimeInitialized"),y(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),PA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c(),W()}var wr;wr=await At(),_l(),L0?i=n:i=new Promise((c,C)=>{d0=c,T0=C});for(let c of Object.keys(n))c in t||Object.defineProperty(t,c,{configurable:!0,get(){fx(`Access to module property ('${c}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),EF={};mE(EF,{API_STAMP_UNBOUNDED:()=>VF,AT_COMMANDS:()=>wx,AT_COMMAND_TIMEOUT_MS:()=>zx,ApiBadRequestError:()=>S0,ApiForbiddenError:()=>$n,ApiMethodNotAllowedError:()=>Ts,ApiNotFoundError:()=>lA,AtCommandHandler:()=>XC,AtDeviceError:()=>Ps,AtHandlerDisposedError:()=>Ux,BACKFILL_PENDING_HEADER:()=>H8,BACKFILL_PENDING_VALUE:()=>J8,BLE_CONFIGURATION:()=>dd,BLE_SCAN_TIMEOUT_MS:()=>Dd,COMPANION_AUTH_ERROR_I18N_KEYS:()=>ZC,COMPANION_CERT_PATH:()=>Qi,COMPANION_PRIVATE_KEY_SIZE:()=>hF,COMPANION_PUBLIC_KEY_SIZE:()=>jF,CertApiError:()=>ht,CompanionAuthErrorKind:()=>m8,CompanionAuthManager:()=>QC,CompanionCertError:()=>p8,DDE_FIELD_UNUSED_INDEX:()=>JF,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>kF,DEFAULT_RECONNECT_OPTIONS:()=>$8,DLO_FILENAME:()=>Ur,DdeMapper:()=>$C,DdeUnknownAliasError:()=>bs,DdeUnknownContainerError:()=>Ne,DdeUnknownFieldError:()=>Ss,DdeWriteForbiddenError:()=>kt,DebugLogLevel:()=>GF,DebugMaster:()=>uB,DebugSync:()=>C8,DeviceManager:()=>Bd,DeviceState:()=>S8,FW_FILENAME:()=>Cs,LIC_API_BASE_URL:()=>l8,LOCAL_API_LIFECYCLE_FLAGS:()=>ar,LOCAL_API_SITE_MASK:()=>vs,LOCAL_API_SITE_MASTER_KEYS:()=>Tt,LegacySync:()=>E8,LocalDataManager:()=>y8,MANUFACTURER_CODE:()=>ud,MS_1999_12_31:()=>Zi,MemoryStorage:()=>pB,Mutex:()=>us,OfflineSyncManager:()=>RC,RAW_TERMINAL_PATTERN:()=>u8,RESPONSE_PATTERNS:()=>J0,Rm2mStateManager:()=>ld,SYNC_LOGIC_MASK:()=>IF,SyncManager:()=>VC,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>d8,USB_CONFIGURATION:()=>Cd,UplinkMode:()=>LF,UtoCommand:()=>_F,UtoESC:()=>MF,UtoFileFlag:()=>qF,UtoFileFlagInt:()=>NF,UtoFileType:()=>PF,UtoFlag:()=>TF,UtoMaster:()=>RF,UtoResult:()=>SF,UtoSplitTag:()=>$F,UtoTag:()=>ds,WebSocketBridge:()=>$s,applyBlueprintNames:()=>v8,applyDecpl:()=>QB,assertValidRequestStamps:()=>zr,base64ToBytes:()=>Yi,base64UrlToBytes:()=>QE,buildBlueprintNameMap:()=>as,bytesToBase64:()=>un,bytesToBase64Url:()=>cs,checkDeviceCapabilities:()=>rd,computeDisplayValue:()=>g8,computeDisplayValues:()=>Fs,consoleLogger:()=>YA,convertToString:()=>xs,crc16Modbus:()=>tB,crc32Ethernet:()=>Bs,createDebugBufferState:()=>D8,createLocalApiHandler:()=>_u,createLocalApiSession:()=>Ns,createSiteInfoFromDde:()=>Mu,dbStampToStamp40:()=>XA,decodeContainer:()=>ns,decodeFloatm16:()=>r8,decodeLifecycleFlags:()=>N8,decodeRm2mStateResponse:()=>_8,decodeUplinkState:()=>k8,deriveDeviceLifecycleMirror:()=>I8,encodeContainer:()=>ss,encodeFloatm16:()=>t8,encodeLifecycleFlags:()=>Ms,encodeNulPaddedJson:()=>T8,encodeSerialNumber:()=>nB,extractBits:()=>mn,formatApiStamp:()=>Hr,generateCompanionKeypair:()=>Xi,getDeviceAssignment:()=>c8,isCertValid:()=>Es,isDevicePushableTag:()=>KF,isUnusedField:()=>Ee,isValidStamp:()=>qs,mapLocalApiError:()=>tv,nullLogger:()=>Dn,parseApiStamp:()=>Kr,parseBlueprint:()=>TC,parseDde:()=>VB,parseMetadataResponse:()=>j8,parseNulPaddedJson:()=>Pt,parseRm2mStateParams:()=>w8,parseSerialNumberFromDataView:()=>iB,parseValuesResponse:()=>h8,requestCompanionCert:()=>wF,resolveAuthErrorKind:()=>xd,resolveBlueprintNameMap:()=>$t,resolveContainerTag:()=>bn,resolveTagForContainer:()=>mt,resolveTagInModel:()=>jB,routeLocalApiRequest:()=>ev,spreadBits:()=>XF,stamp40ToDbHex:()=>fA,syncLogic:()=>pn,systemTimeSource:()=>St,toHex:()=>qe,toUint8Array:()=>As,utoStack:()=>K0});nv.exports=hE(EF);var BF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:Bn,n:cn,Gx:Uo,Gy:Ho,a:Pi,d:Ti,h:yE}=BF,jt=32,kE=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Px=(x="")=>{let A=new Error(x);throw kE(A,Px),A},wE=x=>typeof x=="bigint",_E=x=>typeof x=="string",SE=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,or=(x,A,e="")=>{let r=SE(x),t=x?.length,i=A!==void 0;if(!r||i&&t!==A){let n=e&&`"${e}" `,F=i?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},wn=x=>new Uint8Array(x),fs=x=>Uint8Array.from(x),CF=(x,A)=>x.toString(16).padStart(A,"0"),dF=x=>Array.from(or(x)).map(A=>CF(A,2)).join(""),ce={_0:48,_9:57,A:65,F:70,a:97,f:102},Jo=x=>{if(x>=ce._0&&x<=ce._9)return x-ce._0;if(x>=ce.A&&x<=ce.F)return x-(ce.A-10);if(x>=ce.a&&x<=ce.f)return x-(ce.a-10)},uF=x=>{let A="hex invalid";if(!_E(x))return Px(A);let e=x.length,r=e/2;if(e%2)return Px(A);let t=wn(r);for(let i=0,n=0;i<r;i++,n+=2){let F=Jo(x.charCodeAt(n)),v=Jo(x.charCodeAt(n+1));if(F===void 0||v===void 0)return Px(A);t[i]=F*16+v}return t},DF=()=>globalThis?.crypto,$E=()=>DF()?.subtle??Px("crypto.subtle must be defined, consider polyfill"),pF=(...x)=>{let A=0;for(let t of x)A+=or(t).length;let e=wn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},PE=(x=jt)=>DF().getRandomValues(wn(x)),Cn=BigInt,rr=(x,A,e,r="bad number: out of range")=>{if(!wE(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},ax=(x,A=Bn)=>{let e=x%A;return e>=0n?e:A+e},Ko=(1n<<255n)-1n,C0=x=>{x<0n&&Px("negative coordinate");let A=(x>>255n)*19n+(x&Ko);return A=(A>>255n)*19n+(A&Ko),A%Bn},TE=x=>ax(x,cn),qE=(x,A)=>{(x===0n||A<=0n)&&Px("no inverse n="+x+" mod="+A);let e=ax(x,A),r=A,t=0n,i=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,p=i-F*v;r=e,e=E,t=n,i=F,n=u,F=p}return r===1n?ax(t,A):Px("no inverse")},NE=x=>{let A=KE[x];return typeof A!="function"&&Px("hashes."+x+" not set"),A},IE=x=>or(x,64,"digest"),qi=x=>x instanceof _t?x:Px("Point expected"),Vi=2n**256n,ls=class tr{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let i=Vi;this.X=rr(A,0n,i),this.Y=rr(e,0n,i),this.Z=rr(r,1n,i),this.T=rr(t,0n,i),Object.freeze(this)}static CURVE(){return BF}static fromAffine(A){return new tr(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=Ti,t=fs(or(A,jt)),i=A[31];t[31]=i&-129;let n=bF(t);rr(n,0n,e?Vi:Bn);let v=C0(n*n),E=ax(v-1n),u=C0(r*v+1n),{isValid:p,value:j}=OE(E,u);p||Px("bad point: y not sqrt");let w=(j&1n)===1n,g=(i&128)!==0;return!e&&j===0n&&g&&Px("bad point: x==0, isLastByteOdd"),g!==w&&(j=ax(-j)),new tr(j,n,1n,C0(j*n))}static fromHex(A,e){return tr.fromBytes(uF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Pi,e=Ti,r=this;if(r.is0())return Px("bad point: ZERO");let{X:t,Y:i,Z:n,T:F}=r,v=C0(t*t),E=C0(i*i),u=C0(n*n),p=C0(u*u),j=C0(v*A),w=C0(u*(j+E)),g=ax(p+C0(e*C0(v*E)));if(w!==g)return Px("bad point: equation left != right (1)");let S=C0(t*i),T=C0(n*F);return S!==T?Px("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:i,Y:n,Z:F}=qi(A),v=C0(e*F),E=C0(i*t),u=C0(r*F),p=C0(n*t);return v===E&&u===p}is0(){return this.equals(ir)}negate(){return new tr(ax(-this.X),this.Y,this.Z,ax(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=Pi,i=C0(A*A),n=C0(e*e),F=C0(2n*r*r),v=C0(t*i),E=ax(A+e),u=ax(C0(E*E)-i-n),p=ax(v+n),j=ax(p-F),w=ax(v-n),g=C0(u*j),S=C0(p*w),T=C0(u*w),q=C0(j*p);return new tr(g,S,q,T)}add(A){let{X:e,Y:r,Z:t,T:i}=this,{X:n,Y:F,Z:v,T:E}=qi(A),u=Pi,p=Ti,j=C0(e*n),w=C0(r*F),g=C0(C0(i*p)*E),S=C0(t*v),T=ax(C0(ax(e+r)*ax(n+F))-j-w),q=ax(S-g),L=ax(S+g),R=ax(w-C0(u*j)),i0=C0(T*q),M=C0(L*R),y=C0(T*R),O=C0(q*L);return new tr(i0,M,O,y)}subtract(A){return this.add(qi(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(rr(A,1n,cn),!e&&this.is0()))return ir;if(A===1n)return this;if(this.equals(Jr))return YE(A).p;let r=ir,t=Jr;for(let i=this;A>0n;i=i.double(),A>>=1n)A&1n?r=r.add(i):e&&(t=t.add(i));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(ir))return{x:0n,y:1n};let t=qE(r,Bn);C0(r*t)!==1n&&Px("invalid inverse");let i=C0(A*t),n=C0(e*t);return{x:i,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=ME(e);return r[31]|=A&1n?128:0,r}toHex(){return dF(this.toBytes())}clearCofactor(){return this.multiply(Cn(yE),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(cn/2n,!1).double();return cn%2n&&(A=A.add(this)),A.is0()}};A0(ls,"BASE");A0(ls,"ZERO");var _t=ls,Jr=new _t(Uo,Ho,1n,ax(Uo*Ho)),ir=new _t(0n,1n,1n,0n);_t.BASE=Jr;_t.ZERO=ir;var ME=x=>uF(CF(rr(x,0n,Vi),64)).reverse(),bF=x=>Cn("0x"+dF(fs(or(x)).reverse())),WA=(x,A)=>{let e=x;for(;A-- >0n;)e=C0(e*e);return e},LE=x=>{let A=C0(x*x),e=C0(A*x),r=C0(WA(e,2n)*e),t=C0(WA(r,1n)*x),i=C0(WA(t,5n)*t),n=C0(WA(i,10n)*i),F=C0(WA(n,20n)*n),v=C0(WA(F,40n)*F),E=C0(WA(v,80n)*v),u=C0(WA(E,80n)*v),p=C0(WA(u,10n)*i);return{pow_p_5_8:C0(WA(p,2n)*x),b2:e}},zo=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,OE=(x,A)=>{let e=C0(A*C0(A*A)),r=C0(C0(e*e)*A),t=LE(C0(x*r)).pow_p_5_8,i=C0(x*C0(e*t)),n=C0(A*C0(i*i)),F=i,v=C0(i*zo),E=n===x,u=n===ax(-x),p=n===ax(-x*zo);return E&&(i=F),(u||p)&&(i=v),(ax(i)&1n)===1n&&(i=ax(-i)),{isValid:E||u,value:i}},RE=x=>TE(bF(x)),GE=(...x)=>Promise.resolve(NE("sha512Async")(pF(...x))).then(IE),UE=x=>{let A=fs(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=RE(e),i=Jr.multiply(t),n=i.toBytes();return{head:e,prefix:r,scalar:t,point:i,pointBytes:n}},HE=x=>GE(or(x,jt)).then(UE),JE=x=>HE(x).then(A=>A.pointBytes),KE={sha512Async:async x=>{let A=$E(),e=pF(x);return wn(await A.digest("SHA-512",e.buffer))},sha512:void 0},zE=x=>(x=x===void 0?PE(jt):x,or(x,jt)),VE=async x=>{let A=zE(x),e=await JE(A);return{secretKey:A,publicKey:e}},dn=8,WE=256,mF=Math.ceil(WE/dn)+1,Wi=2**(dn-1),XE=()=>{let x=[],A=Jr,e=A;for(let r=0;r<mF;r++){e=A,x.push(e);for(let t=1;t<Wi;t++)e=e.add(A),x.push(e);A=e.double()}return x},Vo=void 0,Wo=(x,A)=>{let e=A.negate();return x?e:A},YE=x=>{let A=Vo||(Vo=XE()),e=ir,r=Jr,t=2**dn,i=t,n=Cn(t-1),F=Cn(dn);for(let v=0;v<mF;v++){let E=Number(x&n);x>>=F,E>Wi&&(E-=i,x+=1n);let u=v*Wi,p=u,j=u+Math.abs(E)-1,w=v%2!==0,g=E<0;E===0?r=r.add(Wo(w,A[p])):e=e.add(Wo(g,A[j]))}return x!==0n&&Px("invalid wnaf"),{p:e,f:r}},jF=32,hF=64;async function Xi(){let{secretKey:x,publicKey:A}=await VE(),e=new Uint8Array(hF);return e.set(x,0),e.set(A,jF),{publicKey:A,privateKey:e}}function un(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function Yi(x,A="base64 value"){return yF(gF(x,A))}function gF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function cs(x){return un(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function QE(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return yF(gF(r,A))}function yF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var ht=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},Qi="/api/1/companion/cert",kF=10080*60*1e3,Xo=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function wF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=Xo?Qi:e+Qi,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};Xo&&e&&(t["x-target-host"]=e);let i=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:cs(A.publicKey),subject:A.subject})});if(!i.ok){let F="unknown_error",v=i.statusText||`Cert API request failed (${i.status})`;try{let E=await i.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new ht(i.status,F,v)}let n=await i.json();if(!n.certificate||!n.notAfter)throw new ht(i.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function Es(x,A=kF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var ZE=require("events"),xB=jE(gE(),1),on="[device-master]",YA={debug:(x,...A)=>console.debug(on,x,...A),info:(x,...A)=>console.info(on,x,...A),warn:(x,...A)=>console.warn(on,x,...A),error:(x,...A)=>console.error(on,x,...A)},Dn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},AB=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 Bs(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^AB[(e^x[r])&255];return(e^-1)>>>0}var Zi=Date.UTC(1999,11,31,0,0,0);function xs(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),i=e.repeat(t);return A<0?r+i:i+r}function qe(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function As(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 eB=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]),rB=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 tB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let i=(r^x[t])&255;r=(e^eB[i])&255,e=rB[i]}return 256*e|r}function nB(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),i=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,i,!0),e.setUint32(4,n,!0),e}function iB(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 sB=[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],aB=new Map(sB.map((x,A)=>[x,128+A]));function oB(x){return x<=127||x>=160&&x<=255?x:aB.get(x)??63}var Ur="uto_script.dat",Cs="uto_fw.dat",_F=(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))(_F||{}),SF=(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))(SF||{}),ds=(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))(ds||{}),$F=(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))($F||{}),PF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(PF||{}),TF=(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))(TF||{}),qF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(qF||{}),NF=(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))(NF||{}),IF=97;function pn(x){return x&IF}var MF=(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))(MF||{}),LF=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(LF||{}),Yo={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},FB=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"+qe(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"+qe(x,2)}tagToString(x){x|=0;let A=Object.entries(ds).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+qe(x,4)}containerIdToTag(x,A){let e=Yo[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(Yo).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)+Zi}msToStamp40(x){let A=(x-Zi)/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 i=new Uint8Array(x.buffer,A,t);return r.decode(i)}ansiUnpack(x,A,e,r){try{let t=As(x),i=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return i.decode(t.slice(A,A+n))}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=As(x);t.fill(0,A,A+e);for(let i=0;i<e&&i<r.length;i++)t[A+i]=oB(r.charCodeAt(i))}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),i=A.getUint32(6),n=(qe(i,8)+qe(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:qe(e,4),firmwareVersion:`${xs(t>>8,2)}v${xs(t&255,3,"0")}`,flags:qe(r,4),utos:F}}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)}}}},K0=new FB,St={nowMs:()=>Date.now()},us=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(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()}}},Qo=new WeakMap;function OF(x,A){let r=(Qo.get(x)??Promise.resolve()).then(()=>vB(x,A));return Qo.set(x,r.catch(()=>{})),r}async function vB(x,A){x.interface&&x.interface==="ble"?await fB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function fB(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let i=0;i<r.byteLength;i+=t){let n=r.slice(i,i+t);await x(n.buffer)}}var Zo=15e3,lB=500,cB=3,EB=1024;function xF(x){return x?.utos.find(e=>e.wTag===3)?.size||EB}var RF=class En extends ZE.EventEmitter{constructor(A,e,r=St){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",xF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new us("UTO-Port"),this.transport=A,this.logger=e??YA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,xB.default)({print:i=>{this.logger.info(`[mdnCom] ${i}`),this.emit("mdnCom",i)},printErr:i=>{this.logger.error(`[mdnCom] ${i}`),this.emit("mdnComError",i)}});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 i=this.txStream();this.lastTxWrite=OF(this.transport,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let i=this.rxUto(),n=this.parseUtoFrame(i);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(i=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${i} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:i===0,resultCode:i})}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 i=>{this.receiveUto&&await this.receiveUto(new Uint8Array(i))}),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:K0.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((i,n,F)=>{if(i.bCmd===0){let v=this.resultVerdict(i);v===5||v===0||v===4?n(null):F(i);return}if(i.wTagFull!==A)return F(i);n(i)},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}=En.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((i,n)=>i+n.length,0),r=new Uint8Array(e),t=0;for(let i of A)r.set(i,t),t+=i.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??lB,i=r?.maxRetries??cB;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},p,j={resolve:g=>{E=!0,clearTimeout(p),this.removeListener("utoFrame",u),n(g)},reject:g=>{E=!0,clearTimeout(p),this.removeListener("utoFrame",u),F(g)}},w=async()=>{u=g=>A(g,j.resolve,j.reject),this.once("utoFrame",u);try{await e()}catch(g){if(E)return;this.removeListener("utoFrame",u),F(g);return}E||(p=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=i){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${i} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${i})`),w()},t))};w()})}createFrameIdleGuard(A,e,r){let t,i=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{i(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:i}}async requestHistoricUtos(A,e,r,t=Zo,i=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,p=Promise.resolve(),j=T=>{if(w.arm(),T.bCmd===0){w.clear(),this.settleHistoricTransfer(T,E,n,p,F,v);return}if(T.wTagFull===A&&T.data&&(E.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),r?.(++u),n&&i>0&&E.length>=i)){let q=E.splice(0);p=p.then(()=>n(q))}this.once("utoFrame",j)},w=this.createFrameIdleGuard(j,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",j),w.arm();let g=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:g,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,i,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>i(r?[]:e)).catch(n)}async requestFile(A,e,r=Zo){return await this.utoPortLock.requestLock(),new Promise((t,i)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=p=>{if(E.arm(),p.bCmd===0){E.clear();let j=this.resultVerdict(p);j===5||j===0?t(En.concatChunks(n)):i(p);return}if(p.bCmd===3&&p.data){let j=this.copyDataView(p.data);n.push(j),F+=j.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>i(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let p=0;p<A.length;p++)u[p]=A.charCodeAt(p)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).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);K0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(i){let n=i;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=En.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${i}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?K0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=xF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?K0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,K0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},i=n=>this.handleFileListFrame(n,t,A,e,r,i);this.once("utoFrame",i),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,i,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):i(A);return}try{let F=K0.decode_FILEMAP(A);e[F.name]=F}catch(F){i(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?K0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let i=e;A===2&&(i=new Uint8Array(e.length+1),i.set(new Uint8Array(e),1),i[0]=A);let n={name:t??Ur,stamp:r===0?0:K0.msToStamp40(r??this.timeSource.nowMs()),size:i.length,_flags:11,crc32:Bs(i)},F=K0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<i.length;u+=E){let p=Math.min(E,i.byteLength-u),j=new Uint8Array(i.buffer,i.byteOffset+u,p);await this.sendUTOCmdExt(3,3,j,u*256);let g=(u+p)/i.byteLength*100;this.emit("installing",g.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let i=t??this.utoStampNow40,n=Math.trunc(i/256),F=i&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},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 K0.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((i,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),i(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),i({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},BB=require("events"),GF=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(GF||{}),CB=5e3,dB=5e3,uB=class extends BB.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??YA,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(" "),i={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(i.level=this.logLevelFromPrefix(F)),i.message=n,this.emitMessageEvent(i)}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 i of t){i==="\xFF"&&(i="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:i,start:Date.now()})}else if(i===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+i;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:i,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&i==="\r")continue;F.buf+=i,F.tag===16&&i===`
|
|
2193
|
-
`&&r.pop()}else{if(x||(A=Date.now()),
|
|
2192
|
+
}`;var Z0=new Function(Object.keys(e0),p0)(...Object.values(e0)),Y0=`methodCaller<(${Q.map(Ax=>Ax.name)}) => ${N.name}>`;return I(We(Y0,Z0))},j0=f=>(f=R0(f),D0.toHandle(n[f])),Cx=(f,C)=>(f=D0.toValue(f),C=D0.toValue(C),D0.toHandle(f[C])),Sx=f=>{f>9&&(V[f+1]+=1)},Kx=(f,C,g,T,N)=>_[f](C,g,T,N),Zx=f=>D0.toHandle(R0(f)),xA=f=>{var C=D0.toValue(f);MA(C),o0(f)},Ze=()=>2147483648,aA=(f,C)=>(y(C,"alignment argument is required"),Math.ceil(f/C)*C),Se=f=>{var C=en.buffer.byteLength,g=(f-C+65535)/65536|0;try{return en.grow(g),Ex(),1}catch(T){O(`growMemory: Attempted to grow heap from ${C} bytes to ${f} bytes, but got error: ${T}`)}},kx=f=>{var C=gx.length;f>>>=0,y(f>C);var g=Ze();if(f>g)return O(`Cannot enlarge memory, requested ${f} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var N=C*(1+.2/T);N=Math.min(N,f+100663296);var Q=Math.min(g,aA(Math.max(f,N),65536)),X=Se(Q);if(X)return!0}return O(`Failed to grow the heap from ${C} bytes to ${Q} bytes, not enough memory!`),!1},fc=f=>{lx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Ec=9007199254740992,Bc=-9007199254740992,Cc=f=>f<Bc||f>Ec?NaN:Number(f);function dc(f,C,g,T){return C=Cc(C),70}var ds=[null,[],[]],us=(f,C)=>{var g=ds[f];y(g),C===0||C===10?((f===1?L:O)(Zt(g)),g.length=0):g.push(C)},Gp=()=>{Ma(0),ds[1].length&&us(1,10),ds[2].length&&us(2,10)},uc=(f,C,g,T)=>{for(var N=0,Q=0;Q<g;Q++){var X=g0[C>>2],x0=g0[C+4>>2];C+=8;for(var e0=0;e0<x0;e0++)us(f,gx[X+e0]);N+=x0}return g0[T>>2]=N,0},Dc=()=>{if(E){var f=require("crypto");return C=>f.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},Pa=f=>(Pa=Dc())(f),pc=(f,C)=>Pa(gx.subarray(f,f+C)),bc=(f,C)=>{if(xr)for(var g=f;g<f+C;g++){var T=Xe(g);T&&xr.set(T,g)}},xr,mc=f=>(xr||(xr=new WeakMap,bc(0,Ar.length)),xr.get(f)||0),Ds=[],jc=()=>{if(Ds.length)return Ds.pop();try{return Ar.grow(1)}catch(f){if(!(f instanceof RangeError))throw f;lx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},ps=(f,C)=>{Ar.set(f,C),se[f]=Ar.get(f)},qa=f=>{let C=f.length;return y(C<16384),[C%128|128,C>>7,...f]},hc={i:127,p:127,j:126,f:125,d:124,e:111},Na=f=>qa(Array.from(f,C=>{var g=hc[C];return y(g,`invalid signature char: ${C}`),g})),gc=(f,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...qa([1,96,...Na(C.slice(1)),...Na(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),T=new WebAssembly.Module(g),N=new WebAssembly.Instance(T,{e:{f}}),Q=N.exports.f;return Q},yc=(f,C)=>{y(typeof f<"u");var g=mc(f);if(g)return g;var T=jc();try{ps(T,f)}catch(Q){if(!(Q instanceof TypeError))throw Q;y(typeof C<"u","Missing signature argument to addFunction: "+f);var N=gc(f,C);ps(T,N)}return xr.set(f,T),T},kc=f=>{xr.delete(Xe(f)),ps(f,null),Ds.push(f)};ft(),kr(),y(V.length===10);{if(n.noExitRuntime&&(He=n.noExitRuntime),n.print&&(L=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(s0=n.wasmBinary),n.FS_createDataFile=rA.createDataFile,n.FS_createPreloadedFile=rA.createPreloadedFile,Sc(),n.arguments&&(D=n.arguments),n.thisProgram&&(j=n.thisProgram),y(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),y(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),y(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),y(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),y(typeof n.read>"u","Module.read option was removed"),y(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),y(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),y(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),y(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),y(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),y(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),y(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),y(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();t0("preInit")}n.addFunction=yc,n.removeFunction=kc;var wc=["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"];wc.forEach(v0);var _c=["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"];_c.forEach(l0);function Sc(){i0("fetchSettings"),i0("logReadFiles"),i0("loadSplitModule"),i0("onMalloc"),i0("onRealloc"),i0("onFree"),i0("onSbrkGrow")}var Ia=Z("___getTypeName"),bs=Z("_malloc"),Fe=Z("_free"),$c=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),Tc=n._MdnCom_Free=Z("_MdnCom_Free"),Pc=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),qc=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),Nc=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),Ic=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),Mc=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),Lc=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),Rc=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),Oc=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),Gc=n._MdnCom_Init=Z("_MdnCom_Init"),Uc=n._SendUtoQuery=Z("_SendUtoQuery"),Hc=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),Ma=Z("_fflush"),ms=Z("_emscripten_stack_get_end"),Jc=Z("_emscripten_stack_get_base"),Kc=Z("_strerror"),La=Z("_emscripten_stack_init"),zc=Z("_emscripten_stack_get_free"),Vc=Z("__emscripten_stack_restore"),Wc=Z("__emscripten_stack_alloc"),Xc=Z("_emscripten_stack_get_current"),Yc=Z("memory"),Qc=Z("__indirect_function_table"),en=Z("wasmMemory"),Ar=Z("wasmTable");function Zc(f){y(typeof f.__getTypeName<"u","missing Wasm export: __getTypeName"),y(typeof f.malloc<"u","missing Wasm export: malloc"),y(typeof f.free<"u","missing Wasm export: free"),y(typeof f.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),y(typeof f.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),y(typeof f.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),y(typeof f.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),y(typeof f.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),y(typeof f.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),y(typeof f.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),y(typeof f.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),y(typeof f.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),y(typeof f.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),y(typeof f.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),y(typeof f.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),y(typeof f.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),y(typeof f.fflush<"u","missing Wasm export: fflush"),y(typeof f.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),y(typeof f.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),y(typeof f.strerror<"u","missing Wasm export: strerror"),y(typeof f.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),y(typeof f.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),y(typeof f._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),y(typeof f._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),y(typeof f.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),y(typeof f.memory<"u","missing Wasm export: memory"),y(typeof f.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),Ia=V0("__getTypeName",1),bs=V0("malloc",1),Fe=V0("free",1),$c=n._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),Tc=n._MdnCom_Free=V0("MdnCom_Free",1),Pc=n._MdnCom_RawRx=V0("MdnCom_RawRx",1),qc=n._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),Nc=n._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Ic=n._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),Mc=n._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),Lc=n._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),Rc=n._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),Oc=n._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),Gc=n._MdnCom_Init=V0("MdnCom_Init",2),Uc=n._SendUtoQuery=V0("SendUtoQuery",2),Hc=n._SendUtoCmdExt=V0("SendUtoCmdExt",4),Ma=V0("fflush",1),ms=f.emscripten_stack_get_end,Jc=f.emscripten_stack_get_base,Kc=V0("strerror",1),La=f.emscripten_stack_init,zc=f.emscripten_stack_get_free,Vc=f._emscripten_stack_restore,Wc=f._emscripten_stack_alloc,Xc=f.emscripten_stack_get_current,Yc=en=f.memory,Qc=Ar=f.__indirect_function_table}var Ra={__cxa_throw:ee,_abort_js:it,_embind_finalize_value_object:Ke,_embind_register_bigint:at,_embind_register_bool:o,_embind_register_class:Ye,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:I0,_embind_register_float:m0,_embind_register_function:yx,_embind_register_integer:Ix,_embind_register_memory_view:Ox,_embind_register_std_string:Es,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:m,_emval_create_invoker:N0,_emval_decref:o0,_emval_get_module_property:j0,_emval_get_property:Cx,_emval_incref:Sx,_emval_invoke:Kx,_emval_new_cstring:Zx,_emval_run_destructors:xA,emscripten_resize_heap:kx,fd_close:fc,fd_seek:dc,fd_write:uc,random_get:pc},Oa;function xf(){La(),Y()}function Af(){xf(),Xx();function f(){y(!Oa),Oa=!0,n.calledRun=!0,!M&&(TA(),d0?.(n),n.onRuntimeInitialized?.(),t0("onRuntimeInitialized"),y(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),PA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f(),W()}var _r;_r=await nt(),Af(),L0?s=n:s=new Promise((f,C)=>{d0=f,P0=C});for(let f of Object.keys(n))f in t||Object.defineProperty(t,f,{configurable:!0,get(){lx(`Access to module property ('${f}') 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)}}),wF={};WE(wF,{API_STAMP_UNBOUNDED:()=>a8,AT_COMMANDS:()=>_x,AT_COMMAND_TIMEOUT_MS:()=>zx,ApiBadRequestError:()=>S0,ApiForbiddenError:()=>In,ApiMethodNotAllowedError:()=>Ri,ApiNotFoundError:()=>cA,AtCommandHandler:()=>bd,AtDeviceError:()=>Li,AtHandlerDisposedError:()=>Ux,BACKFILL_PENDING_HEADER:()=>tv,BACKFILL_PENDING_VALUE:()=>nv,BLE_CONFIGURATION:()=>Hd,BLE_SCAN_TIMEOUT_MS:()=>Kd,COMPANION_AUTH_ERROR_I18N_KEYS:()=>hd,COMPANION_CERT_PATH:()=>ti,COMPANION_PRIVATE_KEY_SIZE:()=>LF,COMPANION_PUBLIC_KEY_SIZE:()=>MF,CertApiError:()=>wt,CompanionAuthErrorKind:()=>I8,CompanionAuthManager:()=>jd,CompanionCertError:()=>q8,DDE_FIELD_UNUSED_INDEX:()=>n8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>GF,DEFAULT_RECONNECT_OPTIONS:()=>K8,DLO_FILENAME:()=>Hr,DdeMapper:()=>td,DdeUnknownAliasError:()=>ki,DdeUnknownContainerError:()=>Ne,DdeUnknownFieldError:()=>Ii,DdeWriteForbiddenError:()=>$t,DebugLogLevel:()=>e8,DebugMaster:()=>JB,DebugSync:()=>S8,DeviceManager:()=>Gd,DeviceState:()=>J8,FW_FILENAME:()=>mi,LIC_API_BASE_URL:()=>y8,LOCAL_API_LIFECYCLE_FLAGS:()=>or,LOCAL_API_SITE_MASK:()=>Ci,LOCAL_API_SITE_MASTER_KEYS:()=>Mt,LegacySync:()=>w8,LocalDataManager:()=>O8,MANUFACTURER_CODE:()=>Jd,MS_1999_12_31:()=>ni,MemoryStorage:()=>zB,Mutex:()=>hi,OfflineSyncManager:()=>cd,RAW_TERMINAL_PATTERN:()=>T8,RESPONSE_PATTERNS:()=>J0,Rm2mStateManager:()=>Ld,SYNC_LOGIC_MASK:()=>YF,SyncManager:()=>Dd,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>$8,USB_CONFIGURATION:()=>Ud,UplinkMode:()=>ZF,UtoCommand:()=>HF,UtoESC:()=>QF,UtoFileFlag:()=>WF,UtoFileFlagInt:()=>XF,UtoFileType:()=>zF,UtoFlag:()=>VF,UtoMaster:()=>A8,UtoResult:()=>JF,UtoSplitTag:()=>KF,UtoTag:()=>ji,WebSocketBridge:()=>Mi,applyBlueprintNames:()=>h8,applyDecpl:()=>jC,assertValidRequestStamps:()=>Vr,base64ToBytes:()=>ri,base64UrlToBytes:()=>jB,buildBlueprintNameMap:()=>fi,bytesToBase64:()=>jn,bytesToBase64Url:()=>Di,checkDeviceCapabilities:()=>wd,computeDisplayValue:()=>R8,computeDisplayValues:()=>Bi,consoleLogger:()=>QA,convertToString:()=>si,crc16Modbus:()=>_B,crc32Ethernet:()=>bi,createDebugBufferState:()=>P8,createLocalApiHandler:()=>eD,createLocalApiSession:()=>Gi,createSiteInfoFromDde:()=>FD,dbStampToStamp40:()=>YA,decodeContainer:()=>vi,decodeFloatm16:()=>C8,decodeLifecycleFlags:()=>X8,decodeRm2mStateResponse:()=>H8,decodeUplinkState:()=>G8,deriveDeviceLifecycleMirror:()=>Y8,encodeContainer:()=>ci,encodeFloatm16:()=>d8,encodeLifecycleFlags:()=>Hi,encodeNulPaddedJson:()=>V8,encodeSerialNumber:()=>SB,extractBits:()=>kn,formatApiStamp:()=>Jr,generateCompanionKeypair:()=>ei,getDeviceAssignment:()=>k8,isCertValid:()=>pi,isDevicePushableTag:()=>s8,isUnusedField:()=>Be,isValidStamp:()=>Oi,mapLocalApiError:()=>dv,nullLogger:()=>hn,parseApiStamp:()=>zr,parseBlueprint:()=>sd,parseDde:()=>DC,parseMetadataResponse:()=>M8,parseNulPaddedJson:()=>It,parseRm2mStateParams:()=>U8,parseSerialNumberFromDataView:()=>$B,parseValuesResponse:()=>L8,requestCompanionCert:()=>UF,resolveAuthErrorKind:()=>gd,resolveBlueprintNameMap:()=>Nt,resolveContainerTag:()=>yn,resolveTagForContainer:()=>yt,resolveTagInModel:()=>XB,routeLocalApiRequest:()=>Bv,spreadBits:()=>F8,stamp40ToDbHex:()=>lA,syncLogic:()=>gn,systemTimeSource:()=>qt,toHex:()=>qe,toUint8Array:()=>ii,utoStack:()=>K0});uv.exports=YE(wF);var _F=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:pn,n:un,Gx:rF,Gy:tF,a:Ls,d:Rs,h:ZE}=_F,kt=32,xB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Tx=(x="")=>{let A=new Error(x);throw xB(A,Tx),A},AB=x=>typeof x=="bigint",eB=x=>typeof x=="string",rB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Fr=(x,A,e="")=>{let r=rB(x),t=x?.length,s=A!==void 0;if(!r||s&&t!==A){let n=e&&`"${e}" `,F=s?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},Pn=x=>new Uint8Array(x),di=x=>Uint8Array.from(x),SF=(x,A)=>x.toString(16).padStart(A,"0"),$F=x=>Array.from(Fr(x)).map(A=>SF(A,2)).join(""),Ee={_0:48,_9:57,A:65,F:70,a:97,f:102},nF=x=>{if(x>=Ee._0&&x<=Ee._9)return x-Ee._0;if(x>=Ee.A&&x<=Ee.F)return x-(Ee.A-10);if(x>=Ee.a&&x<=Ee.f)return x-(Ee.a-10)},TF=x=>{let A="hex invalid";if(!eB(x))return Tx(A);let e=x.length,r=e/2;if(e%2)return Tx(A);let t=Pn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=nF(x.charCodeAt(n)),v=nF(x.charCodeAt(n+1));if(F===void 0||v===void 0)return Tx(A);t[s]=F*16+v}return t},PF=()=>globalThis?.crypto,tB=()=>PF()?.subtle??Tx("crypto.subtle must be defined, consider polyfill"),qF=(...x)=>{let A=0;for(let t of x)A+=Fr(t).length;let e=Pn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},nB=(x=kt)=>PF().getRandomValues(Pn(x)),bn=BigInt,tr=(x,A,e,r="bad number: out of range")=>{if(!AB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},ax=(x,A=pn)=>{let e=x%A;return e>=0n?e:A+e},sF=(1n<<255n)-1n,C0=x=>{x<0n&&Tx("negative coordinate");let A=(x>>255n)*19n+(x&sF);return A=(A>>255n)*19n+(A&sF),A%pn},sB=x=>ax(x,un),iB=(x,A)=>{(x===0n||A<=0n)&&Tx("no inverse n="+x+" mod="+A);let e=ax(x,A),r=A,t=0n,s=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,D=s-F*v;r=e,e=E,t=n,s=F,n=u,F=D}return r===1n?ax(t,A):Tx("no inverse")},aB=x=>{let A=dB[x];return typeof A!="function"&&Tx("hashes."+x+" not set"),A},oB=x=>Fr(x,64,"digest"),Os=x=>x instanceof Pt?x:Tx("Point expected"),xi=2n**256n,ui=class nr{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=xi;this.X=tr(A,0n,s),this.Y=tr(e,0n,s),this.Z=tr(r,1n,s),this.T=tr(t,0n,s),Object.freeze(this)}static CURVE(){return _F}static fromAffine(A){return new nr(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=Rs,t=di(Fr(A,kt)),s=A[31];t[31]=s&-129;let n=NF(t);tr(n,0n,e?xi:pn);let v=C0(n*n),E=ax(v-1n),u=C0(r*v+1n),{isValid:D,value:j}=lB(E,u);D||Tx("bad point: y not sqrt");let w=(j&1n)===1n,h=(s&128)!==0;return!e&&j===0n&&h&&Tx("bad point: x==0, isLastByteOdd"),h!==w&&(j=ax(-j)),new nr(j,n,1n,C0(j*n))}static fromHex(A,e){return nr.fromBytes(TF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Ls,e=Rs,r=this;if(r.is0())return Tx("bad point: ZERO");let{X:t,Y:s,Z:n,T:F}=r,v=C0(t*t),E=C0(s*s),u=C0(n*n),D=C0(u*u),j=C0(v*A),w=C0(u*(j+E)),h=ax(D+C0(e*C0(v*E)));if(w!==h)return Tx("bad point: equation left != right (1)");let S=C0(t*s),P=C0(n*F);return S!==P?Tx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=Os(A),v=C0(e*F),E=C0(s*t),u=C0(r*F),D=C0(n*t);return v===E&&u===D}is0(){return this.equals(ir)}negate(){return new nr(ax(-this.X),this.Y,this.Z,ax(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=Ls,s=C0(A*A),n=C0(e*e),F=C0(2n*r*r),v=C0(t*s),E=ax(A+e),u=ax(C0(E*E)-s-n),D=ax(v+n),j=ax(D-F),w=ax(v-n),h=C0(u*j),S=C0(D*w),P=C0(u*w),q=C0(j*D);return new nr(h,S,q,P)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:v,T:E}=Os(A),u=Ls,D=Rs,j=C0(e*n),w=C0(r*F),h=C0(C0(s*D)*E),S=C0(t*v),P=ax(C0(ax(e+r)*ax(n+F))-j-w),q=ax(S-h),L=ax(S+h),O=ax(w-C0(u*j)),s0=C0(P*q),M=C0(L*O),y=C0(P*O),R=C0(q*L);return new nr(s0,M,R,y)}subtract(A){return this.add(Os(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(tr(A,1n,un),!e&&this.is0()))return ir;if(A===1n)return this;if(this.equals(Kr))return mB(A).p;let r=ir,t=Kr;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(ir))return{x:0n,y:1n};let t=iB(r,pn);C0(r*t)!==1n&&Tx("invalid inverse");let s=C0(A*t),n=C0(e*t);return{x:s,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=FB(e);return r[31]|=A&1n?128:0,r}toHex(){return $F(this.toBytes())}clearCofactor(){return this.multiply(bn(ZE),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(un/2n,!1).double();return un%2n&&(A=A.add(this)),A.is0()}};A0(ui,"BASE");A0(ui,"ZERO");var Pt=ui,Kr=new Pt(rF,tF,1n,ax(rF*tF)),ir=new Pt(0n,1n,1n,0n);Pt.BASE=Kr;Pt.ZERO=ir;var FB=x=>TF(SF(tr(x,0n,xi),64)).reverse(),NF=x=>bn("0x"+$F(di(Fr(x)).reverse())),XA=(x,A)=>{let e=x;for(;A-- >0n;)e=C0(e*e);return e},vB=x=>{let A=C0(x*x),e=C0(A*x),r=C0(XA(e,2n)*e),t=C0(XA(r,1n)*x),s=C0(XA(t,5n)*t),n=C0(XA(s,10n)*s),F=C0(XA(n,20n)*n),v=C0(XA(F,40n)*F),E=C0(XA(v,80n)*v),u=C0(XA(E,80n)*v),D=C0(XA(u,10n)*s);return{pow_p_5_8:C0(XA(D,2n)*x),b2:e}},iF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,lB=(x,A)=>{let e=C0(A*C0(A*A)),r=C0(C0(e*e)*A),t=vB(C0(x*r)).pow_p_5_8,s=C0(x*C0(e*t)),n=C0(A*C0(s*s)),F=s,v=C0(s*iF),E=n===x,u=n===ax(-x),D=n===ax(-x*iF);return E&&(s=F),(u||D)&&(s=v),(ax(s)&1n)===1n&&(s=ax(-s)),{isValid:E||u,value:s}},cB=x=>sB(NF(x)),fB=(...x)=>Promise.resolve(aB("sha512Async")(qF(...x))).then(oB),EB=x=>{let A=di(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=cB(e),s=Kr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},BB=x=>fB(Fr(x,kt)).then(EB),CB=x=>BB(x).then(A=>A.pointBytes),dB={sha512Async:async x=>{let A=tB(),e=qF(x);return Pn(await A.digest("SHA-512",e.buffer))},sha512:void 0},uB=x=>(x=x===void 0?nB(kt):x,Fr(x,kt)),DB=async x=>{let A=uB(x),e=await CB(A);return{secretKey:A,publicKey:e}},mn=8,pB=256,IF=Math.ceil(pB/mn)+1,Ai=2**(mn-1),bB=()=>{let x=[],A=Kr,e=A;for(let r=0;r<IF;r++){e=A,x.push(e);for(let t=1;t<Ai;t++)e=e.add(A),x.push(e);A=e.double()}return x},aF=void 0,oF=(x,A)=>{let e=A.negate();return x?e:A},mB=x=>{let A=aF||(aF=bB()),e=ir,r=Kr,t=2**mn,s=t,n=bn(t-1),F=bn(mn);for(let v=0;v<IF;v++){let E=Number(x&n);x>>=F,E>Ai&&(E-=s,x+=1n);let u=v*Ai,D=u,j=u+Math.abs(E)-1,w=v%2!==0,h=E<0;E===0?r=r.add(oF(w,A[D])):e=e.add(oF(h,A[j]))}return x!==0n&&Tx("invalid wnaf"),{p:e,f:r}},MF=32,LF=64;async function ei(){let{secretKey:x,publicKey:A}=await DB(),e=new Uint8Array(LF);return e.set(x,0),e.set(A,MF),{publicKey:A,privateKey:e}}function jn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function ri(x,A="base64 value"){return OF(RF(x,A))}function RF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function Di(x){return jn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function jB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return OF(RF(r,A))}function OF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var wt=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},ti="/api/1/companion/cert",GF=10080*60*1e3,FF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function UF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=FF?ti:e+ti,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};FF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:Di(A.publicKey),subject:A.subject})});if(!s.ok){let F="unknown_error",v=s.statusText||`Cert API request failed (${s.status})`;try{let E=await s.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new wt(s.status,F,v)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new wt(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function pi(x,A=GF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var hB=require("events"),gB=XE(QE(),1),fn="[device-master]",QA={debug:(x,...A)=>console.debug(fn,x,...A),info:(x,...A)=>console.info(fn,x,...A),warn:(x,...A)=>console.warn(fn,x,...A),error:(x,...A)=>console.error(fn,x,...A)},hn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},yB=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 bi(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^yB[(e^x[r])&255];return(e^-1)>>>0}var ni=Date.UTC(1999,11,31,0,0,0);function si(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 qe(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function ii(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 kB=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]),wB=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 _B(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^kB[s])&255,e=wB[s]}return 256*e|r}function SB(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),n=parseInt(t,16);return e.setUint32(0,s,!0),e.setUint32(4,n,!0),e}function $B(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 TB=[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],PB=new Map(TB.map((x,A)=>[x,128+A]));function qB(x){return x<=127||x>=160&&x<=255?x:PB.get(x)??63}var Hr="uto_script.dat",mi="uto_fw.dat",HF=(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))(HF||{}),JF=(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))(JF||{}),ji=(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))(ji||{}),KF=(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))(KF||{}),zF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(zF||{}),VF=(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))(VF||{}),WF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(WF||{}),XF=(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))(XF||{}),YF=97;function gn(x){return x&YF}var QF=(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))(QF||{}),ZF=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(ZF||{}),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},NB=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"+qe(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"+qe(x,2)}tagToString(x){x|=0;let A=Object.entries(ji).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+qe(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)+ni}msToStamp40(x){let A=(x-ni)/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=ii(x),s=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return s.decode(t.slice(A,A+n))}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=ii(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=qB(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),n=(qe(s,8)+qe(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:qe(e,4),firmwareVersion:`${si(t>>8,2)}v${si(t&255,3,"0")}`,flags:qe(r,4),utos:F}}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)}}}},K0=new NB,qt={nowMs:()=>Date.now()},hi=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(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 x8(x,A){let r=(lF.get(x)??Promise.resolve()).then(()=>IB(x,A));return lF.set(x,r.catch(()=>{})),r}async function IB(x,A){x.interface&&x.interface==="ble"?await MB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function MB(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let s=0;s<r.byteLength;s+=t){let n=r.slice(s,s+t);await x(n.buffer)}}var cF=15e3,LB=500,RB=3,OB=1024;function fF(x){return x?.utos.find(e=>e.wTag===3)?.size||OB}var A8=class Dn extends hB.EventEmitter{constructor(A,e,r=qt){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",fF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new hi("UTO-Port"),this.transport=A,this.logger=e??QA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,gB.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=x8(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),n=this.parseUtoFrame(s);this.emit("utoFrame",n)}},"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 n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({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:K0.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,n,F)=>{if(s.bCmd===0){let v=this.resultVerdict(s);v===5||v===0||v===4?n(null):F(s);return}if(s.wTagFull!==A)return F(s);n(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}=Dn.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,n)=>s+n.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??LB,s=r?.maxRetries??RB;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},D,j={resolve:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(h)},reject:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(h)}},w=async()=>{u=h=>A(h,j.resolve,j.reject),this.once("utoFrame",u);try{await e()}catch(h){if(E)return;this.removeListener("utoFrame",u),F(h);return}E||(D=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=s){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${s})`),w()},t))};w()})}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=cF,s=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,D=Promise.resolve(),j=P=>{if(w.arm(),P.bCmd===0){w.clear(),this.settleHistoricTransfer(P,E,n,D,F,v);return}if(P.wTagFull===A&&P.data&&(E.push({stamp40:P.stamp,data:this.copyDataView(P.data)}),r?.(++u),n&&s>0&&E.length>=s)){let q=E.splice(0);D=D.then(()=>n(q))}this.once("utoFrame",j)},w=this.createFrameIdleGuard(j,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",j),w.arm();let h=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:h,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,s,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>s(r?[]:e)).catch(n)}async requestFile(A,e,r=cF){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=D=>{if(E.arm(),D.bCmd===0){E.clear();let j=this.resultVerdict(D);j===5||j===0?t(Dn.concatChunks(n)):s(D);return}if(D.bCmd===3&&D.data){let j=this.copyDataView(D.data);n.push(j),F+=j.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let D=0;D<A.length;D++)u[D]=A.charCodeAt(D)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).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);K0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(s){let n=s;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=Dn.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}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?K0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=fF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?K0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,K0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=n=>this.handleFileListFrame(n,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,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(A);return}try{let F=K0.decode_FILEMAP(A);e[F.name]=F}catch(F){s(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?K0.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 n={name:t??Hr,stamp:r===0?0:K0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:bi(s)},F=K0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<s.length;u+=E){let D=Math.min(E,s.byteLength-u),j=new Uint8Array(s.buffer,s.byteOffset+u,D);await this.sendUTOCmdExt(3,3,j,u*256);let h=(u+D)/s.byteLength*100;this.emit("installing",h.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,n=Math.trunc(s/256),F=s&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},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 K0.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,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),s(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),s({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},GB=require("events"),e8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(e8||{}),UB=5e3,HB=5e3,JB=class extends GB.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??QA,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},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(s.level=this.logLevelFromPrefix(F)),s.message=n,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 n=String.fromCharCode(...r.map(F=>F.tag));if(s===""){switch(n){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(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+s;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(s===""){switch(n){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 F=r[r.length-1];if(F.tag===16&&s==="\r")continue;F.buf+=s,F.tag===16&&s===`
|
|
2193
|
+
`&&r.pop()}else{if(x||(A=Date.now()),s==="\r"||(x+=s,!(Date.now()>A+HB||s===`
|
|
2194
2194
|
`)))continue;x.slice(0,-1).split(`
|
|
2195
|
-
`).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+
|
|
2195
|
+
`).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+UB&&r.splice(F,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),n=65535&(A<0?0:t-A),F=65535&s-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=s,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function YA(x){return parseInt(x.slice(6),16)}function lA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function r8(x){return x?new Uint8Array(x):null}function En(x){return{...x,data:r8(x.data)}}function Gs(x){return{...x,data:r8(x.data)}}var KB=/^400000[0-9A-F]{10}$/;function EF(x,A){if(!KB.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 zB=class t8{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(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:En(this.utoData.get(A).get(e))}async replaceUtoRow(A){EF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,En(A)]]))}async insertHistoricRows(A){for(let e of A){EF(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,En(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let s=e.offset??0;return t.slice(s,s+e.limit).map(En)}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:lA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Gs)}async getFile(A){let e=this.files.get(A);return e?Gs(e):null}async upsertFile(A){this.files.set(A.filename,Gs(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?jn(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?jn(e.data):null}))}}static fromJSON(A){let e=new t8;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?ri(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?ri(r.data,`files.data of "${r.filename}"`):null});return e}},VB=new Set(["link","unknown"]);function _t(x){return VB.has(x)}var n8=-2;function Be(x){return x.index===n8}var WB=65535,BF={configa:4294928218,configb:4294928219,configc:4294928220};function gi(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 yn(x){let A=gi(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(BF,A)?BF[A]:K0.containerIdToTag(A,!1)}function yt(x){return yn(x.name)}function XB(x,A){let e=x.byNameOrAlias(A);return yn(e?e.name:A)}function s8(x){return Number.isInteger(x)&&x>=0&&x<=WB}var YB={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 QB(x){return x===void 0?"unknown":YB[x.toLowerCase()]??"unknown"}var ZB={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},xC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),yi="name",AC="type";function eC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function rC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function sr(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 tC(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 nC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function i8(x){let A=nC.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 sC(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=i8(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 iC(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=i8(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 aC(x,A){return x==="string"?A??0:ZB[x]}function oC(x){let A={};for(let[e,r]of x)xC.has(e)||(A[e]=r);return A}function FC(x,A,e){let r=QB(x.get(AC)),t=sr(x,"max"),s=aC(r,t),n=A.fields[A.fields.length-1],v=sr(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(yi)??(A.kind==="histdata"?`ch${E}`:`field${E}`),D=sC(x),j=iC(x),w=sr(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:w,sortIndex:w??e,byteofs:v,type:r,size:s,max:t,decpl:sr(x,"decpl"),vscale:D.value,vofs:j.value,vscaleRef:D.ref,vofsRef:j.ref,units:x.get("units"),editmask:x.get("editmask"),view:sr(x,"view"),edit:sr(x,"edit"),default:x.get("default"),bitmask:tC(x),attrs:oC(x)}}function vC(){return{name:"",kind:"other",fields:[],recordSize:0}}function lC(x,A,e){switch(A){case yi:{let r=gi(e);x.name=r,x.kind=rC(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 cC(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!_t(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function fC(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 EC(x){return x.toLowerCase()==="histdata28"?"applog0":gi(x)}function BC(x){let{keyBytes:A,matchAll:e}=fC(x.get("key")??"00");return{source:x.get("source")??"",target:EC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:sr(x,"keepraw")}}function CC(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 dC(x,A){switch(A){case"<table>":return x.container=vC(),x.expectName=!0,!0;case"</table>":return x.container&&(cC(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(FC(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(BC(x.split)),x.split=null,!0;default:return!1}}function uC(x,A){let{key:e,value:r}=eC(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!==yi)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,lC(x.container,e,r)}}function DC(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,`
|
|
2196
2196
|
`).replace(/\r/g,`
|
|
2197
2197
|
`).split(`
|
|
2198
|
-
`).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||KB(A,t)||t.includes("=")&&zB(A,t)}return JB(A.containers,A.splits)}var VF=null,WB=4;function Hr(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 Kr(x){let A=x.trim();if(A==="*")return VF;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,p,j)=>{let w=A.slice(u,u+p);return parseInt(w.length?w.padEnd(p,"0"):j,10)},r=parseInt(A.slice(0,WB),10),t=A.length>=6?e(4,2,"01"):1,i=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,i,n,F,v,E)}var yt="NAN",XB="%HEX%",YB=65535,bs=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function _n(x){return(x.alias??x.name).toLowerCase()}function Sn(x){return x==="string"}function ms(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function WF(x){return(x.editmask??"").toUpperCase()===XB}function QB(x,A){return A===void 0||!Number.isFinite(x)?x:js(x,A)}function js(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function ZB(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),js(x,A-1-r)}function xC(x){return x==="floatm16"||x==="f32"||x==="f64"}function AC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(xC(x.type)?9:0),r=js(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return ZB(r,t)}function mn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,i=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=i),i<<=1n),e>>=1n,r>>=1n;return Number(t)}function XF(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),i=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;i!==0n;)i&1n&&(r=t&1n?r|n:r&~n,t>>=1n),i>>=1n,n<<=1n;return Number(r)}var eC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function jn(x){return!!x.bitmask&&eC.has(x.type)}var YF=255,QF=254,ZF=253,x8=252,A8=251,rC=207,hs=65535,hn=65534,gs=65533,ys=65532,ks=65531;function tC(x){switch(x){case YF:return hs;case QF:return hn;case ZF:return gs;case x8:return ys;case A8:return ks;default:return x<=31?x:x>rC?hn:(x&15|16)<<(x>>4)-1}}function nC(x){switch(x){case hs:return YF;case hn:return QF;case gs:return ZF;case ys:return x8;case ks:return A8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var gn=1023,es=31,e8=127,Ii=8388607,iC=255,rs=15,sC=-14,rF=15;function r8(x){let A=(x&gn)<<13,e=(x&31744)>>10;if(e===es)return n8(1024-(x&gn));e!==0&&(e=e-rs+4+e8);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 t8(x){if(typeof x=="string"||Number.isNaN(x))return YB;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Ii)+4096,i=(t>Ii?1:0)+(e>>>23&iC),n=(t&Ii)>>>13;return i!==0&&(i=i-e8-4,i<sC?(n=0,i=0):i>rF?(n=gn,i=rF+rs):i=i+rs),r|i<<10|n}var aC=["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:hs,OF:hn,UF:gs,OL:ys,SC:ks}},oC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Vx={NAN:1,OF:2,UF:3,OL:4,SC:5},FC=new Set(["u8","u16","u32","ufm8"]);function vC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function ws(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 _s(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 r8(A.getUint16(e,!1));case"ufm8":return tC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function n8(x){switch(x){case Vx.OF:return"OF";case Vx.UF:return"UF";case Vx.OL:return"OL";case Vx.SC:return"SC";default:return yt}}var tF=[["NAN",Vx.NAN],["OF",Vx.OF],["UF",Vx.UF],["OL",Vx.OL],["SC",Vx.SC]];function fC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Vx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Vx.NAN:r)}function lC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Vx.NAN:r}function cC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);jn(x)&&(t=BigInt(mn(Number(t),x.bitmask)));let i=ts.s64;return tF.find(([n])=>t===BigInt(i[n]))?.[1]??0}let e=ts[x.type];if(!e)return 0;let r=_s(x.type,A,x.byteofs);return jn(x)&&(r=mn(r,x.bitmask)),tF.find(([t])=>r===e[t])?.[1]??0}function i8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&es)===es?1024-(e&gn):0}case"f32":return fC(A,x.byteofs);case"f64":return lC(A,x.byteofs);default:return cC(x,A)}}function s8(x,A){let e=_s(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(jn(x)&&(e=mn(e,x.bitmask)),e*x.vscale+x.vofs)}function EC(x,A){let e=i8(x,A);if(e!==0)return n8(e);let r=s8(x,A);return Number.isNaN(r)?yt:AC(x,r)}function BC(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Sn(x.type)||ms(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return i8(x,e)!==0?NaN:s8(x,e)}function CC(x,A){if(WF(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 K0.cp1252Unpack(A,x.byteofs,x.size)}var a8=25569,o8=864e5;function dC(x){return(x-a8)*o8}function uC(x){return x/o8+a8}function DC(x,A){if(x.type==="datetime")return Hr(dC(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return Hr(K0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),Hr(K0.stamp40ToMS(e))}var pC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function bC(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function mC(x){let A=x.default;if(A===void 0)return;if(Sn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===yt)return yt;if(pC.has(x.type))return bC(e,0);let r=ws(e);return r!==null?r:A}function jC(x,A,e){return x.byteofs+x.size>e?mC(x):Sn(x.type)?CC(x,A):ms(x.type)?DC(x,A):EC(x,A)}function ns(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Ee(t)||gt(t.type)||(r[_n(t)]=jC(t,e,A.byteLength));return r}function hC(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()===yt||A==="")return{kind:"sentinel",state:"NAN"};let e=aC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=ws(A);return r!==null?{kind:"value",physical:r}:nF(x)}return nF(x)}function nF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?ws(A):null)??0}}function is(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,oC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Vx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Vx[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);F8(x,A,Number(r))}function gC(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,t8(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;FC.has(x.type)&&t<0&&(t=0),F8(x,A,vC(t))}function F8(x,A,e){if(jn(x)){let r=_s(x.type,A,x.byteofs);e=XF(r,e,x.bitmask)}yC(x.type,A,x.byteofs,e)}function yC(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,nC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function kC(x,A,e){let r=String(e);if(WF(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${_n(x)}"`);for(let i=0;i<x.size;i++){let n=i*2<t.length?parseInt(t.substr(i*2,2),16):0;A.setUint8(x.byteofs+i,n)}return}K0.cp1252Pack(A,x.byteofs,x.size,r)}function wC(x,A,e){let r=Kr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${_n(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,uC(r),!1);return}let t=K0.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 _C(x,A,e){if(Sn(x.type))return kC(x,A,e);if(ms(x.type))return wC(x,A,e);let r=hC(x,e);switch(r.kind){case"skip":return;case"sentinel":return is(x,A,r.state);case"value":return gC(x,A,r.physical)}}function ss(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),i=new Map(x.fields.filter(n=>!Ee(n)&&!gt(n.type)).map(n=>[_n(n),n]));for(let[n,F]of Object.entries(A)){let v=i.get(n.toLowerCase());if(!v)throw new bs(n);_C(v,t,F)}return r}var iF=99,SC=256,Ne=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},kt=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ss=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Mi(x){return(x.alias??x.name).toLowerCase()}var $C=class{constructor(x,A,e=St){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=mt(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 Ne(x);let r=mt(e);if(r===null)throw new Ne(x);if(e.edit===iF)throw new kt(e.name);let{stamp:t,...i}=A;this.assertFieldsWritable(e,i);let n=await this.storage.getRowForTag(r),F=ss(await this.resolveScaleRefs(e),i,n?.data??null),v=K0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=fA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:KF(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ne(x);let r=mt(e);if(r===null)throw new Ne(x);let{stamp:t,...i}=A,n=ss(await this.resolveScaleRefs(e),i,null),F=K0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:fA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Kr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ne(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Ne(x);let t=Math.abs(A.count),i=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,i+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(i,i+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 i=Math.max(e,SC);for(let n=0;;n+=i){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:i,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.length<i)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[i,n]of Object.entries(r))i!=="stamp"&&(!e||e.has(i))&&(t[i]=n);return t}rowStamp(x){return Hr(K0.stamp40ToMS(XA(x.stamp)))}boundHex(x){if(x!=null)return fA(K0.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 i=A.get(t);if(!i)return e;let n=BC(r,i);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Mi(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=mt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Ee(r)&&!gt(r.type)).map(r=>[Mi(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===iF)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=>!Ee(t)&&!gt(t.type)).map(t=>Mi(t))),r=new Set;for(let t of A){let i=t.toLowerCase();if(i!=="stamp"){if(!e.has(i))throw new Ss(t);r.add(i)}}return r}},PC=new Set(["$titles","$meta"]);function TC(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 as(x,A){let e=A.toLowerCase();if(PC.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[i,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(i.toLowerCase(),F)}return t}function v8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let i=A?.get(r.toLowerCase());e[i??r]=t}return e}function $t(x,A){if(!x)return null;let e=as(x,A.name);return e||(A.alias?as(x,A.alias):null)}var qC=require("events"),U0="[OfflineSyncManager]",NC=500,IC="site_info",MC=new Set(["local-data-interface.json"]);function Ox(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function LC(x){let A=pn(x);return!!(x&2)||A!==0&&A!==65}function sF(x){return x.filter(A=>(A.filename===Ur||A.filename===Cs)&&A.outcome==="download").map(A=>A.filename)}var Ar="skip-equal",Gr="skip-device-readonly",Li="delete",Te="error",Oi="upload",Ri="uploading-utos",aF="downloading-utos",vn="fetching-device-state",Gi="uploading-files",fn="downloading-files",oF="executing-change-requests",FF="executed",OC="error",Ui="skip-old-stamp",RC=class extends qC.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let i={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",i)}async uploadHistoricTag(x,A,e,r,t){try{let i=await this.storage.getRowForTag(x),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:fA(u.stamp40),flags:i?.flags??0,site_related:i?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,NC,F),this.logger?.info(`${U0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(i){return this.logger?.error(`${U0} historic upload error tag=0x${x.toString(16)}: ${i}`),{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(`${U0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:Ar,dbStamp40:e,deviceStamp40:r};let i=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:fA(t.stamp),flags:i?.flags??0,site_related:i?.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(`${U0} 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(`${U0} 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(Ri,null,0,t);let i=0;for(let n of x){Ox(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(Ri,v?.sTag??`0x${n.toString(16)}`,i,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let p=v.sTag,j=i,w=v.historic?await this.uploadHistoricTag(n,v,E,u,g=>{this.emitProgress(Ri,p,j,t,{recordsReceived:g})}):await this.uploadSingleTag(n,v,E,u);e.set(n,w)}++i}}async pullFileFromDevice(x,A,e,r,t,i){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Gi,x,i,t,{bytesTransferred:E})}),v=Bs(F);if(v!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${v.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:fA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:Oi,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${U0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:Te,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,i,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):i?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:Ar,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:fA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:Ar,dbStamp40:r,deviceStamp40:t}}catch(i){return this.logger?.error(`${U0} file upload error ${x}: ${JSON.stringify(i)}`),{filename:x,outcome:Te,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,i,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,i,n):{filename:x,outcome:Gr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),i=!!(A._flags&1);if(!t)return i?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=XA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,i,e,r):this.decideNonSystemUpload(x,A,t,n,i,e,r)}pullIfReadable(x,A,e,r,t,i,n){return x?this.pullFileFromDevice(A,e,r,t,i,n):void 0}async decideNonSystemUpload(x,A,e,r,t,i,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,i,n):this.decideUploadBySyncLogic(x,A,e,r,t,i,n)}async decideUploadBySyncLogic(x,A,e,r,t,i,n){let F=e.flags_int,v=pn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,i,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,i,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,i,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,i,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),i=t.length;this.emitProgress(Gi,null,0,i);let n=0;for(let[F,v]of t){if(Ox(r),!(F===Cs||F===Ur&&!e)){let u=await this.decideFileUpload(F,v,i,n);u&&A.set(F,u)}this.emitProgress(Gi,F,++n,i)}}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(`${U0} 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 i=A.flags.up?Ar:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:i,dbStamp40:e,deviceStamp40:r});return}if(e>r){let i=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:Gr,dbStamp40:e,deviceStamp40:r};t.set(x,i)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(aF,null,0,t);let i=0;for(let n of x){Ox(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress(aF,F?.sTag??`0x${n.toString(16)}`,++i,t)}}async sendFileToDevice(x,A,e,r,t){let i=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(i*parseInt(F,10)/100);this.emitProgress(fn,x.filename,t,r,{bytesTransferred:v,bytesTotal:i})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,K0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${U0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let i=A?.stamp??0,n=XA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===i?void 0:{filename:x.filename,outcome:Ar,dbStamp40:n,deviceStamp40:i};if(!(!t&&n<i))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:Gr,dbStamp40:n,deviceStamp40:i}:this.sendFileToDevice(x,n,i,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(IC);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${U0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),i=t.filter(p=>p.flags&8),n=t.filter(p=>!(p.flags&8)),F=[...i,...n].filter(p=>p.filename),v=Object.entries(x).filter(([,p])=>p._flags&4).map(([p])=>p),E=F.length;this.emitProgress(fn,null,0,E);let u=0;for(let p of F){if(Ox(r),e&&p.filename===Ur){this.emitProgress(fn,p.filename,++u,E);continue}let j=p.filename===Ur&&!e,w=await this.decideFileDownload(p,x[p.filename],A.get(p.filename),v,j,E,u);w&&A.set(p.filename,w),this.emitProgress(fn,p.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,i,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,i,n):this.decideDownloadMissing(x,r,i,n)}async decideDownloadExisting(x,A,e,r,t,i){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,i,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,i)}async pushToDevice(x,A,e,r){let t=A.stamp,i=XA(x.stamp),n=this.wantDownloadPush(x,A,i,t);if(n==="match")return{filename:x.filename,outcome:Ar,dbStamp40:i,deviceStamp40:t};if(n!=="none"&&!(i===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,i,t,e,r):{filename:x.filename,outcome:Gr,dbStamp40:i,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let i=this.fileContentMatches(A,x),n=pn(t);return n===33||n===1&&e>=r?i?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=XA(x.stamp);if(!(e&&(e.outcome===Oi||e.outcome===Te))){if(!(A._flags&2))return{filename:x.filename,outcome:Gr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Li,dbStamp40:t,deviceStamp40:r}}catch(i){return this.logger?.error(`${U0} file delete error ${x.filename}: ${JSON.stringify(i)}`),{filename:x.filename,outcome:Te,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,i=XA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Li,dbStamp40:i,deviceStamp40:null}}catch(n){return this.logger?.error(`${U0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:Te,dbStamp40:i,deviceStamp40:null}}if(!(x.flags&12)&&LC(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,i,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(`${U0} 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(i=>[i.filename,i]));for(let[i,n]of Object.entries(A))Ox(x),await this.reconcileDeviceFile(i,n,t.get(i)??null);for(let i of r)Ox(x),e.has(i.filename)||await this.dropRowMissingFromDevice(i)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${U0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:fA(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||MC.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(`${U0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Ox(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${U0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null)throw new Error(`${U0} DB metadata missing device_id`);if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${U0} 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 i=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?XA(n):0,v=i&&i.index<e.stamps.length?e.stamps[i.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:i})}return r}async executeChangeRequests(x,A,e,r,t,i){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(oF,null,0,v),v===0)return;let E=new Set,u=0;for(let[p,j]of F){Ox(i);let w=x.get(p),g=w?.sTag??`0x${p.toString(16)}`;this.emitProgress(oF,g,u,v),await this.executeChangeRequestTag(p,g,w,j,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,i)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:XA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,i,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(p=>p.stamp40<=v),u=r.filter(p=>p.stamp40>v);this.pushChangeResults(n,x,A,E,Ui),u.length>0&&await this.coalesceAndSend(x,A,e,u,i,n,F)}async coalesceAndSend(x,A,e,r,t,i,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===Te||!F||!F.data){this.pushChangeResults(i,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(i,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(i,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(i,x,A,r,FF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${U0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(i,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${U0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(i,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(K0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${U0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let i=JSON.parse(t.json);if(!this.isPlainRecord(i))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(i)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:i}=A;return this.resolveBitwiseOp(x,t,i,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${U0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${U0} 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(`${U0} 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,i){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:i})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(i){this.logger?.warn(`${U0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${i}`)}for(let i of x)Ox(r),await this.repullExecutedTag(i,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${U0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let i=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:fA(n),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${U0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${U0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],i=sF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:i.length>0,rebootFilesDeployed:i,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===Ar||n.outcome==="skip-db-readonly"||n.outcome===Gr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===Oi).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Li).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===FF).length,totalErrors:r.filter(n=>n.outcome===Te).length+t.filter(n=>n.outcome===Te).length+e.filter(n=>n.outcome===OC).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Ox(A),this.emitProgress(vn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${U0} requestStamps returned null`);this.emitProgress(vn,"stamps",1,3);let i=await this.utoMaster.requestFileList();this.emitProgress(vn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(vn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],p=await this.isAppInDevPhase();return Ox(A),await this.uploadUtoTags(n,F,v,A),Ox(A),await this.uploadFiles(i,E,p,A),Ox(A),await this.executeChangeRequests(r,t,F,v,u,A),Ox(A),await this.downloadUtoTags(n,F,v,A),Ox(A),await this.downloadFiles(i,E,p,A),Ox(A),sF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${U0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${U0} requestStamps returned null`);let i=r.get(x),n=i?.sTag??`0x${x.toString(16)}`,F=A.map(j=>({stamp40:j.stamp40,user:"",json:j.json})).sort((j,w)=>j.stamp40-w.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,i,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(j=>j.outcome!==Ui)?.outcome??Ui}},GC=require("events"),UC=require("events"),HC=require("events"),JC=5e3,$s=class f8 extends HC.EventEmitter{constructor(A=YA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(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 OF(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((i,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=i,this.bridgeReject=n;let F=f8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let v=new WebSocket(F);v.binaryType="arraybuffer",this.ws=v,this.connectTimeout=setTimeout(()=>{v.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),v.close(),this.settle("reject",new Error("WebSocket connection timeout")))},JC),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},l8="https://lic.mydatanet.at/api/2/";async function c8(x,A=l8){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 E8=class extends UC.EventEmitter{constructor(x=YA){super(),A0(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 c8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let i=new $s(this.logger);i.on("wsConnected",()=>this.emit("wsConnected")),i.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),i.on("wsError",F=>this.emit("wsError",F)),i.on("serverMessage",F=>this.emit("serverMessage",F));let n=await i.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},KC=require("events"),B8="Operation aborted";function zC(x){return x instanceof Error?x.message:String(x)}function Hi(x){if(x?.aborted)throw new Error(B8)}var C8=class extends KC.EventEmitter{constructor(x,A=YA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],i={};for(let n of t)try{i[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(B8);let v=`${n.name.toUpperCase()} sync phase failed: ${zC(F)}`;throw this.logger.error(v),new Error(v)}return this.logger.info(`Debug sync completed (mntMessages=${i.mnt}, mdnMessages=${i.mdn})`),{mntServerMessageCount:i.mnt,mdnServerMessageCount:i.mdn}}async runSyncPhase(x,A,e,r){Hi(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let i=await x.queryServer(r);this.logger.info(`${t} server domain: ${i}`),Hi(r),await x.initiateSync(r),Hi(r);let n=await this.syncWithServer(A,i,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new $s(this.logger),i=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{i=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return i?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},VC=class extends GC.EventEmitter{constructor(x,A,e=YA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(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 E8(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 C8(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(){}},WC=require("events"),wx={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=?"},J0={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+)/},zx=1e4,d8=9e4,u8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function D8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var er="Operation aborted",Ux=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Ps=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},XC=class extends WC.EventEmitter{constructor(x,A=YA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new us("AtCommandHandler")),A0(this,"bufferState",D8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=zx,i)=>this.executeSendAndWait(e,r,t,i),sendRaw:(e,r=zx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(wx.MNT_CFG,J0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(wx.MDN_CFG,J0.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 Ux;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 i=>{if(x!==J0.ERROR&&i.includes(J0.ERROR)){A(),r(new Ps);return}let n=!1,F=i;if(t){let v=i.match(x);v&&(n=!0,F=v[0])}else n=i.includes(x);if(n){A(),e(F);return}i.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,i)=>{if(this.isDisposed){i(new Ux);return}if(r?.aborted){i(new Error(er));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),i(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),i(new Error(er))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let p=this.makeResponseChecker(A,v.cleanup,t,i);this.responseCallback=p,this.activeAbort=()=>{v.cleanup(),i(new Ux)},!x&&this.bufferState.buffer&&p(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(j=>{v.cleanup(),i(j)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}this.bufferState.buffer="";let t=setTimeout(()=>{i(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),i=this.makeCleanup(t);this.activeAbort=()=>{i(),r(new Ux)},this.responseCallback=n=>{u8.test(n)&&(i(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{i(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Ux);return}if(e?.aborted){t(new Error(er));return}this.bufferState.buffer="";let i={cleanup:()=>{}},n=setTimeout(()=>{i.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},zx),F=()=>{i.cleanup(),t(new Error(er))};i.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{i.cleanup(),t(new Ux)},this.responseCallback=E=>{let u=E.match(v);if(u){i.cleanup();let p=u[1].trim();this.logger.info(`Server config ${A}: ${p}`),r(p);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{i.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=zx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=zx){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(wx.MNT_SYNC,J0.OK,zx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(wx.MDN_SYNC,J0.OK,zx,x),await this.executeSendAndWait(null,J0.SYNC_START,zx,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 Ux;if(A?.aborted)throw new Error(er);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${wx.COMPANION_CERT}=${r}`,J0.OK,zx,A),i=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(i,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${wx.COMPANION_CERT}=${F},${n},${v}`,J0.OK,zx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}if(A?.aborted){r(new Error(er));return}this.bufferState.buffer="";let t={cleanup:()=>{}},i=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},zx),n=()=>{t.cleanup(),r(new Error(er))};t.cleanup=this.makeCleanup(i,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Ux)},this.responseCallback=v=>{let E=v.match(J0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(J0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${wx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(wx.COMPANION_CERT_TEST,J0.OK,zx,x),!0}catch(A){if(A instanceof Ux)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(wx.CON_CLOSE,J0.CON_CLOSE,zx,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(J0.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())}},p8=(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))(p8||{}),YC=require("events"),Ji="requesting-cert",Ki="cert-revoked",b8=class os extends YC.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??Dn,{signal:r,atHandler:t}=A,i=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),i();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!Es(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ji),i(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new RF(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),i();let v=F;F=await t.withAtLock(async p=>{let j=await this.presentCertWithRefresh(p,v,n,A);return await p.initiateMdnSync(r),j}),this.emitPhase("ecs-handshake"),i(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await Xi();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await wF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof ht&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new zi(Ki,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await os.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 n=await Xi();return await A.storage.saveKeypair(n),n})(),t=await os.fetchCertOrThrowRevoked(r,A),i={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(i,A.apiConfig.apiHost),i}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let i=await A.sendCompanionCert(e.base64Url,t.signal);if(i.success||i.errorCode===3&&((t.logger??Dn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ji),e=await this.requestAndStoreCert(r,t),i=await A.sendCompanionCert(e.base64Url,t.signal),i.success))return e;throw new zi("cert-presenting",`AT+COMPCERT rejected (code ${i.errorCode??"?"})`,{certErrorCode:i.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 zi?(this.emit("phase",A.phase===Ki?Ki:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof ht?{success:!1,phase:Ji,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(b8,"encodePublicKeyBase64Url",cs);var QC=b8,zi=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},m8=(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))(m8||{}),ZC={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 xd(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 Ad=require("events");function j8(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 h8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function g8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Fs(x,A){return x.map((e,r)=>({name:e.name,displayValue:g8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var ed=2e3,y8=class extends Ad.EventEmitter{constructor(x,A=YA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(wx.APP_GET_METADATA),A=x.includes(J0.OK)?{supported:!0,pinRequired:!1}:x.includes(J0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(J0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(J0.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?`${wx.APP_GET_METADATA}=${x}`:wx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(J0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(J0.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(J0.OK)){let r=j8(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(J0.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?`${wx.APP_GET_DATAVALUE}=${A}`:wx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(J0.OK)){let t=h8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Fs(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(wx.APP_TRIG_MEASURE_TEST)).includes(J0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Ux)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=d8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let i=await t.sendRaw(wx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+i),!i.includes(J0.OK))return this.logger.warn("Measurement trigger rejected: "+i.trim()),{outcome:"rejected",values:[],response:i};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,J0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Ux)throw n;let F="timeout";return n instanceof Ps?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${J0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:i}}})}async startPolling(x,A=ed){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 Fs(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function rd(x,A,e){let r=i=>{if(i instanceof Ux)throw i},t=new y8(x);try{let i=await x.queryMdnServerConfig(e).catch(p=>(r(p),!1)),n=await t.checkSupport().catch(p=>(r(p),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(p=>(r(p),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(i){let[p,j]=await Promise.all([x.queryCompanionCertSupport(e).catch(w=>(r(w),!1)),A?.getCertificate(i)]);E=p,u=j!=null&&Es(j.notAfter)}return{hostname:i,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var td=require("events"),nd={0:"trigger",1:"wakeup",2:"online"},id={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"]},sd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},$x={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},ad=$x.FAILED|$x.ACTIVE|$x.STARTED|$x.RETRY|$x.WAKEUPABLE|$x.EXTSIM|$x.DISABLED|$x.WAKEUP|$x.POSUPDATE_ACTIVE,vF=`${J0.RM2M_STATE}: `;function k8(x=0){let A=(x&$x.WAKEUPABLE)!==0,e="offline",r=A;return x&$x.POSUPDATE_ACTIVE?(e="locating",r=!1):x&$x.RETRY?(e="retry",r=!1):x&$x.STARTED?(e="dialing",r=!1):x&$x.ACTIVE?(e="active",r=!1):x&$x.FAILED?(e="failed",r=A):x&$x.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&$x.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~ad}}function od(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:nd[A]??x}function Fd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:id[A]??["unknown",`itf#${x}`,`itf#${x}`]}function vd(x){if(x.length===0)return null;let A=x.join(",");return sd[A]??A}function w8(x){let A=x.split(","),[e,r,t,i,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=Fd(i),E=i!==void 0?parseInt(i,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:k8(F),uplinkMode:od(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:vd(n)}}function _8(x){let A=x.indexOf(vF);if(A===-1)return null;let e=x.substring(A+vF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?w8(t):null}var fd=5e3,ld=class extends td.EventEmitter{constructor(x,A=Dn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(wx.RM2M_STATE),A=_8(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=fd){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()}},cd=require("events"),S8=class extends cd.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(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}}},Ed=require("events"),$8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},Bd=class extends Ed.EventEmitter{constructor(x=YA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new S8,this.reconnectOptions={...$8,...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})})}},Cd={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},dd={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"},ud=590,Dd=3e4,S0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},lA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},$n=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Ts=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function cA(x){try{return decodeURIComponent(x)}catch{throw new S0("malformed url encoding")}}var pd=2e3,bd=2136;function qs(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=pd&&A<=bd}function zr(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)&&!qs(e))throw new S0(`attribute '${A}' is not valid`)}}function md(x){return typeof x.setMetadataValue=="function"?x:null}function jd(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Ns(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function hd(x){return{status:200,body:x.ctx.siteInfo}}async function gd(x){let{blueprint:A}=x.ctx;if(!A)throw new lA("blueprint unavailable");return{status:200,body:A}}async function yd(x){let{me:A}=x.ctx;if(A==null)throw new lA("no profile stored");return{status:200,body:A}}function P8(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(i){x.logger?.error(`[localApi] device push for tag ${A} failed:`,i)}})()}async function kd(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 wd=1024;function Pt(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 T8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(wd,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Is=26432,ar={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},q8=Object.keys(ar),Tt=["standby","commissioned","offline","commissioning","online"],vs=Tt.reduce((x,A)=>x|ar[A],0)>>>0;function N8(x){let A=0;for(let e of q8)x[e]===!0&&(A|=ar[e]);return A>>>0}function Ms(x,A){let e={};for(let r of q8)x&ar[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function I8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Is);if(!r?.data)return!1;let t=Pt(r.data);if(!t)return!1;let i=!1;if(typeof t.lifecycleFlags=="number"){let n=Ms(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,i=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,i=!0),i}var _d=new Set([...Tt,"service","lifecycle_state"]);function Sd(x,A){let e=Math.max(K0.msToStamp40((x.timeSource??St).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function $d(x){let A=Nd(x.request.body??null);if(!A)throw new S0("invalid or missing request body");Pd(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!qd(r))throw new S0("this site does not support lifecycle flags!");let t=N8(r),i=t;for(let E of Tt){let u=A[E];typeof u=="boolean"&&(i=u?i|ar[E]:i&~ar[E])}if(i>>>=0,i===t)return{status:204,body:""};let n=Sd(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~vs>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:i&vs}}),stamp40:n+1}],v=jd(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Is,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=Ms(i,r),await M8(e),Td(e,F),{status:204,body:""}}function Pd(x){let A=[];for(let[e,r]of Object.entries(x))_d.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 S0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Tt.includes(e)))throw new S0("invalid parameters")}async function Td(x,A){try{let e=await kd(x,Is,A);e==="executed"?await I8(x.storage,x.siteInfo)&&await M8(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 M8(x){await md(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function qd(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function Nd(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 L8(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0('"select" must be an array')}}function Id(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0("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(Ee(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function Ld(x){let A=new Map;for(let e of x.fields){if(Ee(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function Od(x){let A=new Set;for(let e of x.fields)Ee(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function Rd(x,A,e){if(!e)return null;let r=Md(x,A),t=new Set,i=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):i.push(n)}if(i.length>0)throw O8(i);return t}function Gd(x,A){let e=Ld(x),r=[],t=[],i=!1;for(let n of A){if(n==="stamp"){i=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw O8(t);return i||r.unshift("stamp"),r}function Ud(x,A){if(A===void 0)return;let e=Od(x),r=A.map(i=>i.toLowerCase()),t=r.filter(i=>!e.has(i));if(t.length>0)throw new S0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function Hd(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 Ls(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function O8(x){return new S0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Pn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function Jd(x){let A=x.ctx,e=cA(x.params[1]),r=Pn(A.model,e);if(!r)throw new S0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new lA(`no data for container "${e}"`);let i=zd(A,r,t,Kd(x));return{status:200,body:R8(A,e,i)}}function Kd(x){let A=x.query.json??{};return L8(A.select)}function zd(x,A,e,r){let t=Rd(A,$t(x.blueprint??null,A),r);return Hd(e,t)}function R8(x,A,e){let r=x.model.byNameOrAlias(A);return r?v8(e,$t(x.blueprint??null,r)):e}async function Vd(x){let A=x.ctx,e=cA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new lA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new lA(`unknown container "${e}"`);let i=x.query.json??{},n=Id(i.select),F=Ud(r,n);return{status:200,body:Ls(t,F)}}async function Wd(x){let A=cA(x.params[1]);return G8(x,A,"canonical")}async function Xd(x){let A=cA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new lA(`unknown container "${A}"`);return G8(x,A,"legacy")}async function G8(x,A,e){let r=eu(x);if(!r)throw new S0("invalid or missing request body");zr(r);let{stamp:t,...i}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new S0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Pn(n.model,A))throw new S0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new lA(`unknown container "${A}"`);let v=e==="canonical"?Zd(n,F,i):xu(F,i);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&P8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw Yd(E,A,e,n,F)}}function Yd(x,A,e,r,t){if(x instanceof kt){let i=x.field?Qd(r,t,x.field,e):void 0;return e==="canonical"?i?new S0(`no permission to modify container field \`${i}\``):new S0(`no permission to modify container \`${A}\``):i?new $n(`unknown field name(s): ${i}`):new Ts(`no permission to modify '${A}'`)}return x}function Qd(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():$t(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function Zd(x,A,e){if(!A)return e;let r=$t(x.blueprint??null,A),t=new Map;if(r)for(let[i,n]of r)t.set(n,i);else for(let i of A.fields)t.set(i.alias??i.name,(i.alias??i.name).toLowerCase());return U8(A,t,e,i=>new S0(`unknown field name(s): ${i}`))}function xu(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 U8(x,e,A,r=>new $n(`unknown field name(s): ${r}`))}var Au=new Set(["stamp","stamp4","stamp8","datetime"]);function U8(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),i={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let p=t.get(u);if(p&&Au.has(p.type)&&!(typeof E=="string"&&qs(E))){F.push(v);continue}i[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new S0(`value(s) of field(s) ${F.join(",")} are not valid`);return i}function eu(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=ru(r);if(t===void 0)throw new S0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function ru(x){try{return JSON.parse(x)}catch{return}}var H8="x-mt-backfill",J8="pending";async function Os(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"?{[H8]:J8}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var tu=1e3,ln=1e3,K8="20000101",z8="*";async function nu(x){let A=x.query.json??{};Z8(A,["from","until","count","offset","select"]),zr(A);let e=x.ctx,r=cA(x.params[1]),{mapperSelect:t,order:i}=W8(e,r,A.select);X8(e,r);let n=yn(A.from,K8,"from"),F=yn(A.until,z8,"until");Y8(n,F),F!==null&&(F=su(F));let v=au(A.count),E=Q8(A.offset),u=await Os(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:v,offset:E,select:t})).map(j=>V8(x,e,r,Ls(j,i))),headers:u}}async function iu(x){let A=x.query.json??{};Z8(A,["from","until","offset","select"]),zr(A);let e=x.ctx,r=cA(x.params[1]),t=x.params[2],{mapperSelect:i,order:n}=W8(e,r,A.select);X8(e,r);let F=yn(A.from,K8,"from"),v=yn(A.until,z8,"until");Y8(F,v);let E=Q8(A.offset),u=await Os(e,A.from,F),j=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:i}))[0];return j?{status:200,body:V8(x,e,r,Ls(j,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function V8(x,A,e,r){return x.apiVersion==="1"?r:R8(A,e,r)}function W8(x,A,e){let r=L8(e);if(!r)return{mapperSelect:void 0,order:null};let t=Pn(x.model,A);if(!t)return{mapperSelect:r,order:null};let i=Gd(t,r),n=i.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:i}}function X8(x,A){if(!Pn(x.model,A))throw new S0("timeseries does not exist")}function yn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Kr(t)}catch{throw new S0(`attribute '${e}' is not valid`)}}function Y8(x,A){if(x!==null&&A!==null&&x>A)throw new S0('E_BAD_REQUEST "from" value must be older than "until"')}function su(x){let A=K0.msToStamp40(x);return K0.stamp40ToMS(A)>=x&&(A-=1),K0.stamp40ToMS(A)}function au(x){if(x==null||x==="")return tu;let A=Number(x);if(!Number.isInteger(A))throw new S0('"count" must be an integer');if(A===0)throw new S0("`count` cannot be 0");if(A<-ln)throw new S0(`"count" must be greater than or equal to -${ln}`);if(A>ln)throw new S0(`"count" must be less than or equal to ${ln}`);return A}function Q8(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new S0('"offset" must be an integer');if(A<0)throw new S0('"offset" must be greater than or equal to 0');return A}function Z8(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new S0(`"${e}" is not allowed`)}var ou=1e5,Fu="20000101",vu="*";async function fu(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new lA(`unknown container "${e}"`);let i=x.query.json??{};zr(i);let{fromMs:n,untilMs:F}=Eu(i);Bu(n,F);let v=Cu(i),E=du(i),u=xv(t,i.select)??["stamp"],p=kn(i.from)?await Os(r,i.from,n):void 0,j=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:j.length>0?j:void 0})).map(S=>u.map(T=>T==="stamp"?S.stamp:S[T]??null)),headers:p}}async function lu(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,i=t.model.byNameOrAlias(e);if(!i)throw new lA(`unknown container "${e}"`);let n=x.query.json??{};zr(n);let F=xv(i,n.select)??["stamp"],v=cu(n),E=F.filter(j=>j!=="stamp"),p=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:v??null,count:v!==void 0||r==="youngest"?-1:1,select:E.length>0?E:void 0}))[0];return p?{status:200,body:[F.map(j=>j==="stamp"?p.stamp:p[j]??null)]}:{status:200,body:[]}}function cu(x){if(!(!kn(x.until)||x.until==="*"))try{return Kr(String(x.until))??void 0}catch{throw new S0("from or until value invalid")}}function Eu(x){let A=kn(x.from),e=kn(x.until);if((!A||!e)&&!Rs(x.count))throw new S0("missing or invalid parameters (from and until and/or count)");return{fromMs:fF(A?x.from:Fu),untilMs:fF(e?x.until:vu)}}function Bu(x,A){if(x!==null&&A!==null&&x>A)throw new S0('"from" value must be older than "until"')}function fF(x){let A=String(x);try{return Kr(A)}catch{throw new S0(`invalid stamp "${A}"`)}}function Cu(x){if(!Rs(x.count))return ou;if(typeof x.count!="number")throw new S0("invalid parameter count");return x.count}function du(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new S0("invalid parameter offset");return A}function xv(x,A){if(A==null)return;if(!Array.isArray(A))throw new S0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new S0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],i=new Set(x.fields.filter(F=>!Ee(F)).map(F=>(F.alias??F.name).toLowerCase()));i.add("stamp");let n=t.filter(F=>!i.has(F));if(n.length>0)throw new S0(`invalid channel(s) ${n.join(",")}`);return t}function Rs(x){return!!x}function kn(x){return typeof x=="string"?x.trim().length>0:Rs(x)}var uu="device_id";function Du(x){return async A=>(await Tn(A),{status:200,body:await bu(A.ctx,x)})}async function Tn(x){let A=cA(x.params[0]),e=await pu(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new lA(`unknown device "${A}"`)}async function pu(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(uu)}async function bu(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=Pt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=Hr(K0.stamp40ToMS(XA(e.stamp))),r):{}}function Gs(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function mu(x){return async A=>{await Tn(A);let e=gu(A.request.body??null);if(!e)throw new S0("invalid or missing request body");return Gs(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?Pt(r.data)??{}:{};return await Us(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function ju(x){return async A=>(await Tn(A),Gs(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Us(A.ctx,x,e,{}),{status:204,body:""})}))}function hu(x){return async A=>{await Tn(A);let e=cA(A.params[1]);return Gs(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=Pt(r.data)??{},i=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===i&&delete t[n];return await Us(A.ctx,x,r,t),{status:204,body:""}})}}function gu(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 Us(x,A,e,r){let t=T8(JSON.stringify(r),e?.data?.length??0),i=K0.msToStamp40((x.timeSource??St).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:fA(i),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),P8(x,A,t,i)}var Av={"content-type":"application/json"},yu=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:yd,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:hd,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:gd,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:$d,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:iu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:nu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Jd,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Wd,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:lu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:fu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Vd,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Xd,checksUid:!0},...ku()];function ku(){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,i])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Du(i),checksUid:!1})),r=Object.entries(A).flatMap(([t,i])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:mu(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:ju(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:hu(i),checksUid:!1}]);return[...e,...r]}var wu=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function _u(x){let A=Ns();return e=>ev(x,e,A)}async function ev(x,A,e=Ns()){try{let[r,t]=Pu(A.path),i=Tu(t),n=$u(r,x);if(n===null)return sr(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of yu){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!Su(x,u[0]))return sr(404,"E_NOT_FOUND","unknown site");let p=/^\/api\/([12])\//.exec(n)?.[1]??"1",j=await v.handler({request:A,params:u,query:i,ctx:x,session:e,apiVersion:p});return Iu(j)}return sr(404,"E_NOT_FOUND","not found")}catch(r){return tv(r)}}function Su(x,A){return x.allowAnySiteUid===!0||A!==void 0&&cA(A)===x.siteUid}function $u(x,A){let e=wu.exec(x);if(!e)return x;let r=cA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function Pu(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function Tu(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&qu(A,e);return A}function qu(x,A){let e=A.indexOf("="),r=cA(e<0?A:A.slice(0,e)),t=e<0?"":cA(A.slice(e+1));r==="json"?x.json=Nu(t):x.params[r]=t}function Nu(x){try{return JSON.parse(x)}catch{throw new S0("request supplied data which is not json formatted ")}}function Iu(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Av,...x.headers},body:A}}function rv(x,A){return{status:x,headers:{...Av},body:JSON.stringify(A)}}function tv(x){return x instanceof S0||x instanceof Ss||x instanceof bs?sr(400,"E_BAD_REQUEST",x.message):x instanceof $n||x instanceof kt?sr(403,"E_FORBIDDEN",x.message):x instanceof Ts?sr(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof lA||x instanceof Ne?sr(404,"E_NOT_FOUND",x.message):rv(500,{err:x instanceof Error?x.message:String(x)})}function sr(x,A,e){return rv(x,{err:`${A} ${e}`})}function Mu(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 U6={};Il(U6,{default:()=>Gf,deviceExitCode:()=>Rf,program:()=>dA});module.exports=Ml(U6);var Ax=require("commander"),ii=H0(require("chalk"));var ui={name:"@microtronics/studio-cli",version:"1.2.0-alpha.5",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","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-alpha.1","@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/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.1.1",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 hA=H0(require("node:fs/promises"));var dt=require("vscode-uri"),Pa=require("glob"),Fe={readFile(x){return hA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return hA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await hA.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=dt.Utils.dirname(x);return await hA.default.mkdir(e.fsPath,{recursive:!0}),hA.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,Pa.glob)(A,r)).map(i=>{let n=i.replace(/\\/g,"/");return dt.URI.parse(`file:///${n}`)})},async copy(x,A){let e=await hA.default.stat(x.fsPath);return await hA.default.mkdir(dt.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?hA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):hA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await hA.default.mkdir(x.fsPath,{recursive:!0})}};var Yr=require("vscode-uri");var Ce=require("vscode-uri");var Pr=require("vscode-uri");var Ol=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 Zt(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^Ol[(e^x[r])&255];return(e^-1)>>>0}var Ap=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]),ep=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 h0;(w=>{function x(g,S){let[T,q]=S,{line:L,col:R}=g.linePos(T);return{line:Number(L)-1,startCharacter:R-1,endCharacter:R+(q-T)}}w.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(g){return Zt(A.encode(g)).toString(16)}w.generateHashForLibraryName=e;function r(g){return Zt(A.encode(g)).toString(16)}w.generateHashForFilePath=r;function t(g){return Zt(g).toString(16).toUpperCase().padStart(8,"0")}w.generateCRC32ForFileContent=t;function i(g){try{let S=null;return g?.type==="Buffer"?S=Uint8Array.from(g.data):S=g,new TextDecoder("utf8").decode(S)}catch{return""}}w.convertBlobToString=i;function n(g=""){return g.replace(/\r\n|\n\r|\r/g,`
|
|
2199
|
-
`)}w.normalizeLF=n;function F(
|
|
2200
|
-
`)}catch{return[]}}w.convertBlobToStringArray=F,w.isNumeric=
|
|
2198
|
+
`).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||dC(A,t)||t.includes("=")&&uC(A,t)}return CC(A.containers,A.splits)}var a8=null,pC=4;function Jr(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 zr(x){let A=x.trim();if(A==="*")return a8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,j)=>{let w=A.slice(u,u+D);return parseInt(w.length?w.padEnd(D,"0"):j,10)},r=parseInt(A.slice(0,pC),10),t=A.length>=6?e(4,2,"01"):1,s=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,s,n,F,v,E)}var St="NAN",bC="%HEX%",mC=65535,ki=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function qn(x){return(x.alias??x.name).toLowerCase()}function Nn(x){return x==="string"}function wi(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function o8(x){return(x.editmask??"").toUpperCase()===bC}function jC(x,A){return A===void 0||!Number.isFinite(x)?x:_i(x,A)}function _i(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function hC(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),_i(x,A-1-r)}function gC(x){return x==="floatm16"||x==="f32"||x==="f64"}function yC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(gC(x.type)?9:0),r=_i(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return hC(r,t)}function kn(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 F8(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))),n=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|n:r&~n,t>>=1n),s>>=1n,n<<=1n;return Number(r)}var kC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function wn(x){return!!x.bitmask&&kC.has(x.type)}var v8=255,l8=254,c8=253,f8=252,E8=251,wC=207,Si=65535,_n=65534,$i=65533,Ti=65532,Pi=65531;function _C(x){switch(x){case v8:return Si;case l8:return _n;case c8:return $i;case f8:return Ti;case E8:return Pi;default:return x<=31?x:x>wC?_n:(x&15|16)<<(x>>4)-1}}function SC(x){switch(x){case Si:return v8;case _n:return l8;case $i:return c8;case Ti:return f8;case Pi:return E8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var Sn=1023,ai=31,B8=127,Us=8388607,$C=255,oi=15,TC=-14,CF=15;function C8(x){let A=(x&Sn)<<13,e=(x&31744)>>10;if(e===ai)return u8(1024-(x&Sn));e!==0&&(e=e-oi+4+B8);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 d8(x){if(typeof x=="string"||Number.isNaN(x))return mC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Us)+4096,s=(t>Us?1:0)+(e>>>23&$C),n=(t&Us)>>>13;return s!==0&&(s=s-B8-4,s<TC?(n=0,s=0):s>CF?(n=Sn,s=CF+oi):s=s+oi),r|s<<10|n}var PC=["OF","UF","OL","SC"],Fi={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:Si,OF:_n,UF:$i,OL:Ti,SC:Pi}},qC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Vx={NAN:1,OF:2,UF:3,OL:4,SC:5},NC=new Set(["u8","u16","u32","ufm8"]);function IC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function qi(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 Ni(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 C8(A.getUint16(e,!1));case"ufm8":return _C(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function u8(x){switch(x){case Vx.OF:return"OF";case Vx.UF:return"UF";case Vx.OL:return"OL";case Vx.SC:return"SC";default:return St}}var dF=[["NAN",Vx.NAN],["OF",Vx.OF],["UF",Vx.UF],["OL",Vx.OL],["SC",Vx.SC]];function MC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Vx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Vx.NAN:r)}function LC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Vx.NAN:r}function RC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);wn(x)&&(t=BigInt(kn(Number(t),x.bitmask)));let s=Fi.s64;return dF.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=Fi[x.type];if(!e)return 0;let r=Ni(x.type,A,x.byteofs);return wn(x)&&(r=kn(r,x.bitmask)),dF.find(([t])=>r===e[t])?.[1]??0}function D8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&ai)===ai?1024-(e&Sn):0}case"f32":return MC(A,x.byteofs);case"f64":return LC(A,x.byteofs);default:return RC(x,A)}}function p8(x,A){let e=Ni(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(wn(x)&&(e=kn(e,x.bitmask)),e*x.vscale+x.vofs)}function OC(x,A){let e=D8(x,A);if(e!==0)return u8(e);let r=p8(x,A);return Number.isNaN(r)?St:yC(x,r)}function GC(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Nn(x.type)||wi(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return D8(x,e)!==0?NaN:p8(x,e)}function UC(x,A){if(o8(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 K0.cp1252Unpack(A,x.byteofs,x.size)}var b8=25569,m8=864e5;function HC(x){return(x-b8)*m8}function JC(x){return x/m8+b8}function KC(x,A){if(x.type==="datetime")return Jr(HC(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return Jr(K0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),Jr(K0.stamp40ToMS(e))}var zC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function VC(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function WC(x){let A=x.default;if(A===void 0)return;if(Nn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===St)return St;if(zC.has(x.type))return VC(e,0);let r=qi(e);return r!==null?r:A}function XC(x,A,e){return x.byteofs+x.size>e?WC(x):Nn(x.type)?UC(x,A):wi(x.type)?KC(x,A):OC(x,A)}function vi(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Be(t)||_t(t.type)||(r[qn(t)]=XC(t,e,A.byteLength));return r}function YC(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()===St||A==="")return{kind:"sentinel",state:"NAN"};let e=PC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=qi(A);return r!==null?{kind:"value",physical:r}:uF(x)}return uF(x)}function uF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?qi(A):null)??0}}function li(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,qC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Vx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Vx[e]),!1);default:break}let r=Fi[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);j8(x,A,Number(r))}function QC(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,d8(r),!1);default:break}if(Number.isNaN(r))return li(x,A,"NAN");if(!Number.isFinite(r))return li(x,A,"OF");let t=r;NC.has(x.type)&&t<0&&(t=0),j8(x,A,IC(t))}function j8(x,A,e){if(wn(x)){let r=Ni(x.type,A,x.byteofs);e=F8(r,e,x.bitmask)}ZC(x.type,A,x.byteofs,e)}function ZC(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,SC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function xd(x,A,e){let r=String(e);if(o8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${qn(x)}"`);for(let s=0;s<x.size;s++){let n=s*2<t.length?parseInt(t.substr(s*2,2),16):0;A.setUint8(x.byteofs+s,n)}return}K0.cp1252Pack(A,x.byteofs,x.size,r)}function Ad(x,A,e){let r=zr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${qn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,JC(r),!1);return}let t=K0.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 ed(x,A,e){if(Nn(x.type))return xd(x,A,e);if(wi(x.type))return Ad(x,A,e);let r=YC(x,e);switch(r.kind){case"skip":return;case"sentinel":return li(x,A,r.state);case"value":return QC(x,A,r.physical)}}function ci(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(n=>!Be(n)&&!_t(n.type)).map(n=>[qn(n),n]));for(let[n,F]of Object.entries(A)){let v=s.get(n.toLowerCase());if(!v)throw new ki(n);ed(v,t,F)}return r}var DF=99,rd=256,Ne=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},$t=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ii=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Hs(x){return(x.alias??x.name).toLowerCase()}var td=class{constructor(x,A,e=qt){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=yt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=vi(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 Ne(x);let r=yt(e);if(r===null)throw new Ne(x);if(e.edit===DF)throw new $t(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=ci(await this.resolveScaleRefs(e),s,n?.data??null),v=K0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=lA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:s8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ne(x);let r=yt(e);if(r===null)throw new Ne(x);let{stamp:t,...s}=A,n=ci(await this.resolveScaleRefs(e),s,null),F=K0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:lA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return zr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ne(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Ne(x);let t=Math.abs(A.count),s=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,s+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).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,rd);for(let n=0;;n+=s){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.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=vi(x,A.data),t={stamp:this.rowStamp(A)};for(let[s,n]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=n);return t}rowStamp(x){return Jr(K0.stamp40ToMS(YA(x.stamp)))}boundHex(x){if(x!=null)return lA(K0.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 n=GC(r,s);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Hs(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=yt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Be(r)&&!_t(r.type)).map(r=>[Hs(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===DF)throw new $t(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Be(t)&&!_t(t.type)).map(t=>Hs(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new Ii(t);r.add(s)}}return r}},nd=new Set(["$titles","$meta"]);function sd(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 fi(x,A){let e=A.toLowerCase();if(nd.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(s.toLowerCase(),F)}return t}function h8(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 Nt(x,A){if(!x)return null;let e=fi(x,A.name);return e||(A.alias?fi(x,A.alias):null)}var id=require("events"),U0="[OfflineSyncManager]",ad=500,od="site_info",Fd=new Set(["local-data-interface.json"]);function Rx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function vd(x){let A=gn(x);return!!(x&2)||A!==0&&A!==65}function pF(x){return x.filter(A=>(A.filename===Hr||A.filename===mi)&&A.outcome==="download").map(A=>A.filename)}var er="skip-equal",Ur="skip-device-readonly",Js="delete",Pe="error",Ks="upload",zs="uploading-utos",bF="downloading-utos",Bn="fetching-device-state",Vs="uploading-files",Cn="downloading-files",mF="executing-change-requests",jF="executed",ld="error",Ws="skip-old-stamp",cd=class extends id.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(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),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:lA(u.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,ad,F),this.logger?.info(`${U0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(s){return this.logger?.error(`${U0} 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(`${U0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:er,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:lA(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(`${U0} 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(`${U0} 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(zs,null,0,t);let s=0;for(let n of x){Rx(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(zs,v?.sTag??`0x${n.toString(16)}`,s,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let D=v.sTag,j=s,w=v.historic?await this.uploadHistoricTag(n,v,E,u,h=>{this.emitProgress(zs,D,j,t,{recordsReceived:h})}):await this.uploadSingleTag(n,v,E,u);e.set(n,w)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Vs,x,s,t,{bytesTransferred:E})}),v=bi(F);if(v!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${v.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:lA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:Ks,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${U0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:Pe,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,s,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):s?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:er,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:lA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:er,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${U0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:Pe,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,s,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,s,n):{filename:x,outcome:Ur,dbStamp40:r,deviceStamp40:F}}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 n=YA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,s,e,r):this.decideNonSystemUpload(x,A,t,n,s,e,r)}pullIfReadable(x,A,e,r,t,s,n){return x?this.pullFileFromDevice(A,e,r,t,s,n):void 0}async decideNonSystemUpload(x,A,e,r,t,s,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,s,n):this.decideUploadBySyncLogic(x,A,e,r,t,s,n)}async decideUploadBySyncLogic(x,A,e,r,t,s,n){let F=e.flags_int,v=gn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,s,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,s,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,s,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,s,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),s=t.length;this.emitProgress(Vs,null,0,s);let n=0;for(let[F,v]of t){if(Rx(r),!(F===mi||F===Hr&&!e)){let u=await this.decideFileUpload(F,v,s,n);u&&A.set(F,u)}this.emitProgress(Vs,F,++n,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(`${U0} 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?er:"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:Ur,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(bF,null,0,t);let s=0;for(let n of x){Rx(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress(bF,F?.sTag??`0x${n.toString(16)}`,++s,t)}}async sendFileToDevice(x,A,e,r,t){let s=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(s*parseInt(F,10)/100);this.emitProgress(Cn,x.filename,t,r,{bytesTransferred:v,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,K0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${U0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let s=A?.stamp??0,n=YA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:er,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:Ur,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(od);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${U0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...s,...n].filter(D=>D.filename),v=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(Cn,null,0,E);let u=0;for(let D of F){if(Rx(r),e&&D.filename===Hr){this.emitProgress(Cn,D.filename,++u,E);continue}let j=D.filename===Hr&&!e,w=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),v,j,E,u);w&&A.set(D.filename,w),this.emitProgress(Cn,D.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,s,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,s,n):this.decideDownloadMissing(x,r,s,n)}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 n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,s)}async pushToDevice(x,A,e,r){let t=A.stamp,s=YA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:er,dbStamp40:s,deviceStamp40:t};if(n!=="none"&&!(s===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,s,t,e,r):{filename:x.filename,outcome:Ur,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),n=gn(t);return n===33||n===1&&e>=r?s?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=YA(x.stamp);if(!(e&&(e.outcome===Ks||e.outcome===Pe))){if(!(A._flags&2))return{filename:x.filename,outcome:Ur,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Js,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${U0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:Pe,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=YA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Js,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${U0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:Pe,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&vd(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(`${U0} 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,n]of Object.entries(A))Rx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Rx(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(`${U0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:lA(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||Fd.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(`${U0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Rx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${U0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null)throw new Error(`${U0} DB metadata missing device_id`);if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${U0} 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),n=await this.storage.getLatestStampForTag(t),F=n?YA(n):0,v=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:s})}return r}async executeChangeRequests(x,A,e,r,t,s){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(mF,null,0,v),v===0)return;let E=new Set,u=0;for(let[D,j]of F){Rx(s);let w=x.get(D),h=w?.sTag??`0x${D.toString(16)}`;this.emitProgress(mF,h,u,v),await this.executeChangeRequestTag(D,h,w,j,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,s)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:YA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,s,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(D=>D.stamp40<=v),u=r.filter(D=>D.stamp40>v);this.pushChangeResults(n,x,A,E,Ws),u.length>0&&await this.coalesceAndSend(x,A,e,u,s,n,F)}async coalesceAndSend(x,A,e,r,t,s,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===Pe||!F||!F.data){this.pushChangeResults(s,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(s,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(s,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(s,x,A,r,jF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${U0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${U0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(s,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(K0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${U0} 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[n,F]of Object.entries(s)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.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(`${U0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${U0} 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(`${U0} 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 n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.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(`${U0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Rx(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(`${U0} 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),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:lA(n),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 F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${U0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${U0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=pF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===er||n.outcome==="skip-db-readonly"||n.outcome===Ur).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===Ks).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Js).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===jF).length,totalErrors:r.filter(n=>n.outcome===Pe).length+t.filter(n=>n.outcome===Pe).length+e.filter(n=>n.outcome===ld).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Rx(A),this.emitProgress(Bn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${U0} requestStamps returned null`);this.emitProgress(Bn,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(Bn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(Bn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Rx(A),await this.uploadUtoTags(n,F,v,A),Rx(A),await this.uploadFiles(s,E,D,A),Rx(A),await this.executeChangeRequests(r,t,F,v,u,A),Rx(A),await this.downloadUtoTags(n,F,v,A),Rx(A),await this.downloadFiles(s,E,D,A),Rx(A),pF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${U0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${U0} requestStamps returned null`);let s=r.get(x),n=s?.sTag??`0x${x.toString(16)}`,F=A.map(j=>({stamp40:j.stamp40,user:"",json:j.json})).sort((j,w)=>j.stamp40-w.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,s,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(j=>j.outcome!==Ws)?.outcome??Ws}},fd=require("events"),Ed=require("events"),Bd=require("events"),Cd=5e3,Mi=class g8 extends Bd.EventEmitter{constructor(A=QA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(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 x8(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,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=s,this.bridgeReject=n;let F=g8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let v=new WebSocket(F);v.binaryType="arraybuffer",this.ws=v,this.connectTimeout=setTimeout(()=>{v.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),v.close(),this.settle("reject",new Error("WebSocket connection timeout")))},Cd),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},y8="https://lic.mydatanet.at/api/2/";async function k8(x,A=y8){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 w8=class extends Ed.EventEmitter{constructor(x=QA){super(),A0(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 k8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new Mi(this.logger);s.on("wsConnected",()=>this.emit("wsConnected")),s.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),s.on("wsError",F=>this.emit("wsError",F)),s.on("serverMessage",F=>this.emit("serverMessage",F));let n=await s.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},dd=require("events"),_8="Operation aborted";function ud(x){return x instanceof Error?x.message:String(x)}function Xs(x){if(x?.aborted)throw new Error(_8)}var S8=class extends dd.EventEmitter{constructor(x,A=QA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],s={};for(let n of t)try{s[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(_8);let v=`${n.name.toUpperCase()} sync phase failed: ${ud(F)}`;throw this.logger.error(v),new Error(v)}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){Xs(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}`),Xs(r),await x.initiateSync(r),Xs(r);let n=await this.syncWithServer(A,s,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new Mi(this.logger),s=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{s=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=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)),F}finally{n()}}},Dd=class extends fd.EventEmitter{constructor(x,A,e=QA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(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 w8(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 S8(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(){}},pd=require("events"),_x={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=?"},J0={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+)/},zx=1e4,$8=9e4,T8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function P8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var rr="Operation aborted",Ux=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Li=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},bd=class extends pd.EventEmitter{constructor(x,A=QA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new hi("AtCommandHandler")),A0(this,"bufferState",P8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=zx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=zx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(_x.MNT_CFG,J0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(_x.MDN_CFG,J0.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 Ux;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!==J0.ERROR&&s.includes(J0.ERROR)){A(),r(new Li);return}let n=!1,F=s;if(t){let v=s.match(x);v&&(n=!0,F=v[0])}else n=s.includes(x);if(n){A(),e(F);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 Ux);return}if(r?.aborted){s(new Error(rr));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),s(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),s(new Error(rr))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,v.cleanup,t,s);this.responseCallback=D,this.activeAbort=()=>{v.cleanup(),s(new Ux)},!x&&this.bufferState.buffer&&D(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(j=>{v.cleanup(),s(j)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);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 Ux)},this.responseCallback=n=>{T8.test(n)&&(s(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{s(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Ux);return}if(e?.aborted){t(new Error(rr));return}this.bufferState.buffer="";let s={cleanup:()=>{}},n=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`))},zx),F=()=>{s.cleanup(),t(new Error(rr))};s.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new Ux)},this.responseCallback=E=>{let u=E.match(v);if(u){s.cleanup();let D=u[1].trim();this.logger.info(`Server config ${A}: ${D}`),r(D);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=zx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=zx){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(_x.MNT_SYNC,J0.OK,zx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(_x.MDN_SYNC,J0.OK,zx,x),await this.executeSendAndWait(null,J0.SYNC_START,zx,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 Ux;if(A?.aborted)throw new Error(rr);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${_x.COMPANION_CERT}=${r}`,J0.OK,zx,A),s=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(s,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${_x.COMPANION_CERT}=${F},${n},${v}`,J0.OK,zx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}if(A?.aborted){r(new Error(rr));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},zx),n=()=>{t.cleanup(),r(new Error(rr))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Ux)},this.responseCallback=v=>{let E=v.match(J0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(J0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${_x.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(_x.COMPANION_CERT_TEST,J0.OK,zx,x),!0}catch(A){if(A instanceof Ux)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(_x.CON_CLOSE,J0.CON_CLOSE,zx,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(J0.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())}},q8=(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))(q8||{}),md=require("events"),Ys="requesting-cert",Qs="cert-revoked",N8=class Ei extends md.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??hn,{signal:r,atHandler:t}=A,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!pi(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ys),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new A8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();let v=F;F=await t.withAtLock(async D=>{let j=await this.presentCertWithRefresh(D,v,n,A);return await D.initiateMdnSync(r),j}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await ei();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await UF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof wt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new Zs(Qs,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Ei.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 n=await ei();return await A.storage.saveKeypair(n),n})(),t=await Ei.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??hn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ys),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new Zs("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 Zs?(this.emit("phase",A.phase===Qs?Qs:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof wt?{success:!1,phase:Ys,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(N8,"encodePublicKeyBase64Url",Di);var jd=N8,Zs=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},I8=(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))(I8||{}),hd={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 gd(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 yd=require("events");function M8(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 L8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function R8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Bi(x,A){return x.map((e,r)=>({name:e.name,displayValue:R8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var kd=2e3,O8=class extends yd.EventEmitter{constructor(x,A=QA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(_x.APP_GET_METADATA),A=x.includes(J0.OK)?{supported:!0,pinRequired:!1}:x.includes(J0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(J0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(J0.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?`${_x.APP_GET_METADATA}=${x}`:_x.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(J0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(J0.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(J0.OK)){let r=M8(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(J0.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?`${_x.APP_GET_DATAVALUE}=${A}`:_x.APP_GET_DATAVALUE,r=await x(e);if(r.includes(J0.OK)){let t=L8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Bi(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(_x.APP_TRIG_MEASURE_TEST)).includes(J0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Ux)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=$8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(_x.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(J0.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,J0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Ux)throw n;let F="timeout";return n instanceof Li?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${J0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=kd){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 Bi(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function wd(x,A,e){let r=s=>{if(s instanceof Ux)throw s},t=new O8(x);try{let s=await x.queryMdnServerConfig(e).catch(D=>(r(D),!1)),n=await t.checkSupport().catch(D=>(r(D),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(D=>(r(D),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(s){let[D,j]=await Promise.all([x.queryCompanionCertSupport(e).catch(w=>(r(w),!1)),A?.getCertificate(s)]);E=D,u=j!=null&&pi(j.notAfter)}return{hostname:s,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var _d=require("events"),Sd={0:"trigger",1:"wakeup",2:"online"},$d={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"]},Td={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},$x={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Pd=$x.FAILED|$x.ACTIVE|$x.STARTED|$x.RETRY|$x.WAKEUPABLE|$x.EXTSIM|$x.DISABLED|$x.WAKEUP|$x.POSUPDATE_ACTIVE,hF=`${J0.RM2M_STATE}: `;function G8(x=0){let A=(x&$x.WAKEUPABLE)!==0,e="offline",r=A;return x&$x.POSUPDATE_ACTIVE?(e="locating",r=!1):x&$x.RETRY?(e="retry",r=!1):x&$x.STARTED?(e="dialing",r=!1):x&$x.ACTIVE?(e="active",r=!1):x&$x.FAILED?(e="failed",r=A):x&$x.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&$x.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Pd}}function qd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Sd[A]??x}function Nd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:$d[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Id(x){if(x.length===0)return null;let A=x.join(",");return Td[A]??A}function U8(x){let A=x.split(","),[e,r,t,s,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=Nd(s),E=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:G8(F),uplinkMode:qd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Id(n)}}function H8(x){let A=x.indexOf(hF);if(A===-1)return null;let e=x.substring(A+hF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?U8(t):null}var Md=5e3,Ld=class extends _d.EventEmitter{constructor(x,A=hn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(_x.RM2M_STATE),A=H8(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=Md){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()}},Rd=require("events"),J8=class extends Rd.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(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}}},Od=require("events"),K8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},Gd=class extends Od.EventEmitter{constructor(x=QA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new J8,this.reconnectOptions={...K8,...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})})}},Ud={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},Hd={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"},Jd=590,Kd=3e4,S0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},cA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},In=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Ri=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function fA(x){try{return decodeURIComponent(x)}catch{throw new S0("malformed url encoding")}}var zd=2e3,Vd=2136;function Oi(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=zd&&A<=Vd}function Vr(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)&&!Oi(e))throw new S0(`attribute '${A}' is not valid`)}}function Wd(x){return typeof x.setMetadataValue=="function"?x:null}function Xd(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Gi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function Yd(x){return{status:200,body:x.ctx.siteInfo}}async function Qd(x){let{blueprint:A}=x.ctx;if(!A)throw new cA("blueprint unavailable");return{status:200,body:A}}async function Zd(x){let{me:A}=x.ctx;if(A==null)throw new cA("no profile stored");return{status:200,body:A}}function z8(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 xu(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 Au=1024;function It(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 V8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(Au,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Ui=26432,or={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},W8=Object.keys(or),Mt=["standby","commissioned","offline","commissioning","online"],Ci=Mt.reduce((x,A)=>x|or[A],0)>>>0;function X8(x){let A=0;for(let e of W8)x[e]===!0&&(A|=or[e]);return A>>>0}function Hi(x,A){let e={};for(let r of W8)x&or[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function Y8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Ui);if(!r?.data)return!1;let t=It(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=Hi(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var eu=new Set([...Mt,"service","lifecycle_state"]);function ru(x,A){let e=Math.max(K0.msToStamp40((x.timeSource??qt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function tu(x){let A=au(x.request.body??null);if(!A)throw new S0("invalid or missing request body");nu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!iu(r))throw new S0("this site does not support lifecycle flags!");let t=X8(r),s=t;for(let E of Mt){let u=A[E];typeof u=="boolean"&&(s=u?s|or[E]:s&~or[E])}if(s>>>=0,s===t)return{status:204,body:""};let n=ru(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~Ci>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&Ci}}),stamp40:n+1}],v=Xd(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Ui,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=Hi(s,r),await Q8(e),su(e,F),{status:204,body:""}}function nu(x){let A=[];for(let[e,r]of Object.entries(x))eu.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 S0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Mt.includes(e)))throw new S0("invalid parameters")}async function su(x,A){try{let e=await xu(x,Ui,A);e==="executed"?await Y8(x.storage,x.siteInfo)&&await Q8(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 Q8(x){await Wd(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function iu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function au(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 Z8(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0('"select" must be an array')}}function ou(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0("invalid parameter, select must be an array")}}function Fu(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(Be(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function vu(x){let A=new Map;for(let e of x.fields){if(Be(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function lu(x){let A=new Set;for(let e of x.fields)Be(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function cu(x,A,e){if(!e)return null;let r=Fu(x,A),t=new Set,s=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):s.push(n)}if(s.length>0)throw xv(s);return t}function fu(x,A){let e=vu(x),r=[],t=[],s=!1;for(let n of A){if(n==="stamp"){s=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw xv(t);return s||r.unshift("stamp"),r}function Eu(x,A){if(A===void 0)return;let e=lu(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new S0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function Bu(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 Ji(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function xv(x){return new S0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Mn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function Cu(x){let A=x.ctx,e=fA(x.params[1]),r=Mn(A.model,e);if(!r)throw new S0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new cA(`no data for container "${e}"`);let s=uu(A,r,t,du(x));return{status:200,body:Av(A,e,s)}}function du(x){let A=x.query.json??{};return Z8(A.select)}function uu(x,A,e,r){let t=cu(A,Nt(x.blueprint??null,A),r);return Bu(e,t)}function Av(x,A,e){let r=x.model.byNameOrAlias(A);return r?h8(e,Nt(x.blueprint??null,r)):e}async function Du(x){let A=x.ctx,e=fA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new cA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new cA(`unknown container "${e}"`);let s=x.query.json??{},n=ou(s.select),F=Eu(r,n);return{status:200,body:Ji(t,F)}}async function pu(x){let A=fA(x.params[1]);return ev(x,A,"canonical")}async function bu(x){let A=fA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new cA(`unknown container "${A}"`);return ev(x,A,"legacy")}async function ev(x,A,e){let r=ku(x);if(!r)throw new S0("invalid or missing request body");Vr(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new S0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Mn(n.model,A))throw new S0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new cA(`unknown container "${A}"`);let v=e==="canonical"?hu(n,F,s):gu(F,s);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&z8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw mu(E,A,e,n,F)}}function mu(x,A,e,r,t){if(x instanceof $t){let s=x.field?ju(r,t,x.field,e):void 0;return e==="canonical"?s?new S0(`no permission to modify container field \`${s}\``):new S0(`no permission to modify container \`${A}\``):s?new In(`unknown field name(s): ${s}`):new Ri(`no permission to modify '${A}'`)}return x}function ju(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():Nt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function hu(x,A,e){if(!A)return e;let r=Nt(x.blueprint??null,A),t=new Map;if(r)for(let[s,n]of r)t.set(n,s);else for(let s of A.fields)t.set(s.alias??s.name,(s.alias??s.name).toLowerCase());return rv(A,t,e,s=>new S0(`unknown field name(s): ${s}`))}function gu(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 rv(x,e,A,r=>new In(`unknown field name(s): ${r}`))}var yu=new Set(["stamp","stamp4","stamp8","datetime"]);function rv(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),s={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let D=t.get(u);if(D&&yu.has(D.type)&&!(typeof E=="string"&&Oi(E))){F.push(v);continue}s[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new S0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function ku(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=wu(r);if(t===void 0)throw new S0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function wu(x){try{return JSON.parse(x)}catch{return}}var tv="x-mt-backfill",nv="pending";async function Ki(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"?{[tv]:nv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var _u=1e3,dn=1e3,sv="20000101",iv="*";async function Su(x){let A=x.query.json??{};cv(A,["from","until","count","offset","select"]),Vr(A);let e=x.ctx,r=fA(x.params[1]),{mapperSelect:t,order:s}=ov(e,r,A.select);Fv(e,r);let n=$n(A.from,sv,"from"),F=$n(A.until,iv,"until");vv(n,F),F!==null&&(F=Tu(F));let v=Pu(A.count),E=lv(A.offset),u=await Ki(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:v,offset:E,select:t})).map(j=>av(x,e,r,Ji(j,s))),headers:u}}async function $u(x){let A=x.query.json??{};cv(A,["from","until","offset","select"]),Vr(A);let e=x.ctx,r=fA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=ov(e,r,A.select);Fv(e,r);let F=$n(A.from,sv,"from"),v=$n(A.until,iv,"until");vv(F,v);let E=lv(A.offset),u=await Ki(e,A.from,F),j=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:s}))[0];return j?{status:200,body:av(x,e,r,Ji(j,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function av(x,A,e,r){return x.apiVersion==="1"?r:Av(A,e,r)}function ov(x,A,e){let r=Z8(e);if(!r)return{mapperSelect:void 0,order:null};let t=Mn(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=fu(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function Fv(x,A){if(!Mn(x.model,A))throw new S0("timeseries does not exist")}function $n(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return zr(t)}catch{throw new S0(`attribute '${e}' is not valid`)}}function vv(x,A){if(x!==null&&A!==null&&x>A)throw new S0('E_BAD_REQUEST "from" value must be older than "until"')}function Tu(x){let A=K0.msToStamp40(x);return K0.stamp40ToMS(A)>=x&&(A-=1),K0.stamp40ToMS(A)}function Pu(x){if(x==null||x==="")return _u;let A=Number(x);if(!Number.isInteger(A))throw new S0('"count" must be an integer');if(A===0)throw new S0("`count` cannot be 0");if(A<-dn)throw new S0(`"count" must be greater than or equal to -${dn}`);if(A>dn)throw new S0(`"count" must be less than or equal to ${dn}`);return A}function lv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new S0('"offset" must be an integer');if(A<0)throw new S0('"offset" must be greater than or equal to 0');return A}function cv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new S0(`"${e}" is not allowed`)}var qu=1e5,Nu="20000101",Iu="*";async function Mu(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new cA(`unknown container "${e}"`);let s=x.query.json??{};Vr(s);let{fromMs:n,untilMs:F}=Ou(s);Gu(n,F);let v=Uu(s),E=Hu(s),u=fv(t,s.select)??["stamp"],D=Tn(s.from)?await Ki(r,s.from,n):void 0,j=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:j.length>0?j:void 0})).map(S=>u.map(P=>P==="stamp"?S.stamp:S[P]??null)),headers:D}}async function Lu(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 cA(`unknown container "${e}"`);let n=x.query.json??{};Vr(n);let F=fv(s,n.select)??["stamp"],v=Ru(n),E=F.filter(j=>j!=="stamp"),D=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:v??null,count:v!==void 0||r==="youngest"?-1:1,select:E.length>0?E:void 0}))[0];return D?{status:200,body:[F.map(j=>j==="stamp"?D.stamp:D[j]??null)]}:{status:200,body:[]}}function Ru(x){if(!(!Tn(x.until)||x.until==="*"))try{return zr(String(x.until))??void 0}catch{throw new S0("from or until value invalid")}}function Ou(x){let A=Tn(x.from),e=Tn(x.until);if((!A||!e)&&!zi(x.count))throw new S0("missing or invalid parameters (from and until and/or count)");return{fromMs:gF(A?x.from:Nu),untilMs:gF(e?x.until:Iu)}}function Gu(x,A){if(x!==null&&A!==null&&x>A)throw new S0('"from" value must be older than "until"')}function gF(x){let A=String(x);try{return zr(A)}catch{throw new S0(`invalid stamp "${A}"`)}}function Uu(x){if(!zi(x.count))return qu;if(typeof x.count!="number")throw new S0("invalid parameter count");return x.count}function Hu(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new S0("invalid parameter offset");return A}function fv(x,A){if(A==null)return;if(!Array.isArray(A))throw new S0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new S0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!Be(F)).map(F=>(F.alias??F.name).toLowerCase()));s.add("stamp");let n=t.filter(F=>!s.has(F));if(n.length>0)throw new S0(`invalid channel(s) ${n.join(",")}`);return t}function zi(x){return!!x}function Tn(x){return typeof x=="string"?x.trim().length>0:zi(x)}var Ju="device_id";function Ku(x){return async A=>(await Ln(A),{status:200,body:await Vu(A.ctx,x)})}async function Ln(x){let A=fA(x.params[0]),e=await zu(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new cA(`unknown device "${A}"`)}async function zu(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(Ju)}async function Vu(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=It(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=Jr(K0.stamp40ToMS(YA(e.stamp))),r):{}}function Vi(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function Wu(x){return async A=>{await Ln(A);let e=Qu(A.request.body??null);if(!e)throw new S0("invalid or missing request body");return Vi(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?It(r.data)??{}:{};return await Wi(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function Xu(x){return async A=>(await Ln(A),Vi(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Wi(A.ctx,x,e,{}),{status:204,body:""})}))}function Yu(x){return async A=>{await Ln(A);let e=fA(A.params[1]);return Vi(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=It(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await Wi(A.ctx,x,r,t),{status:204,body:""}})}}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}async function Wi(x,A,e,r){let t=V8(JSON.stringify(r),e?.data?.length??0),s=K0.msToStamp40((x.timeSource??qt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:lA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),z8(x,A,t,s)}var Ev={"content-type":"application/json"},Zu=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Zd,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:Yd,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:Qd,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:tu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:$u,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Su,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Cu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:pu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:Lu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:Mu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Du,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:bu,checksUid:!0},...xD()];function xD(){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:Ku(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Wu(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Xu(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:Yu(s),checksUid:!1}]);return[...e,...r]}var AD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function eD(x){let A=Gi();return e=>Bv(x,e,A)}async function Bv(x,A,e=Gi()){try{let[r,t]=nD(A.path),s=sD(t),n=tD(r,x);if(n===null)return ar(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of Zu){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!rD(x,u[0]))return ar(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",j=await v.handler({request:A,params:u,query:s,ctx:x,session:e,apiVersion:D});return oD(j)}return ar(404,"E_NOT_FOUND","not found")}catch(r){return dv(r)}}function rD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&fA(A)===x.siteUid}function tD(x,A){let e=AD.exec(x);if(!e)return x;let r=fA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function nD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function sD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&iD(A,e);return A}function iD(x,A){let e=A.indexOf("="),r=fA(e<0?A:A.slice(0,e)),t=e<0?"":fA(A.slice(e+1));r==="json"?x.json=aD(t):x.params[r]=t}function aD(x){try{return JSON.parse(x)}catch{throw new S0("request supplied data which is not json formatted ")}}function oD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Ev,...x.headers},body:A}}function Cv(x,A){return{status:x,headers:{...Ev},body:JSON.stringify(A)}}function dv(x){return x instanceof S0||x instanceof Ii||x instanceof ki?ar(400,"E_BAD_REQUEST",x.message):x instanceof In||x instanceof $t?ar(403,"E_FORBIDDEN",x.message):x instanceof Ri?ar(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof cA||x instanceof Ne?ar(404,"E_NOT_FOUND",x.message):Cv(500,{err:x instanceof Error?x.message:String(x)})}function ar(x,A,e){return Cv(x,{err:`${A} ${e}`})}function FD(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 Op={};of(Op,{default:()=>cc,deviceExitCode:()=>lc,program:()=>uA});module.exports=Ff(Op);var z0=require("commander"),ls=G0(require("chalk"));var hs={name:"@microtronics/studio-cli",version:"1.2.0-alpha.8",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-alpha.1","@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.1.1",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 gA=G0(require("node:fs/promises"));var bt=require("vscode-uri"),za=require("glob"),ve={readFile(x){return gA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return gA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await gA.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=bt.Utils.dirname(x);return await gA.default.mkdir(e.fsPath,{recursive:!0}),gA.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,za.glob)(A,r)).map(s=>{let n=s.replace(/\\/g,"/");return bt.URI.parse(`file:///${n}`)})},async copy(x,A){let e=await gA.default.stat(x.fsPath);return await gA.default.mkdir(bt.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?gA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):gA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await gA.default.mkdir(x.fsPath,{recursive:!0})}};var xt=require("vscode-uri");var Ce=require("vscode-uri");var Pr=require("vscode-uri");var lf=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 tn(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^lf[(e^x[r])&255];return(e^-1)>>>0}var Zp=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]),xb=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 h0;(w=>{function x(h,S){let[P,q]=S,{line:L,col:O}=h.linePos(P);return{line:Number(L)-1,startCharacter:O-1,endCharacter:O+(q-P)}}w.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(h){return tn(A.encode(h)).toString(16)}w.generateHashForLibraryName=e;function r(h){return tn(A.encode(h)).toString(16)}w.generateHashForFilePath=r;function t(h){return tn(h).toString(16).toUpperCase().padStart(8,"0")}w.generateCRC32ForFileContent=t;function s(h){try{let S=null;return h?.type==="Buffer"?S=Uint8Array.from(h.data):S=h,new TextDecoder("utf8").decode(S)}catch{return""}}w.convertBlobToString=s;function n(h=""){return h.replace(/\r\n|\n\r|\r/g,`
|
|
2199
|
+
`)}w.normalizeLF=n;function F(h){try{let S=s(h);return n(S).split(`
|
|
2200
|
+
`)}catch{return[]}}w.convertBlobToStringArray=F,w.isNumeric=h=>!Array.isArray(h)&&h-parseFloat(h)+1>=0;function E(h){let S="",P=h.byteLength;for(let q=0;q<P;q++)S+=String.fromCharCode(h[q]);return btoa(S)}w.bufferToBase64=E;function u(h,S){let P=`${h}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let q=h;return P.forEach(L=>{let O=L.replace(/\+0$/,""),s0=O.match(/index/)?.[0];if(s0){let M=O.slice(1,-1).split(s0)[1],y=parseInt(M)||0;q=q.replace(L,`${S+y}`)}}),q}else return h}w.patchValueWithArrayInfo=u;let D={};function j(h,S,P){let q=D[h];q&&clearTimeout(q.timer),D[h]={timer:setTimeout(()=>{delete D[h],P()},S),handler:P}}w.defer=j})(h0||={});var lo=require("image-dimensions"),co=require("file-type-checker");var mb=require("cross-fetch/polyfill"),oo=G0(require("openapi-fetch"));var $e=require("vscode-uri");var px=require("vscode-uri");var JA=G0(require("semver"));var Lx="dist/",Va="dde/",gs="dlo/",ys=".studio/",Wa="dfiles/",r0;(v=>{v.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=`${ys}auto/`,e=`${ys}dev/`,r=`${A}dlo/`,t=`${A}dde/`;v.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${v.fileNames.autoInc}`,defaultInc:`${r}${v.fileNames.defaultInc}`,autoUplinkInc:`${r}${v.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${v.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${v.fileNames.autoDdeInc}`,mainDdeInc:`${r}${v.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${v.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${v.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${v.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${v.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${v.fileNames.historyJson}`}},libdeps:`${ys}libdeps/`,dev:{path:e,mirror:`${e}${v.fileNames.devMirror}`,deviceLog:`${e}${v.fileNames.devDeviceLog}`}},dist:{path:Lx,dloPath:`${Lx}dlo/`,mainAmxPath:`${Lx}dlo/${v.fileNames.mainAmx}`,mainAmxReportPath:`${Lx}dlo/${v.fileNames.mainAmxReport}`,ddeXmlPath:`${Lx}dde/${v.fileNames.ddeXml}`,ddeApiPath:`${Lx}api/`,ddeApi:`${Lx}api/${v.fileNames.ddeOpenApi}`,historyJson:`${Lx}dde/${v.fileNames.historyJson}`,povPath:`${Lx}pov`,povDetailsPath:`${Lx}pov/details`,dfilesPath:`${Lx}dfiles`,dfilesProperties:`${Lx}dfiles/properties.json`,bloPath:`${Lx}blo`,reportTemplate:`${Lx}/${v.fileNames.reportTemplate}`,definesTs:`${Lx}defines.ts`,definesAppTs:`${Lx}defines.app.ts`},dlo:{path:gs,mainDLO:`${gs}main.dlo`,mainINI:`${gs}main.ini`},dde:{path:Va,mainDDE:`${Va}main.dde`},dfiles:{path:Wa,mainDFILES:`${Wa}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},v.readme=E=>`# ${E} README
|
|
2201
2201
|
|
|
2202
2202
|
This is the README for your project "${E}". Write a brief description what this project is about.`,v.changelog=`# Changelog
|
|
2203
2203
|
|
|
2204
2204
|
All notable changes to this project will be documented in this file.
|
|
2205
2205
|
|
|
2206
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(r0||={});var
|
|
2207
|
-
`),L=JSON.stringify(j,null,
|
|
2208
|
-
`:"");try{await i.writeFile(v,L)}catch(R){return F.warn(`Could not write "${E}/package.json": ${R}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,i,n,F){for(let v of r.PART_DIST_PATHS){let E=bi.Utils.joinPath(t,v);await A(E,i,n,F)}}r.normalizeLibraryParts=e})(Sr||={});async function Hl(x,A,e,r){try{let t=await x.readFile(A),i=h0.convertBlobToString(t),n=JSON.parse(i);return{raw:i,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function Jl(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 Kl(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 zl(x,A,e,r){let t=!1;for(let i of Gl){let n=x[i];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${i} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${i} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[i]}return t}function Vl(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function Wl(x){let A=x.path.replace(/\\/g,"/");for(let e of Sr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function Xl(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:Ul}var Yl=require("tinytar-fix"),Ql=require("pako"),ve=".studio/libdeps",ut="package.json",Zl="package-lock.json";function Ia(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(ex.dependencyIdToName)}async function xc(x,A,e,r){let t=px.Utils.joinPath(x,ve,r);try{return await A.stat(px.Utils.joinPath(t,K.fileName))?await K.readRaw(t,A):null}catch(i){return e.warn(`Could not read manifest for library "${r}": ${i}`),null}}async function Ac(x,A,e,r){let t=new Set,i=Ia(r),n=null;for(;i.length>0;){let F=i.shift();if(t.has(F))continue;t.add(F);let v=await xc(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||K.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),i.push(...Ia(v))}return n}var ex;(M=>{async function x(y,O=!1){let Y=y.libraryDependencies||{};return O||Object.assign(Y,y.libraryDevDependencies||{}),Y}M.getAll=x;function A(y){return y.split("/")[1]}M.dependencyIdToName=A;function e(y,O){let Y=A(O);return px.Utils.joinPath(y,ve,Y)}M.dependencyToPath=e;function r(y){return isNaN(y.split("")[0])?y.substring(1):y}M.rangeToVersion=r;function t(y,O,Y){if(!HA.satisfies(O,Y,{includePrerelease:!0}))throw new Error(`${y}, version ${O} does not satisfy required constraint ${Y}`)}M.satisfiesSemverRange=t;async function i(y,O,Y={},W=!1){let H=await K.read(y,O),J=H.libraryDependencies||{};W&&Object.assign(J,H.libraryDevDependencies);let a0=Object.keys(Y);for(let t0 of a0)if(Object.hasOwn(J,t0)){let Z=Y[t0],s0=J[t0],U=r(Z),v0=r(s0),f0=HA.compare(U,v0);f0===1?(J[t0]=Z,t(t0,U,s0)):f0===-1&&(J[t0]=s0,t(t0,v0,Z))}else J[t0]=Y[t0];return J}M.validateDependencyTree=i;async function n(y,O,Y,W,H){let J=r(H),a0=px.Utils.joinPath(y,ve,W);try{let t0=await K.read(a0,O);return HA.gte(t0.version,J)&&t0.publisher.toLowerCase()===Y.toLowerCase()}catch{return!1}}M.isDependencyInstalled=n;async function F(y,O,Y,W){let H=px.Utils.joinPath(y,ve,W);await O.rm(H).catch(J=>{Y.error("removeExisting",J)})}M.removeExisting=F;async function v(y,O,Y,W,H){let J=Yl.untar(Ql.ungzip(H));await F(y,O,Y,W);for(let a0 of J.values())try{let t0=px.Utils.joinPath(y,ve,W,a0.name);await O.writeFile(t0,a0.data)}catch(t0){Y.error("Extracting lib",t0)}}M.extractLibraryContent=v;async function E(y,O,Y,W,H,J,a0,t0=!1){let[Z,s0]=J.split("/");if(a0&&await n(y,O,Z,s0,a0))return;await F(y,O,Y,s0);let U=await Fx.getLibraryProfile(H,Z,s0,W),v0=a0?U.versions?.find(tx=>HA.eq(tx.name,M.rangeToVersion(a0))):U.versions[0];if(!v0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let f0=v0.files.find(tx=>tx.name==="studio.json"),d0=(await ec(H,f0.downloadUrl)).libraryDependencies||{},T0={...d0};T0[J]=`^${v0.name}`,await i(y,O,T0,t0);for(let[tx,rA]of Object.entries(d0))await E(y,O,Y,W,H,tx,rA,t0);let L0=v0.files.find(tx=>tx.name==="library.tar.gz");if(!L0)throw new Error(`Library ${J} has no content!`);let Ex=await Fx.fetchCustomContent(H,L0.downloadUrl);await v(y,O,Y,s0,Ex),await R(y,O,Y,s0,t0);let Xx=await K.read(y,O),$A=Xx.libraryDependencies||{},PA=Xx.libraryDevDependencies||{},fx=t0?PA:$A;fx[J]=`^${v0.name}`,Xx.libraryDependencies=$A,Xx.libraryDevDependencies=PA,await K.write(y,O,Xx)}M.installDependency=E;async function u(y,O,Y,W,H){let J=await K.read(y,O),a0=J.libraryDependencies||{},t0=J.libraryDevDependencies||{},Z=Object.assign(a0,t0);for(let[s0,U]of Object.entries(Z)){let v0=Object.hasOwn(t0,s0);await E(y,O,Y,W,H,s0,U,v0)}for(let[s0]of Object.entries(Z)){let U=A(s0),v0=Object.hasOwn(t0,s0);await R(y,O,Y,U,v0)}Y.done(`Installed ${Object.entries(Z).length} dependencies`)}M.installDependencies=u;async function p(y,O,Y,W,H){let J=await K.read(y,O),a0=J.libraryDependencies||{},t0=J.libraryDevDependencies||{},Z=Object.assign(a0,t0),s0=`${W}/${H}`;delete Z[s0];let U=await rc(y,O,Z);if(!Object.hasOwn(U,s0))await i0(y,O,Y,H),await F(y,O,Y,H),delete t0[s0],delete a0[s0],await K.write(y,O,J);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}M.uninstallDependency=p;async function j(y,O){try{let W=(await Ga(px.Utils.joinPath(y,ut),O)).workspaces;if(Array.isArray(W)&&W.every(J=>typeof J=="string")&&W.length>0)return W;let H=W?.packages;return Array.isArray(H)&&H.every(J=>typeof J=="string")&&H.length>0?H:null}catch{return null}}M.readNpmWorkspacePatterns=j;function w(y,O){let Y=H=>H.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),W=Y(y);return O.some(H=>{let J=Y(H);return J===W||(0,Ra.minimatch)(W,J)})}M.isPathInWorkspaces=w;function g(y,O){if(!O)return{rootInstall:!1,partInstalls:y.map(H=>H.workingPath)};let Y=[],W=!1;for(let H of y)w(H.workingPath,O)?W=!0:Y.push(H.workingPath);return{rootInstall:W,partInstalls:Y}}M.planNpmInstalls=g;async function S(y,O,Y){let W=await K.read(y,O),H=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(A)),J=new Set,a0=[...H];for(;a0.length>0;){let t0=a0.shift();if(J.has(t0))continue;J.add(t0);let Z=px.Utils.joinPath(y,ve,t0);try{let s0=px.Utils.joinPath(Z,K.fileName);if(!await O.stat(s0))continue;let U=await K.readRaw(Z,O);await Sr.normalizeLibraryParts(Z,O,U,Y),a0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(s0){Y.warn(`Could not normalize library parts for "${t0}": ${s0}`)}}}M.normalizeInstalledLibraryParts=S;async function T(y,O,Y){let W=await K.read(y,O),H=await Ac(y,O,Y,W);if(!H)return;let J=W.engines?.backend;if(!J||K.compareBackendVersion(H.backend,J)>0){let a0=J?`"${J}"`:"none",t0=K.isLibrary(W)?"library":"application",Z=K.isLibrary(W)?" 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 ${t0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${Z}`)}}M.validateMinimumBackendVersion=T;async function q(y,O,Y){await S(y,O,Y);let W=await K.read(y,O),H=[];W.pov?.details?.workingPath&&H.push({name:"pov",workingPath:W.pov.details.workingPath}),W.blo?.workingPath&&H.push({name:"blo",workingPath:W.blo.workingPath});let J=[];for(let s0 of H){let U=px.Utils.joinPath(y,s0.workingPath),v0=px.Utils.joinPath(U,ut);await O.stat(v0)&&J.push(s0)}if(J.length===0)return;let a0=await j(y,O),{rootInstall:t0,partInstalls:Z}=g(J,a0);if(t0){let s0=J.filter(U=>!Z.includes(U.workingPath)).map(U=>U.workingPath).join(", ");Y.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${s0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await xn(y,"npm install --no-audit --no-fund",Y)}for(let s0 of J){if(!Z.includes(s0.workingPath))continue;a0?Y.warn(`${s0.workingPath} (${s0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Y.info(`Installing npm dependencies for ${s0.name} (${s0.workingPath})...`);let U=px.Utils.joinPath(y,s0.workingPath);await ic(U,O,Y)}}M.installNpmInApmParts=q;async function L(y,O,Y){let W=await K.read(y,O),H=await x(W),J=[],a0=r0.filePaths[Y].path,t0=Y===u0.Part.dlo?"inc":"dfiles";for(let Z in H){let s0=M.dependencyToPath(y,Z),U=M.dependencyIdToName(Z),v0=px.Utils.joinPath(s0,a0,`${U}.${t0}`);await O.stat(v0)&&J.push({name:U,path:v0})}if(K.isLibrary(W)){let Z=px.Utils.joinPath(y,a0,`${W.name}.${t0}`);await O.stat(Z)&&J.push({name:W.name,path:Z})}return J}M.getApmPartDependencies=L;async function R(y,O,Y,W,H){let J=await K.read(y,O),a0=[{partName:"blo",partDistPath:"blo",workingPath:J.blo?.workingPath},{partName:"pov",partDistPath:"pov/details",workingPath:J.pov?.details?.workingPath}];for(let{partName:t0,partDistPath:Z,workingPath:s0}of a0){if(!s0)continue;let U=px.Utils.joinPath(y,ve,W,"dist",...Z.split("/"),ut);if(await O.stat(U))try{let f0=await Ma(y,O,s0),B0=H?"devDependencies":"dependencies";f0[B0]=f0[B0]||{};let d0=s0.split("/").length,T0=Array(d0).fill("..").join("/");f0[B0][W]=`file:${T0}/${ve}/${W}/dist/${Z}`,await La(y,O,s0,f0),Y.info(`Linked ${W} to ${t0} (${s0})`)}catch(f0){Y.warn(`Could not link ${W} to ${t0}: ${f0}`)}}}M.linkLibraryApmParts=R;async function i0(y,O,Y,W){let H=await K.read(y,O),J=[{partName:"blo",workingPath:H.blo?.workingPath},{partName:"pov",workingPath:H.pov?.details?.workingPath}];for(let{partName:a0,workingPath:t0}of J)if(t0)try{let Z=await Ma(y,O,t0),s0=!1;Z.dependencies?.[W]?.startsWith("file:")&&(delete Z.dependencies[W],s0=!0),Z.devDependencies?.[W]?.startsWith("file:")&&(delete Z.devDependencies[W],s0=!0),s0&&(await La(y,O,t0,Z),Y.info(`Unlinked ${W} from ${a0}`))}catch(Z){Y.warn(`Could not unlink ${W} from ${a0}: ${Z}`)}}M.unlinkLibraryApmParts=i0})(ex||={});async function Ga(x,A){let e=await A.readFile(x);return JSON.parse(h0.convertBlobToString(e))}function Ma(x,A,e){return Ga(px.Utils.joinPath(x,e,ut),A)}async function La(x,A,e,r){let t=px.Utils.joinPath(x,e,ut),i=JSON.stringify(r,null," ")+`
|
|
2209
|
-
`;await A.writeFile(t,
|
|
2206
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(r0||={});var xo=G0(require("node:child_process")),Ao=require("minimatch");var ks=require("vscode-uri");var Xa=G0(require("semver")),cf="package.json",ff=["peerDependencies","dependencies","optionalDependencies"],Ef=" ",$r;(r=>{r.PART_DIST_PATHS=[r0.filePaths.dist.bloPath,r0.filePaths.dist.povDetailsPath];async function A(t,s,n,F){let v=ks.Utils.joinPath(t,cf),E=`${n.name}/${pf(t)}`;if(!await s.stat(v))return!1;let D=await Bf(s,v,E,F);if(!D)return!1;let j=D.pkg;if(typeof j!="object"||j===null||Array.isArray(j))return F.warn(`"${E}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!Xa.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;Cf(j,n,E,F);let w=df(j,n.version);j=w.pkg;let h=w.changed;h&&F.warn(`Patched version "${w.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=Df(n);if(uf(j,S,E,F)&&(h=!0),!h)return!1;let P=bf(D.raw),q=D.raw.endsWith(`
|
|
2207
|
+
`),L=JSON.stringify(j,null,P)+(q?`
|
|
2208
|
+
`:"");try{await s.writeFile(v,L)}catch(O){return F.warn(`Could not write "${E}/package.json": ${O}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,n,F){for(let v of r.PART_DIST_PATHS){let E=ks.Utils.joinPath(t,v);await A(E,s,n,F)}}r.normalizeLibraryParts=e})($r||={});async function Bf(x,A,e,r){try{let t=await x.readFile(A),s=h0.convertBlobToString(t),n=JSON.parse(s);return{raw:s,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function Cf(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 df(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 uf(x,A,e,r){let t=!1;for(let s of ff){let n=x[s];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${s} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[s]}return t}function Df(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function pf(x){let A=x.path.replace(/\\/g,"/");for(let e of $r.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function bf(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:Ef}var mf=require("tinytar-fix"),jf=require("pako"),le=".studio/libdeps",mt="package.json",hf="package-lock.json";function Ya(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(ex.dependencyIdToName)}async function gf(x,A,e,r){let t=px.Utils.joinPath(x,le,r);try{return await A.stat(px.Utils.joinPath(t,K.fileName))?await K.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function yf(x,A,e,r){let t=new Set,s=Ya(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let v=await gf(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||K.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),s.push(...Ya(v))}return n}var ex;(M=>{async function x(y,R=!1){let Y=y.libraryDependencies||{};return R||Object.assign(Y,y.libraryDevDependencies||{}),Y}M.getAll=x;function A(y){return y.split("/")[1]}M.dependencyIdToName=A;function e(y,R){let Y=A(R);return px.Utils.joinPath(y,le,Y)}M.dependencyToPath=e;function r(y){return isNaN(y.split("")[0])?y.substring(1):y}M.rangeToVersion=r;function t(y,R,Y){if(!JA.satisfies(R,Y,{includePrerelease:!0}))throw new Error(`${y}, version ${R} does not satisfy required constraint ${Y}`)}M.satisfiesSemverRange=t;async function s(y,R,Y={},W=!1){let H=await K.read(y,R),J=H.libraryDependencies||{};W&&Object.assign(J,H.libraryDevDependencies);let a0=Object.keys(Y);for(let t0 of a0)if(Object.hasOwn(J,t0)){let Z=Y[t0],i0=J[t0],U=r(Z),v0=r(i0),l0=JA.compare(U,v0);l0===1?(J[t0]=Z,t(t0,U,i0)):l0===-1&&(J[t0]=i0,t(t0,v0,Z))}else J[t0]=Y[t0];return J}M.validateDependencyTree=s;async function n(y,R,Y,W,H){let J=r(H),a0=px.Utils.joinPath(y,le,W);try{let t0=await K.read(a0,R);return JA.gte(t0.version,J)&&t0.publisher.toLowerCase()===Y.toLowerCase()}catch{return!1}}M.isDependencyInstalled=n;async function F(y,R,Y,W){let H=px.Utils.joinPath(y,le,W);await R.rm(H).catch(J=>{Y.error("removeExisting",J)})}M.removeExisting=F;async function v(y,R,Y,W,H){let J=mf.untar(jf.ungzip(H));await F(y,R,Y,W);for(let a0 of J.values())try{let t0=px.Utils.joinPath(y,le,W,a0.name);await R.writeFile(t0,a0.data)}catch(t0){Y.error("Extracting lib",t0)}}M.extractLibraryContent=v;async function E(y,R,Y,W,H,J,a0,t0=!1){let[Z,i0]=J.split("/");if(a0&&await n(y,R,Z,i0,a0))return;await F(y,R,Y,i0);let U=await Fx.getLibraryProfile(H,Z,i0,W),v0=a0?U.versions?.find(tx=>JA.eq(tx.name,M.rangeToVersion(a0))):U.versions[0];if(!v0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let l0=v0.files.find(tx=>tx.name==="studio.json"),d0=(await kf(H,l0.downloadUrl)).libraryDependencies||{},P0={...d0};P0[J]=`^${v0.name}`,await s(y,R,P0,t0);for(let[tx,rA]of Object.entries(d0))await E(y,R,Y,W,H,tx,rA,t0);let L0=v0.files.find(tx=>tx.name==="library.tar.gz");if(!L0)throw new Error(`Library ${J} has no content!`);let Ex=await Fx.fetchCustomContent(H,L0.downloadUrl);await v(y,R,Y,i0,Ex),await O(y,R,Y,i0,t0);let Xx=await K.read(y,R),TA=Xx.libraryDependencies||{},PA=Xx.libraryDevDependencies||{},lx=t0?PA:TA;lx[J]=`^${v0.name}`,Xx.libraryDependencies=TA,Xx.libraryDevDependencies=PA,await K.write(y,R,Xx)}M.installDependency=E;async function u(y,R,Y,W,H){let J=await K.read(y,R),a0=J.libraryDependencies||{},t0=J.libraryDevDependencies||{},Z=Object.assign(a0,t0);for(let[i0,U]of Object.entries(Z)){let v0=Object.hasOwn(t0,i0);await E(y,R,Y,W,H,i0,U,v0)}for(let[i0]of Object.entries(Z)){let U=A(i0),v0=Object.hasOwn(t0,i0);await O(y,R,Y,U,v0)}Y.done(`Installed ${Object.entries(Z).length} dependencies`)}M.installDependencies=u;async function D(y,R,Y,W,H){let J=await K.read(y,R),a0=J.libraryDependencies||{},t0=J.libraryDevDependencies||{},Z=Object.assign(a0,t0),i0=`${W}/${H}`;delete Z[i0];let U=await wf(y,R,Z);if(!Object.hasOwn(U,i0))await s0(y,R,Y,H),await F(y,R,Y,H),delete t0[i0],delete a0[i0],await K.write(y,R,J);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}M.uninstallDependency=D;async function j(y,R){try{let W=(await eo(px.Utils.joinPath(y,mt),R)).workspaces;if(Array.isArray(W)&&W.every(J=>typeof J=="string")&&W.length>0)return W;let H=W?.packages;return Array.isArray(H)&&H.every(J=>typeof J=="string")&&H.length>0?H:null}catch{return null}}M.readNpmWorkspacePatterns=j;function w(y,R){let Y=H=>H.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),W=Y(y);return R.some(H=>{let J=Y(H);return J===W||(0,Ao.minimatch)(W,J)})}M.isPathInWorkspaces=w;function h(y,R){if(!R)return{rootInstall:!1,partInstalls:y.map(H=>H.workingPath)};let Y=[],W=!1;for(let H of y)w(H.workingPath,R)?W=!0:Y.push(H.workingPath);return{rootInstall:W,partInstalls:Y}}M.planNpmInstalls=h;async function S(y,R,Y){let W=await K.read(y,R),H=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(A)),J=new Set,a0=[...H];for(;a0.length>0;){let t0=a0.shift();if(J.has(t0))continue;J.add(t0);let Z=px.Utils.joinPath(y,le,t0);try{let i0=px.Utils.joinPath(Z,K.fileName);if(!await R.stat(i0))continue;let U=await K.readRaw(Z,R);await $r.normalizeLibraryParts(Z,R,U,Y),a0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(i0){Y.warn(`Could not normalize library parts for "${t0}": ${i0}`)}}}M.normalizeInstalledLibraryParts=S;async function P(y,R,Y){let W=await K.read(y,R),H=await yf(y,R,Y,W);if(!H)return;let J=W.engines?.backend;if(!J||K.compareBackendVersion(H.backend,J)>0){let a0=J?`"${J}"`:"none",t0=K.isLibrary(W)?"library":"application",Z=K.isLibrary(W)?" 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 ${t0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${Z}`)}}M.validateMinimumBackendVersion=P;async function q(y,R,Y){await S(y,R,Y);let W=await K.read(y,R),H=[];W.pov?.details?.workingPath&&H.push({name:"pov",workingPath:W.pov.details.workingPath}),W.blo?.workingPath&&H.push({name:"blo",workingPath:W.blo.workingPath});let J=[];for(let i0 of H){let U=px.Utils.joinPath(y,i0.workingPath),v0=px.Utils.joinPath(U,mt);await R.stat(v0)&&J.push(i0)}if(J.length===0)return;let a0=await j(y,R),{rootInstall:t0,partInstalls:Z}=h(J,a0);if(t0){let i0=J.filter(U=>!Z.includes(U.workingPath)).map(U=>U.workingPath).join(", ");Y.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${i0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await nn(y,"npm install --no-audit --no-fund",Y)}for(let i0 of J){if(!Z.includes(i0.workingPath))continue;a0?Y.warn(`${i0.workingPath} (${i0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Y.info(`Installing npm dependencies for ${i0.name} (${i0.workingPath})...`);let U=px.Utils.joinPath(y,i0.workingPath);await $f(U,R,Y)}}M.installNpmInApmParts=q;async function L(y,R,Y){let W=await K.read(y,R),H=await x(W),J=[],a0=r0.filePaths[Y].path,t0=Y===u0.Part.dlo?"inc":"dfiles";for(let Z in H){let i0=M.dependencyToPath(y,Z),U=M.dependencyIdToName(Z),v0=px.Utils.joinPath(i0,a0,`${U}.${t0}`);await R.stat(v0)&&J.push({name:U,path:v0})}if(K.isLibrary(W)){let Z=px.Utils.joinPath(y,a0,`${W.name}.${t0}`);await R.stat(Z)&&J.push({name:W.name,path:Z})}return J}M.getApmPartDependencies=L;async function O(y,R,Y,W,H){let J=await K.read(y,R),a0=[{partName:"blo",partDistPath:"blo",workingPath:J.blo?.workingPath},{partName:"pov",partDistPath:"pov/details",workingPath:J.pov?.details?.workingPath}];for(let{partName:t0,partDistPath:Z,workingPath:i0}of a0){if(!i0)continue;let U=px.Utils.joinPath(y,le,W,"dist",...Z.split("/"),mt);if(await R.stat(U))try{let l0=await Qa(y,R,i0),B0=H?"devDependencies":"dependencies";l0[B0]=l0[B0]||{};let d0=i0.split("/").length,P0=Array(d0).fill("..").join("/");l0[B0][W]=`file:${P0}/${le}/${W}/dist/${Z}`,await Za(y,R,i0,l0),Y.info(`Linked ${W} to ${t0} (${i0})`)}catch(l0){Y.warn(`Could not link ${W} to ${t0}: ${l0}`)}}}M.linkLibraryApmParts=O;async function s0(y,R,Y,W){let H=await K.read(y,R),J=[{partName:"blo",workingPath:H.blo?.workingPath},{partName:"pov",workingPath:H.pov?.details?.workingPath}];for(let{partName:a0,workingPath:t0}of J)if(t0)try{let Z=await Qa(y,R,t0),i0=!1;Z.dependencies?.[W]?.startsWith("file:")&&(delete Z.dependencies[W],i0=!0),Z.devDependencies?.[W]?.startsWith("file:")&&(delete Z.devDependencies[W],i0=!0),i0&&(await Za(y,R,t0,Z),Y.info(`Unlinked ${W} from ${a0}`))}catch(Z){Y.warn(`Could not unlink ${W} from ${a0}: ${Z}`)}}M.unlinkLibraryApmParts=s0})(ex||={});async function eo(x,A){let e=await A.readFile(x);return JSON.parse(h0.convertBlobToString(e))}function Qa(x,A,e){return eo(px.Utils.joinPath(x,e,mt),A)}async function Za(x,A,e,r){let t=px.Utils.joinPath(x,e,mt),s=JSON.stringify(r,null," ")+`
|
|
2209
|
+
`;await A.writeFile(t,s)}async function kf(x,A){return await Fx.fetchCustomContent(x,A,!0)}async function wf(x,A,e){let r={};function t(E,u,D,j=!1){let w=r[E],h=ex.rangeToVersion(D),S=ex.rangeToVersion(D);(!w||JA.gt(h,S))&&(r[E]={publisherId:u,version:D,installed:j})}let s=Object.entries(e).map(([E,u])=>{let[D,j]=E.split("/");return t(j,D,u,!0),j}),n={};for(let E of s)try{let u=await _f(x,A,E);n[E]=Object.entries(u).map(([D,j])=>{let[w,h]=D.split("/");return t(h,w,j),h}),s.push(...n[E])}catch{let D=r[E];throw new Error(`Please import "${D.publisherId}/${E}" first.`)}let F=[];for(;;){let E=s.filter(u=>F.includes(u)?!1:(n[u]||[]).every(j=>F.includes(j)));if(F.push(...E),s.length===F.length||!E.length)break}let v={};return[...new Set(F)].forEach(E=>{let{version:u,publisherId:D}=r[E],j=Sf(D,E,u);v[j.libraryId]=j.libraryVersion}),v}async function _f(x,A,e){let r=px.Utils.joinPath(x,le,e);return(await K.read(r,A))?.libraryDependencies||{}}function Sf(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function nn(x,A,e){return new Promise((r,t)=>{xo.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{if(n&&e.log(n),F&&e.error(F),s){t(new Error(`${s.message}
|
|
2210
2210
|
${n}
|
|
2211
|
-
${F}`));return}r()})})}async function
|
|
2212
|
-
`))u.push(` ${L}`)}let
|
|
2213
|
-
`))}t.exportDefinesTs=e;function r(
|
|
2214
|
-
`)),r=[]}return A}function
|
|
2211
|
+
${F}`));return}r()})})}async function $f(x,A,e){let r=px.Utils.joinPath(x,hf);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await nn(x,"npm install",e);return}try{await nn(x,"npm 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 nn(x,"npm install",e)}}var no=G0(require("ini"));var Tf=h0.convertBlobToString,Pf=r0.filePaths.dlo.path,vx;(t=>{let x;(v=>(v.lucky="lucky",v.wynni="wynni",v.production="production"))(x=t.ENV||={});async function A(s,n,F){let v=await K.read(s,n),E=await ex.getAll(v),u={},D={},j={};for(let L in E){let O=ex.dependencyToPath(s,L),s0=ex.dependencyIdToName(L),M=$e.Utils.joinPath(O,Pf,`${s0}.ini`);await Tr(n,M,u,D,j,s0);let y=$e.Utils.joinPath(O,r0.filePaths.defaultsIni);await Tr(n,y,u,D,j,s0)}if(K.isLibrary(v)){let L=$e.Utils.joinPath(s,r0.filePaths.dlo.path,`${v.name}.ini`);F&&await n.stat(L)&&F.warn(`dlo/${v.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await Tr(n,L,u,D,j,v.name)}let w=v.dlo?.iniFile||r0.filePaths.dlo.mainINI,h=$e.Utils.joinPath(s,w);F&&await n.stat(h)&&F.warn(`${w} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Mf(w);if(await Tr(n,h,u,D,j,S),K.isLibrary(v)){let L=$e.Utils.joinPath(s,r0.filePaths.defaultsIni);await Tr(n,L,u,D,j,"defaults")}let P=qf(v,u,D,j),q=$e.Utils.joinPath(s,r0.filePaths.appIni);return await Tr(n,q,u,D,j,"app"),{flat:u,sections:D,definesWithSource:j,defaultsOnly:P}}t.read=A;async function e(s,n,F,v){let E=Object.entries(F.flat),u=[];for(let[w,h]of E){let S=F.definesWithSource[w];if(S?.comment){let q=ro(S.comment);for(let L of q.split(`
|
|
2212
|
+
`))u.push(` ${L}`)}let P=to(h)?"number":"string";u.push(` ${w}: ${P};`)}let D=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...u," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[w,h]of E){let S=F.definesWithSource[w];if(S?.comment&&D.push(ro(S.comment)),to(h))D.push(`globalThis.STUDIO_DEFINES['${w}'] = ${Number(h)};`);else{let P=h.replace(/\\/g,"\\\\").replace(/'/g,"\\'");D.push(`globalThis.STUDIO_DEFINES['${w}'] = '${P}';`)}}D.push(""),D.push("export {};"),D.push("");let j=$e.Utils.joinPath(s,v??r0.filePaths.dist.definesTs);await n.writeFile(j,D.join(`
|
|
2213
|
+
`))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(vx||={});function qf(x,A,e,r){if(K.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function Nf(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 If(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let n=Nf(s.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
|
|
2214
|
+
`)),r=[]}return A}function ro(x){let A=x.split(`
|
|
2215
2215
|
`);return A.length===1?`/** ${A[0]} */`:`/**
|
|
2216
2216
|
${A.map(r=>` * ${r}`).join(`
|
|
2217
2217
|
`)}
|
|
2218
|
-
*/`}function
|
|
2219
|
-
${r}`:r||x}function za(x,A,e,r,t,i,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:cc(e,r,t)};return i[F]&&(v.comment=`${n}: ${i[F]}`),v}function lc(x,A,e,r,t,i,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let p=`${x}_${E}`,j=F[p],w=`${u}`;e[p]=w,r[x][E]=w;let g=za(w,i,n,E,x,F,v);g.comment=Ka(t[p]?.comment,j,v),t[p]=g}}async function $r(x,A,e,r,t,i){if(!await x.stat(A))return;let n=await x.readFile(A),F=sc(n),v=Ja.parse(F),E=A.toString(),u=F.split(/\r?\n/),p=vc(F);for(let[j,w]of Object.entries(v))if(typeof w=="object"&&w!==null)lc(j,w,e,r,t,E,u,p,i);else{let g=p[j],S=`${w}`;e[j]=S;let T=za(S,E,u,j,null,p,i);T.comment=Ka(t[j]?.comment,g,i),t[j]=T}}function cc(x,A,e){let r=e===null,t=e?`[${e}]`:null,i=new RegExp(`^\\s*${Ec(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&i.test(x[n]))return n}return 0}function Ec(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var en=H0(require("semver/preload")),{GET:mi,POST:An,PUT:Va}=(0,Wa.default)();function FA(x){if(x)return{authorization:`Bearer ${x}`}}var Fx;(w=>{w.getAPIUrl=g=>{let S="https://api.registry.microtronics.com";return g===vx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":g===vx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(g,S,T,q){let{data:L,error:R}=await mi("/publisher/{publisherId}/libraries/{libraryId}",{...(0,w.getAPIUrl)(q),headers:{...FA(g)},params:{path:{publisherId:S,libraryId:T}}});if(R)throw new Error(R.reason);return L}w.getLibraryProfile=A;async function e(g,S,T=!1){let q=await fetch(S,{headers:{...FA(g),...j(!0)}});if(q.status===200)return T?await q.json():await q.arrayBuffer();throw new Error("Failed to fetch the library content")}w.fetchCustomContent=e;async function r(g,S,T){try{let{data:q,error:L}=await mi("/publisher/{publisherId}",{...(0,w.getAPIUrl)(T),headers:{...FA(g)},params:{path:{publisherId:S}}});return L?(console.error(L),null):q}catch(q){return console.error(q),null}}w.getPublisher=r;async function t(g,S,T,q){try{let{data:L,error:R}=await An("/packages/{publisherId}/applications",{...(0,w.getAPIUrl)(q),headers:{...FA(g),...j(!0)},params:{path:{publisherId:S}},body:{...T}});if(R)throw new Error(R.reason);return L.id}catch{return null}}w.createNewApplication=t;async function i(g,S,T,q){let{data:L,error:R}=await mi("/publisher/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(q),headers:{...FA(g),...j(!0)},params:{path:{publisherId:S,applicationId:T}}});if(R)throw new Error(R.reason);return L}w.getExistingApplication=i;async function n(g,S,T,q,L){try{let{error:R}=await Va("/packages/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(L),headers:{...FA(g),...j(!0)},params:{path:{publisherId:S,applicationId:T}},body:{...q}});if(R)throw new Error(R.reason);return}catch{return null}}w.updateExistingApplication=n;async function F(g,S,T,q,L,R){let i0=!!en.default.valid(q);try{let{error:M}=await Va("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(R),headers:{...FA(g),...j(i0)},params:{path:{publisherId:S,applicationId:T,applicationVersion:q}},body:{...L}});if(M)throw new Error(M.reason);return}catch{return null}}w.updateExistingApplicationVersion=F;async function v(g,S,T,q,L,R){let i0=!!en.default.valid(q),{data:M,error:y}=await An("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(R),headers:{...FA(g),...j(i0)},params:{path:{publisherId:S,applicationId:T,applicationVersion:q}},body:{},bodySerializer(){return L}});if(y)throw new Error(y.reason||y.err||y);return M}w.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(g,S,T,q,L,R){try{let{error:i0}=await An("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,w.getAPIUrl)(R),headers:{...FA(g),...j(!0)},params:{path:{publisherId:S,libraryId:T,libraryVersion:q}},body:{...L},bodySerializer(M){let y=new FormData;for(let[O,Y]of Object.entries(M))Y!==void 0&&y.append(O,new Blob([Y],{type:E[O]}),O);return y}});if(i0)throw new Error(i0.reason)}catch(i0){throw console.error(i0),i0}}w.publishLibraryVersion=u;async function p(g,S,T,q,L,R,i0){let M=!!en.default.valid(q),{error:y}=await An("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,w.getAPIUrl)(i0),headers:{...FA(g),...j(M),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:T,applicationVersion:q,applicationFileName:L}},body:{},bodySerializer(){return R}});if(y)throw new Error(y.reason)}w.updateApplicationFile=p;function j(g=!1){return g?{"X-Semver":"true"}:{}}w.injectSemverHeader=j})(Fx||={});var xo=H0(require("semver/preload"));var Ao=require("deepmerge-ts"),Bc=h0.isNumeric,Xa="52v007",Ya="53v001",Cc="54v001",dc="56v001",vA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Ao.deepmerge)(structuredClone(this._manifest),vA._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}},K;(s0=>{let x=h0.convertBlobToString;s0.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=s0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=s0.ProjectTypes||={});let t;(f0=>(f0.restricted="restricted",f0.global="global"))(t=s0.BloAccessLevel||={});let i;(f0=>(f0.embedded="$embedded",f0.pure="$pure"))(i=s0.PovLocation||={});function n(U){vA.overwrites=U}s0.setOverwrites=n;function F(){vA.overwrites=null}s0.clearOverwrites=F;async function v(U,v0){let f0=Pr.Utils.joinPath(U,s0.fileName),B0=await v0.stat(f0);if(vA.manifest===null||f0?.fsPath!==vA.stat?.path.fsPath||B0?.ctime!==vA.stat?.ctime||B0?.mtime!==vA.stat?.mtime||B0?.size!==vA.stat?.size){let d0=await v0.readFile(f0),T0=x(d0);vA.manifest=JSON.parse(T0),vA.stat={...B0,path:f0}}return vA.manifest}s0.read=v;async function E(U,v0){return await v0.readFile(Pr.Utils.joinPath(U,s0.fileName))}s0.readAsBlob=E;async function u(U,v0){let f0=Pr.Utils.joinPath(U,s0.fileName),B0=await v0.readFile(f0),d0=x(B0);return JSON.parse(d0)}s0.readRaw=u;async function p(U,v0,f0){return vA.clear(),hc(f0),v0.writeFile(Pr.Utils.joinPath(U,s0.fileName),JSON.stringify(f0,null," "))}s0.write=p;function j(U){return U.library!==void 0?U.library:U.type==="library"}s0.isLibrary=j;function w(U){return U.type==="addon"}s0.isAddon=w;function g(U){return U.type===void 0&&!j(U)?!0:U.type==="app"}s0.isApp=g;function S(U){return U.type===void 0?!0:U.type==="app"}s0.isIotApp=S;function T(U){return U.type==="analytics"}s0.isAnalytics=T;async function q(U,v0,f0){f0||(f0=await v(U,v0)),jc(f0),uc(f0),Dc(f0),mc(f0)}s0.validateBasicManifest=q;function L(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 B0=["-","_"];if(B0.includes(U[0])||B0.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}s0.validateLibraryName=L;function R(U,v0){if(v0)return L(U);{let f0="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 f0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let d0=["-","_"," "];return d0.includes(U[0])||d0.includes(U[U.length-1])?f0:null}}s0.validateProjectName=R;function i0(U){return U.length<5?"The description must have at least 5 characters.":null}s0.validateDescription=i0;function M(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 B0=["_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return v0}else return v0;return null}s0.validatePublisherId=M;async function y(U,v0,f0){return await Fx.getPublisher(U,v0,f0)?null:`Publisher '${v0}' does not exist.`}s0.validatePublisherOnline=y;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 Y(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 f0 of v0)if(!f0.match(O))return`Domain "${f0}" is invalid`}else if(!U?.match(O)&&U!=="*")return'Invalid value for "allowedBackends"';return null}s0.validateRegistryAllowedBackends=Y;let W=/^[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 f0 of v0)if(!f0.match(W))return`Application id "${f0}" is invalid`}else if(!U?.match(W)&&U!=="*")return'Invalid value for "allowedApplications"';return null}s0.validateRegistryAllowedApplications=H;async function J(U,v0,f0){let B0=f0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=Pr.Utils.joinPath(U,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let L0=await v0.readFile(d0),Ex=(0,Qa.imageDimensionsFromData)(L0);if(!Ex)throw new Error("App icon could not be validated!");if(Ex?.width!==Ex?.height)throw new Error("App icon has to be a square!");if(Ex.width>512||Ex.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Za.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}s0.validateApplicationIcon=J;function a0(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');pc(U),bc(U)}s0.validateEngineSettings=a0;function t0(U,v0){let f0=T0=>{let L0=/^(\d+)v(\d+)$/.exec(T0);return L0?[Number(L0[1]),Number(L0[2])]:null},B0=f0(U),d0=f0(v0);return B0&&d0?B0[0]-d0[0]||B0[1]-d0[1]:U===v0?0:U<v0?-1:1}s0.compareBackendVersion=t0;async function Z(U,v0,f0,B0){B0||(B0=await s0.read(U,v0));let d0=s0.isAddon(B0),T0=s0.isAnalytics(B0);switch(f0){case u0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!T0;case u0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case u0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case u0.Part.dde:case u0.Part.dfiles:return!0;default:return!1}}s0.isApmPartEnabled=Z})(K||={});function uc(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 Dc(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 pc(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(K.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Xa){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 "${Xa}"`)}function bc(x){if(!K.isAddon(x)&&!K.isAnalytics(x))return;let{backend:A}=x.engines,e=K.isAddon(x)?Cc:dc;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 mc(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(K.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!K.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 jc(x){if((x.engines?.backend||"00v000")>=Ya||K.isLibrary(x)){if(!xo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Ya} onwards "version" has to be a semantic version string!"`)}else if(!Bc(x.version))throw new Error('"version" has to be a number!')}function hc(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var lr=require("vscode-uri");var jx=require("vscode-uri");var cf=H0(require("ajv")),Ef=H0(require("ajv-formats"));var eo={$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.
|
|
2218
|
+
*/`}function to(x){return x!==""&&!isNaN(Number(x))}function Mf(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function so(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
|
|
2219
|
+
${r}`:r||x}function io(x,A,e,r,t,s,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:Rf(e,r,t)};return s[F]&&(v.comment=`${n}: ${s[F]}`),v}function Lf(x,A,e,r,t,s,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,j=F[D],w=`${u}`;e[D]=w,r[x][E]=w;let h=io(w,s,n,E,x,F,v);h.comment=so(t[D]?.comment,j,v),t[D]=h}}async function Tr(x,A,e,r,t,s){if(!await x.stat(A))return;let n=await x.readFile(A),F=Tf(n),v=no.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=If(F);for(let[j,w]of Object.entries(v))if(typeof w=="object"&&w!==null)Lf(j,w,e,r,t,E,u,D,s);else{let h=D[j],S=`${w}`;e[j]=S;let P=io(S,E,u,j,null,D,s);P.comment=so(t[j]?.comment,h,s),t[j]=P}}function Rf(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${Of(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(x[n]))return n}return 0}function Of(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var an=G0(require("semver/preload")),{GET:ws,POST:sn,PUT:ao}=(0,oo.default)();function FA(x){if(x)return{authorization:`Bearer ${x}`}}var Fx;(w=>{w.getAPIUrl=h=>{let S="https://api.registry.microtronics.com";return h===vx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":h===vx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(h,S,P,q){let{data:L,error:O}=await ws("/publisher/{publisherId}/libraries/{libraryId}",{...(0,w.getAPIUrl)(q),headers:{...FA(h)},params:{path:{publisherId:S,libraryId:P}}});if(O)throw new Error(O.reason);return L}w.getLibraryProfile=A;async function e(h,S,P=!1){let q=await fetch(S,{headers:{...FA(h),...j(!0)}});if(q.status===200)return P?await q.json():await q.arrayBuffer();throw new Error("Failed to fetch the library content")}w.fetchCustomContent=e;async function r(h,S,P){try{let{data:q,error:L}=await ws("/publisher/{publisherId}",{...(0,w.getAPIUrl)(P),headers:{...FA(h)},params:{path:{publisherId:S}}});return L?(console.error(L),null):q}catch(q){return console.error(q),null}}w.getPublisher=r;async function t(h,S,P,q){try{let{data:L,error:O}=await sn("/packages/{publisherId}/applications",{...(0,w.getAPIUrl)(q),headers:{...FA(h),...j(!0)},params:{path:{publisherId:S}},body:{...P}});if(O)throw new Error(O.reason);return L.id}catch{return null}}w.createNewApplication=t;async function s(h,S,P,q){let{data:L,error:O}=await ws("/publisher/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(q),headers:{...FA(h),...j(!0)},params:{path:{publisherId:S,applicationId:P}}});if(O)throw new Error(O.reason);return L}w.getExistingApplication=s;async function n(h,S,P,q,L){try{let{error:O}=await ao("/packages/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(L),headers:{...FA(h),...j(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...q}});if(O)throw new Error(O.reason);return}catch{return null}}w.updateExistingApplication=n;async function F(h,S,P,q,L,O){let s0=!!an.default.valid(q);try{let{error:M}=await ao("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(O),headers:{...FA(h),...j(s0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:q}},body:{...L}});if(M)throw new Error(M.reason);return}catch{return null}}w.updateExistingApplicationVersion=F;async function v(h,S,P,q,L,O){let s0=!!an.default.valid(q),{data:M,error:y}=await sn("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(O),headers:{...FA(h),...j(s0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:q}},body:{},bodySerializer(){return L}});if(y)throw new Error(y.reason||y.err||y);return M}w.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(h,S,P,q,L,O){try{let{error:s0}=await sn("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,w.getAPIUrl)(O),headers:{...FA(h),...j(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:q}},body:{...L},bodySerializer(M){let y=new FormData;for(let[R,Y]of Object.entries(M))Y!==void 0&&y.append(R,new Blob([Y],{type:E[R]}),R);return y}});if(s0)throw new Error(s0.reason)}catch(s0){throw console.error(s0),s0}}w.publishLibraryVersion=u;async function D(h,S,P,q,L,O,s0){let M=!!an.default.valid(q),{error:y}=await sn("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,w.getAPIUrl)(s0),headers:{...FA(h),...j(M),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:q,applicationFileName:L}},body:{},bodySerializer(){return O}});if(y)throw new Error(y.reason)}w.updateApplicationFile=D;function j(h=!1){return h?{"X-Semver":"true"}:{}}w.injectSemverHeader=j})(Fx||={});var fo=G0(require("semver/preload"));var Eo=require("deepmerge-ts"),Gf=h0.isNumeric,Fo="52v007",vo="53v001",Uf="54v001",Hf="56v001",vA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Eo.deepmerge)(structuredClone(this._manifest),vA._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}},K;(i0=>{let x=h0.convertBlobToString;i0.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=i0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=i0.ProjectTypes||={});let t;(l0=>(l0.restricted="restricted",l0.global="global"))(t=i0.BloAccessLevel||={});let s;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(s=i0.PovLocation||={});function n(U){vA.overwrites=U}i0.setOverwrites=n;function F(){vA.overwrites=null}i0.clearOverwrites=F;async function v(U,v0){let l0=Pr.Utils.joinPath(U,i0.fileName),B0=await v0.stat(l0);if(vA.manifest===null||l0?.fsPath!==vA.stat?.path.fsPath||B0?.ctime!==vA.stat?.ctime||B0?.mtime!==vA.stat?.mtime||B0?.size!==vA.stat?.size){let d0=await v0.readFile(l0),P0=x(d0);vA.manifest=JSON.parse(P0),vA.stat={...B0,path:l0}}return vA.manifest}i0.read=v;async function E(U,v0){return await v0.readFile(Pr.Utils.joinPath(U,i0.fileName))}i0.readAsBlob=E;async function u(U,v0){let l0=Pr.Utils.joinPath(U,i0.fileName),B0=await v0.readFile(l0),d0=x(B0);return JSON.parse(d0)}i0.readRaw=u;async function D(U,v0,l0){return vA.clear(),Yf(l0),v0.writeFile(Pr.Utils.joinPath(U,i0.fileName),JSON.stringify(l0,null," "))}i0.write=D;function j(U){return U.library!==void 0?U.library:U.type==="library"}i0.isLibrary=j;function w(U){return U.type==="addon"}i0.isAddon=w;function h(U){return U.type===void 0&&!j(U)?!0:U.type==="app"}i0.isApp=h;function S(U){return U.type===void 0?!0:U.type==="app"}i0.isIotApp=S;function P(U){return U.type==="analytics"}i0.isAnalytics=P;async function q(U,v0,l0){l0||(l0=await v(U,v0)),Xf(l0),Jf(l0),Kf(l0),Wf(l0)}i0.validateBasicManifest=q;function L(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 B0=["-","_"];if(B0.includes(U[0])||B0.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}i0.validateLibraryName=L;function O(U,v0){if(v0)return L(U);{let l0="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 l0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let d0=["-","_"," "];return d0.includes(U[0])||d0.includes(U[U.length-1])?l0:null}}i0.validateProjectName=O;function s0(U){return U.length<5?"The description must have at least 5 characters.":null}i0.validateDescription=s0;function M(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 B0=["_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return v0}else return v0;return null}i0.validatePublisherId=M;async function y(U,v0,l0){return await Fx.getPublisher(U,v0,l0)?null:`Publisher '${v0}' does not exist.`}i0.validatePublisherOnline=y;let R=/^(((?!-))(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 Y(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 l0 of v0)if(!l0.match(R))return`Domain "${l0}" is invalid`}else if(!U?.match(R)&&U!=="*")return'Invalid value for "allowedBackends"';return null}i0.validateRegistryAllowedBackends=Y;let W=/^[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 l0 of v0)if(!l0.match(W))return`Application id "${l0}" is invalid`}else if(!U?.match(W)&&U!=="*")return'Invalid value for "allowedApplications"';return null}i0.validateRegistryAllowedApplications=H;async function J(U,v0,l0){let B0=l0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=Pr.Utils.joinPath(U,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let L0=await v0.readFile(d0),Ex=(0,lo.imageDimensionsFromData)(L0);if(!Ex)throw new Error("App icon could not be validated!");if(Ex?.width!==Ex?.height)throw new Error("App icon has to be a square!");if(Ex.width>512||Ex.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,co.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}i0.validateApplicationIcon=J;function a0(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');zf(U),Vf(U)}i0.validateEngineSettings=a0;function t0(U,v0){let l0=P0=>{let L0=/^(\d+)v(\d+)$/.exec(P0);return L0?[Number(L0[1]),Number(L0[2])]:null},B0=l0(U),d0=l0(v0);return B0&&d0?B0[0]-d0[0]||B0[1]-d0[1]:U===v0?0:U<v0?-1:1}i0.compareBackendVersion=t0;async function Z(U,v0,l0,B0){B0||(B0=await i0.read(U,v0));let d0=i0.isAddon(B0),P0=i0.isAnalytics(B0);switch(l0){case u0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!P0;case u0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case u0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case u0.Part.dde:case u0.Part.dfiles:return!0;default:return!1}}i0.isApmPartEnabled=Z})(K||={});function Jf(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 Kf(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 zf(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(K.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Fo){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 "${Fo}"`)}function Vf(x){if(!K.isAddon(x)&&!K.isAnalytics(x))return;let{backend:A}=x.engines,e=K.isAddon(x)?Uf:Hf;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 Wf(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(K.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!K.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 Xf(x){if((x.engines?.backend||"00v000")>=vo||K.isLibrary(x)){if(!fo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${vo} onwards "version" has to be a semantic version string!"`)}else if(!Gf(x.version))throw new Error('"version" has to be a number!')}function Yf(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var fr=require("vscode-uri");var jx=require("vscode-uri");var Ll=G0(require("ajv")),Rl=G0(require("ajv-formats"));var Bo={$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.
|
|
2220
2220
|
|
|
2221
2221
|
\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."},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.
|
|
2222
2222
|
|
|
@@ -2314,41 +2314,41 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
|
|
|
2314
2314
|
|
|
2315
2315
|
\u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
|
|
2316
2316
|
|
|
2317
|
-
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var ei=require("yaml");var Le=require("yaml");var rn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(rn||={});var G0;(H=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(x=H.DDEContainerName||={});let A;(l0=>(l0.configA="configA",l0.configB="configB",l0.configC="configC",l0.config0="config0",l0.config1="config1",l0.config2="config2",l0.config3="config3",l0.config4="config4",l0.config5="config5",l0.config6="config6",l0.config7="config7",l0.config8="config8",l0.config9="config9",l0.histdata0="histdata0",l0.histdata1="histdata1",l0.histdata2="histdata2",l0.histdata3="histdata3",l0.histdata4="histdata4",l0.histdata5="histdata5",l0.histdata6="histdata6",l0.histdata7="histdata7",l0.histdata8="histdata8",l0.histdata9="histdata9",l0.aloha="aloha",l0.alerts="alerts",l0.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;(T0=>(T0.up="up",T0.down="down",T0.upPlus="up+",T0.downPlus="down+",T0.none="none",T0.backendOnly="backend-only",T0.deviceOnly="device-only",T0.both="both",T0.bothPlus="both+",T0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(J,a0){return J==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":J==="hx"?"DDE_CID_HISTDATA":J==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let i=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["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:i},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:i},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:i},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:i},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:i},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:i},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:i},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:i},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:i},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:i},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},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 j=["astring","nstring","cstring","wstring","ustring"],w=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:j,unit:j,chartMinimum:w,chartMaximum:w,scale:w,offset:w,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:w,chartAlarmHigh:w,chartWarningLow:w,chartWarningHigh:w,chartHysteresis:w,chartTriggerThreshold:w,chartTriggerRelation:w,chartSetPoint:w};function S(J,a0,t0){let Z=a0[J];if(Z!==void 0)if(H.regexRelation.exec(`${Z}`)){let s0=J==="chartSetPoint",[U,...v0]=Z.split("."),[,f0]=U.split("@"),B0=Object.values(t0.containers).find(Ex=>Ex.title===f0),d0=v0.join("."),T0=s0?";":"%",L0=(s0?"":"%")+(B0?.name||f0)+T0;if(L0=L0+`${d0}`,s0){let Ex=t0.setPointList[a0.name];L0=L0+`;actual_output_value_${Ex}`}return L0}else return Z}H.parseXMLValueWithRelation=S;function T(J){let{bitmask:a0}=J;if(!a0)return;let t0="$",Z=a0.replaceAll(" ","");if(a0.startsWith("0x"))t0+=Z.substring(2);else if(Z.startsWith("0b")){let s0=Z.substring(2).replaceAll(" ","");t0+=parseInt(s0,2).toString(16).toUpperCase()}return t0}H.parseXMLBitmask=T;function q(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}H.parseXMLDefaultValue=q,H.TDEF_NUMBER={xmlOut(J,a0,t0){J.decpl=S("decimalPlaces",a0,t0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,t0),J.vofs=S("offset",a0,t0),J.min=S("chartMinimum",a0,t0),J.max=S("chartMaximum",a0,t0)}};let R={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},i0={xmlOut(J){J.decpl=-1,J.param0="local",J.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,...i0,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,...i0,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,...R,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,...R,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,...R,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,...R,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,...R,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,...R,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 Y(J){let a0=J.toLowerCase();return O.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=Y;function W(J){return!!J.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=W})(G0||={});var Tr={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},ji={max_size:1e5,max_fields:1e3},JA={max_size:4e3,max_fields:1e3},gA={max_size:1024,max_fields:1e3},qr={configA:ji,configB:ji,configC:ji,config0:JA,config1:JA,config2:JA,config3:JA,config4:JA,config5:JA,config6:JA,config7:JA,config8:JA,config9:JA,histdata0:gA,histdata1:gA,histdata2:gA,histdata3:gA,histdata4:gA,histdata5:gA,histdata6:gA,histdata7:gA,histdata8:gA,histdata9:gA,aloha:{...gA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},hi={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:qr,auto_inc:{...Tr,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:qr,auto_inc:{...Tr,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:qr,auto_inc:{...Tr,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:qr,auto_inc:{...Tr,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:qr,auto_inc:{...Tr,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:qr,auto_inc:{...Tr,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 gi=require("vscode-uri");var Nr=class{dloFileMap={};rootUri=gi.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=h0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?gi.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var no=require("vscode-uri");var yc=/^(?:\s*#options\s+)(.*)(?:\s*)$/,kc=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,wc=/^(?:\s*#ifdef\s+)(.*)$/,_c=/^(?:\s*#ifndef\s+)(.*)$/,Sc=/^(?:\s*#elseifdef\s+)(.*)$/,$c=/^(?:\s*#elseifndef\s+)(.*)$/,io=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,so=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ao=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,oo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,Fo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Pc=/^\s*#include\s*</,Tc=/^\s*#endinput\s*/,qc=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,vo=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,fo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function ro(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 lo=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,co=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(co||{}),Nc=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,Ic=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,Mc=/^(.*)(^|\s*)onUplinkEvent/,Lc=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,Oc=/^\s*#callback\s+\w+\s*\(/;function to(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let i=x[t];if(e){if(i==="\\"){t++;continue}i===r&&(e=!1);continue}if(i==='"'||i==="'"){e=!0,r=i;continue}i==="("?A++:i===")"&&A--}return A}function Eo(x){return io.test(x)||oo.test(x)||so.test(x)||ao.test(x)||Fo.test(x)||vo.test(x)||fo.test(x)||lo.test(x)}function Rc(x,A,e){if(!(Lc.test(e)||Oc.test(e)))return null;let t=to(e);if(t<=0)return null;let i=t,n=[x[A]],F=[e],v=A+1,E=100;for(;i>0&&v<x.length&&v-A<E;){let j=x[v],w=j.split("//",1)[0];n.push(j),F.push(w),i+=to(w),v++}if(n.length<=1||i>0)return null;let u=n.map((j,w)=>w===0?j:j.trim()).join(" "),p=F.map((j,w)=>w===0?j:j.trim()).join(" ");return Eo(p)?{joinedOriginal:u,joinedStripped:p,extraLineCount:n.length-1}:null}var Ir=class{pragmaDynamic=null;dloFileSequencer=new Nr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,i){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=no.Utils.basename(t);if(F.includes(r0.filePaths.studio.auto.dlo.path)){let g=E.substring(0,E.length-8);!["app","main"].includes(g)&&E.endsWith("-dde.inc")&&(v=h0.generateHashForLibraryName(g))}else if(F.includes(r0.filePaths.studio.libdeps)){let g=F.split("libdeps/")[1],[S]=g.split("/");["dlo-core"].includes(S)||(v=h0.generateHashForLibraryName(S))}else K.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=h0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:i.join(`
|
|
2318
|
-
`),diagnostics:n};let u=[],
|
|
2319
|
-
forward ___${
|
|
2317
|
+
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var as=require("yaml");var Re=require("yaml");var on;(A=>A.CODE={ddeFieldLength:"field_name_length"})(on||={});var H0;(H=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.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;(P0=>(P0.up="up",P0.down="down",P0.upPlus="up+",P0.downPlus="down+",P0.none="none",P0.backendOnly="backend-only",P0.deviceOnly="device-only",P0.both="both",P0.bothPlus="both+",P0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(J,a0){return J==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":J==="hx"?"DDE_CID_HISTDATA":J==="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"],n=["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:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},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 j=["astring","nstring","cstring","wstring","ustring"],w=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:j,unit:j,chartMinimum:w,chartMaximum:w,scale:w,offset:w,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:w,chartAlarmHigh:w,chartWarningLow:w,chartWarningHigh:w,chartHysteresis:w,chartTriggerThreshold:w,chartTriggerRelation:w,chartSetPoint:w};function S(J,a0,t0){let Z=a0[J];if(Z!==void 0)if(H.regexRelation.exec(`${Z}`)){let i0=J==="chartSetPoint",[U,...v0]=Z.split("."),[,l0]=U.split("@"),B0=Object.values(t0.containers).find(Ex=>Ex.title===l0),d0=v0.join("."),P0=i0?";":"%",L0=(i0?"":"%")+(B0?.name||l0)+P0;if(L0=L0+`${d0}`,i0){let Ex=t0.setPointList[a0.name];L0=L0+`;actual_output_value_${Ex}`}return L0}else return Z}H.parseXMLValueWithRelation=S;function P(J){let{bitmask:a0}=J;if(!a0)return;let t0="$",Z=a0.replaceAll(" ","");if(a0.startsWith("0x"))t0+=Z.substring(2);else if(Z.startsWith("0b")){let i0=Z.substring(2).replaceAll(" ","");t0+=parseInt(i0,2).toString(16).toUpperCase()}return t0}H.parseXMLBitmask=P;function q(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}H.parseXMLDefaultValue=q,H.TDEF_NUMBER={xmlOut(J,a0,t0){J.decpl=S("decimalPlaces",a0,t0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,t0),J.vofs=S("offset",a0,t0),J.min=S("chartMinimum",a0,t0),J.max=S("chartMaximum",a0,t0)}};let O={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},s0={xmlOut(J){J.decpl=-1,J.param0="local",J.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,...s0,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,...s0,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,...O,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,...O,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,...O,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,...O,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,...O,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,...O,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 R=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function Y(J){let a0=J.toLowerCase();return R.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=Y;function W(J){return!!J.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=W})(H0||={});var qr={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},_s={max_size:1e5,max_fields:1e3},KA={max_size:4e3,max_fields:1e3},yA={max_size:1024,max_fields:1e3},Nr={configA:_s,configB:_s,configC:_s,config0:KA,config1:KA,config2:KA,config3:KA,config4:KA,config5:KA,config6:KA,config7:KA,config8:KA,config9:KA,histdata0:yA,histdata1:yA,histdata2:yA,histdata3:yA,histdata4:yA,histdata5:yA,histdata6:yA,histdata7:yA,histdata8:yA,histdata9:yA,aloha:{...yA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Ss={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:Nr,auto_inc:{...qr,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:Nr,auto_inc:{...qr,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:Nr,auto_inc:{...qr,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:Nr,auto_inc:{...qr,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:Nr,auto_inc:{...qr,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:Nr,auto_inc:{...qr,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 $s=require("vscode-uri");var Ir=class{dloFileMap={};rootUri=$s.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=h0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?$s.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var Do=require("vscode-uri");var Zf=/^(?:\s*#options\s+)(.*)(?:\s*)$/,xE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,AE=/^(?:\s*#ifdef\s+)(.*)$/,eE=/^(?:\s*#ifndef\s+)(.*)$/,rE=/^(?:\s*#elseifdef\s+)(.*)$/,tE=/^(?:\s*#elseifndef\s+)(.*)$/,po=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,bo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,mo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,jo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,ho=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,nE=/^\s*#include\s*</,sE=/^\s*#endinput\s*/,iE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,go=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,yo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Co(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 ko=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,wo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(wo||{}),aE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,oE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,FE=/^(.*)(^|\s*)onUplinkEvent/,vE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,lE=/^\s*#callback\s+\w+\s*\(/;function uo(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 _o(x){return po.test(x)||jo.test(x)||bo.test(x)||mo.test(x)||ho.test(x)||go.test(x)||yo.test(x)||ko.test(x)}function cE(x,A,e){if(!(vE.test(e)||lE.test(e)))return null;let t=uo(e);if(t<=0)return null;let s=t,n=[x[A]],F=[e],v=A+1,E=100;for(;s>0&&v<x.length&&v-A<E;){let j=x[v],w=j.split("//",1)[0];n.push(j),F.push(w),s+=uo(w),v++}if(n.length<=1||s>0)return null;let u=n.map((j,w)=>w===0?j:j.trim()).join(" "),D=F.map((j,w)=>w===0?j:j.trim()).join(" ");return _o(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var Mr=class{pragmaDynamic=null;dloFileSequencer=new Ir;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=Do.Utils.basename(t);if(F.includes(r0.filePaths.studio.auto.dlo.path)){let h=E.substring(0,E.length-8);!["app","main"].includes(h)&&E.endsWith("-dde.inc")&&(v=h0.generateHashForLibraryName(h))}else if(F.includes(r0.filePaths.studio.libdeps)){let h=F.split("libdeps/")[1],[S]=h.split("/");["dlo-core"].includes(S)||(v=h0.generateHashForLibraryName(S))}else K.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=h0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:s.join(`
|
|
2318
|
+
`),diagnostics:n};let u=[],D=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${D}";`),u.push(`stock static __refid{} = "${D}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let w=0;for(let h=0;h<s.length;h++){let S=s[h],P=S.split("//",1)[0],q=null,L=0;if(!_o(P)){let O=cE(s,h,P);O&&(S=O.joinedOriginal,P=O.joinedStripped,L=O.extraLineCount)}if(q=Zf.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#options is not supported here. Use the DLO settings instead."});else if(q=xE.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(q=iE.exec(P)){let O=Number(q[1].startsWith("(")?q[1].substring(1,q[1].length-1):q[1]);!Number.isInteger(O)||O<64?n.push({file:t,level:"error",line:h,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||O>this.pragmaDynamic)&&(this.pragmaDynamic=O)}else if(q=AE.exec(P))S=S.replace("#ifdef ","#if defined ");else if(q=eE.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(q=rE.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(q=tE.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(q=po.exec(P)){let[,O,s0,M,y]=q;S=`${O}#define ${s0} _catch_funcidx( "___${s0}")
|
|
2319
|
+
forward ___${s0}( ${M});
|
|
2320
2320
|
#line
|
|
2321
2321
|
${w}
|
|
2322
|
-
public ___${
|
|
2323
|
-
`),diagnostics:n}}};var
|
|
2324
|
-
`)}}var nn;(v=>{v.createPawnCC=bt,v.createPawnDbg=Po,v.FileSequencer=Nr,v.PreCompiler=Ir,v.Compiler=Lr,v.uriToMemFs=le,v.parseCompilerWarningsAndErrors=_i;async function F(E,u,p){let j=await K.read(E,u),w=await To(E,u,j);await u.writeFile(w.path,w.data),p.log("Generated",r0.filePaths.studio.auto.dlo.cfg)}v.exportDloConfig=F})(nn||={});var No=require("vscode-uri");var $i=require("minimatch");var Io=require("@gera2ld/tarjs"),oE=h0.convertBlobToString,FE=require("pako"),Mo=".studioignore",Lo=[".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/**"];Lo.push("**/.studio/**","**/node_modules/**",Mo,"dist/defines.app.ts");var qo={dot:!0},Or;(r=>{async function x(t,i){let n=new Io.TarWriter;(await A(t,i)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return FE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,i){let n=[],{ignore:F,negate:v}=await vE(t,i),u=(await i.findFiles(t,"**/*")).filter(({path:p})=>{let j=p.slice(t.path.length+1);return!F.some(w=>(0,$i.minimatch)(j,w,qo))||v.some(w=>(0,$i.minimatch)(j,w.slice(1),qo))});for(let p of u){let j=p.path.slice(t.path.length+1),[w,g]=await Promise.all([i.stat(p),i.readFile(p)]);w&&n.push({name:j,data:g,modifyTime:new Date(w.mtime)})}return n}r.getFilesForArchive=A;async function e(t,i,n,F=vx.ENV.production){let{publisher:v,name:E,version:u}=i,p=await mx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),j={"CHANGELOG.md":await Si(p["CHANGELOG.md"]),"README.md":await Si(p["README.md"]),"studio.json":await Si(p["studio.json"]),"library.tar.gz":n};return await Fx.publishLibraryVersion(t,v,E,u,j,F)}r.publishPackage=e})(Or||={});async function vE(x,A){let e=["!studio.json","!README.md"],t=(await fE(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),i=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...Lo,...i,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function fE(x,A){let e=No.Utils.joinPath(x,Mo);if(await A.stat(e)){let t=await A.readFile(e);return oE(t)}else return""}async function Si(x){return new Uint8Array(await x.arrayBuffer())}var zA=require("vscode-uri");var Pe=require("yaml");var lE=h0.convertBlobToString,sn=h0.yamlRangeToLineInformation,an;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(p=>(p.crcStamp="crc_stamp",p.stampOnly="stamp_only",p.onlyDown="only_down",p.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:p,libraryFiles:j}=await t(F,v),w=zA.Utils.joinPath(F,r0.filePaths.dist.dfilesPath);await v.stat(w)&&await v.rm(w);for(let[g,S]of Object.entries(u))await EE(F,v,g,S,j);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(zA.Utils.joinPath(F,r0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),p}n.process=r;async function t(F,v){let E=[],u={},p=await ex.getApmPartDependencies(F,v,u0.Part.dfiles);for(let g of p){let{properties:S,diagnostics:T}=await i(v,g.path,g.name);Object.assign(u,S),E.push(...T)}let{properties:j,diagnostics:w}=await i(v,zA.Utils.joinPath(F,r0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,j),E.push(...w),{properties:u,diagnostics:E,libraryFiles:p}}n.parseDfile=t;async function i(F,v,E){let u=[],p={};if(!await F.stat(v))return{properties:p,diagnostics:u};let j=await F.readFile(v),w=lE(j),g=new Pe.LineCounter,T=(0,Pe.parseDocument)(w,{lineCounter:g}).contents||new Pe.YAMLMap;for(let q of T.items){let L=q.key.value,R=(0,Pe.isMap)(q.value)?q.value:null,i0=sn(g,q.key.range),M=R?R.has("syncMode"):!1,y=M?R.get("syncMode"):"crc_stamp";if(M){let J=Object.values(n.SyncLogic);if(!J.includes(y)){let a0=R.items.find(Z=>Z.key.value==="syncMode"),t0=sn(g,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:i0.line,startCharacter:i0.startCharacter,endCharacter:i0.endCharacter,level:"error"});let O=R?R.has("type"):!1,Y=O?R.get("type"):"static";if(O){let J=Object.values(n.Type);if(!J.includes(Y)){let a0=R.items.find(Z=>Z.key.value==="type"),t0=sn(g,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}L.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:i0.line,startCharacter:i0.startCharacter,endCharacter:i0.endCharacter,level:"error"});let W=zA.Utils.joinPath(zA.Utils.dirname(v),L),H=await cE(F,W);if(H)p[L]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:y,type:Y,library:E};else{let J=sn(g,q.key.range);u.push({file:v,code:"",message:`Could not find file "${L}"`,line:J.line,startCharacter:J.startCharacter,endCharacter:J.endCharacter,level:"error"})}}return{properties:p,diagnostics:u}}n.parseYamlFile=i})(an||={});async function cE(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:h0.generateCRC32ForFileContent(r)}}async function EE(x,A,e,r,t){let n=r.library!==null?zA.Utils.dirname(t.find(E=>E.name===r.library).path):zA.Utils.joinPath(x,r0.filePaths.dfiles.path),F=zA.Utils.joinPath(x,r0.filePaths.dist.dfilesPath,e),v=zA.Utils.joinPath(n,e);await A.copy(v,F)}var Oo=H0(require("dotenv")),Ro=require("vscode-uri");var BE=".env.local",Go;(A=>{async function x(e,r){let t=Ro.Utils.joinPath(e,BE);if(await r.stat(t)){let i=await r.readFile(t);return Oo.default.parse(h0.convertBlobToString(i))}return{}}A.read=x})(Go||={});var Rr=H0(require("chalk")),VA;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Rr.default.bgGreen.black(" DONE "),0:"",2:Rr.default.bgBlueBright.black(" INFO "),3:Rr.default.bgYellow.black(" WARNING "),4:Rr.default.bgRed.black(" ERROR "),5:Rr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(i=console){this._logHandler=i}_log(i,n,...F){this._silent&&i!==4||(F=[r.LOG_PREFIX[i],n,...F],this._logHandler.log(...F))}set silent(i){this._silent=i}set output(i){this._logHandler=i}log(i,...n){this._log(0,i,...n)}debug(i,...n){this._debugEnabled&&this._log(5,i,...n)}set debugEnabled(i){this._debugEnabled=i}error(i,...n){this._log(4,i,...n)}info(i,...n){this._log(2,i,...n)}warn(i,...n){this._log(3,i,...n)}done(i,...n){this._log(1,i,...n)}}r.Logger=e})(VA||={});var Zs=require("node:child_process"),Mv=require("node:fs"),Ys=require("vscode-uri");var pv=require("node:events"),zs=require("vscode-uri"),rx=H0(Fr());var Wx=H0(Fr());var Hs=H0(Fr()),iv=2e3;function Lu(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function Ou(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var qn=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(i=>i.direction==="in"),this.#i=t.find(i=>i.direction==="out"),this.#t=Ou(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,iv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,Lu(iv)])}},Nn=class extends qn{constructor(A){super(A,Hs.USB_CONFIGURATION.utoInterface)}},In=class extends qn{constructor(A){super(A,Hs.USB_CONFIGURATION.debugInterface)}};var Ru=9540,Js;function sv(){if(!Js){let{WebUSB:x}=require("usb");Js=new x({allowedDevices:[{vendorId:Ru}]})}return Js}async function Gu(){return(await sv().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function av(x){let A=await Gu();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)})`,i=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${i}`)})}async function Ks(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await sv().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 Ln(x){return`Device not found with serial number: ${x}`}var Uu=500;function Hu(x){if(x instanceof Mn)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(Ln(""))}var Mn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function Ju(x,A){try{return{uto:new Nn(x),debug:A?new In(x):void 0}}catch(e){throw new Mn("Device descriptors not ready",e)}}function Ku(x){return async(A,e=!0)=>{let r=await Ks(A,x);if(!r)throw new Error(Ln(A));try{await r.open(),await r.selectConfiguration(Wx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Wx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Wx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:i}=Ju(r,e);return{uto:t,debug:i,async close(){await t.stop(),await i?.stop(),r.opened&&(await r.releaseInterface(Wx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Wx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function zu(x){return new Promise(A=>setTimeout(A,x))}async function Vu(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(i){if(!Hu(i)||Date.now()>=t)throw i;await zu(Uu)}}function qt(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 On(x,A={}){let e=A.logger??new VA.Logger,r=A.transportFactory??Ku(e),t=A.needDebug!==!1,i=await Vu(r,x,t,A.retryMs??0),n=t?i.debug:void 0,F=qt(e),v=n?new Wx.AtCommandHandler(n,F):void 0,E=new Wx.UtoMaster(i.uto,F);return{utoMaster:E,atHandler:v,transports:i,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await i.close()}}}async function Vr(x,A,e,r,t=!1,i=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await On(x,{logger:r,debug:t,needDebug:!1,retryMs:i,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",j=>{r.debug("mdnCom",j)}),u.on("mdnComError",j=>{r.debug("mdnComError",j)});let p=-1;u.on("installing",j=>{j&&j!==p&&(p=j,r.info(`Upload progress: ${j}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(Wx.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let p=u instanceof Error?u.message:String(u);return{success:!1,message:p===Ln(x)?p:`Upload failed: ${p}`}}finally{await E?.close()}}async function ov(x,A,e=!1){let r,t;try{r=await On(x,{logger:A,debug:e});let{atHandler:i,transports:n}=r;if(!i)throw new Error("The debug interface is required for a sync");t=new Wx.SyncManager(n.uto,i,A),t.on("syncError",v=>A.error(`Sync error: ${v.message}`)),e&&(t.on("syncStart",({mode:v})=>A.log(`Sync mode: ${v}`)),t.on("syncPhase",({phase:v})=>A.log(`Sync phase: ${v}`)),t.on("syncComplete",v=>A.info(`Sync complete (mode: ${v.mode}, messages: ${v.serverMessageCount})`))),A.info("Syncing device...");let F=new AbortController;return await t.sync({serialNumber:x,signal:F.signal}),{success:!0,message:"Sync completed successfully"}}catch(i){let n=i instanceof Error?i.message:String(i);return{success:!1,message:n===Ln(x)?n:`Sync failed: ${n}`}}finally{t?.dispose(),await r?.close()}}var Fv=require("vscode-uri"),Rn=H0(Fr());var Gn=class x{constructor(A,e,r,t,i){this.fs=r;this.persist=t;this.logger=i;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=Fv.Utils.joinPath(A,r0.filePaths.studio.dev.mirror),i=new Rn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));i=Rn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),i=new Rn.MemoryStorage}return new x(i,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 lv=require("node:events"),Hn=require("node:fs/promises"),cv=require("node:path"),Ev=H0(require("iconv-lite")),vr=H0(Fr());var Wu=5e3,vv=500;function fv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function Xu(x){let A=x.level===vr.DebugLogLevel.info?"":`${vr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function Yu(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 Un=class extends lv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??Wu,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,Hn.mkdir)((0,cv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Hn.appendFile)(e,`${JSON.stringify(A)}
|
|
2325
|
-
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=vv){let r=e>0?e:vv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==vr.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 vr.DebugMaster(A,qt(this.logger??new VA.Logger));e.on("message",r=>{let t=Xu(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[fv(Ev.default.decode(Buffer.from(e),"win1252")),fv(Buffer.from(e).toString("utf8"))].find(Yu);if(t){this.push(A,t);return}let i=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${i}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Cv=require("node:events"),yA=H0(Fr()),Qu=1e3,Zu=1e4,xD=200,Bv=new Set([yA.UtoTag.HISTDATA_RAW,yA.UtoTag.LOG,yA.UtoTag.ALERTS]),Jn=class extends Cv.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,yA.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)||Bv.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:Qu,Zu),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],i=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(i===void 0?t>n:t!==i)?this.pull(A,r,n,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},i=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?i:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,yA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||Bv.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,yA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?AD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),i=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,yA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),i+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,xD,F),i===0?null:this.describeChange(A,n||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 AD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var xx=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},eD=2e3,rD=3e3,tD=3e4,nD=1e4,iD=3e4,sD=1e3,dv="dev",uv="local",Kn="Device not connected",Vs=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(i=>{t=i});try{await aD(r,e)}catch(i){throw this.depth--,r.then(t,t),i}try{return await A()}finally{this.depth--,t()}}};function aD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new xx(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Ie=class extends pv.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 Vs;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??rx.systemTimeSource,this.logStream=new Un({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 xx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new xx("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 xx(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Gn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new rx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new xx(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=zs.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new xx(`No DDE model at ${r0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,rx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await On(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let i=t instanceof Error?t.message:String(t);throw new xx(`Could not open device ${this.opts.serial}: ${i}`,/not found/i.test(i)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new xx(`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}catch(t){throw await this.closeDevice(),new xx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=qt(this.logger);this.stateManager=new rx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new rx.LocalDataManager(e,r),this.offlineSync=new rx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Jn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??eD,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 xx(Kn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new xx(Kn,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,i)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(rx.UtoCommand.DATA,r,t,i))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:dv,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,rx.createSiteInfoFromDde)(this.ddeModel,{siteUid:dv,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:uv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,allowAnySiteUid:!0};this.apiHandler=(0,rx.createLocalApiHandler)(e)}async handleApi(A){if(!this.apiHandler)throw new xx("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 i=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!i)return null;let n=(0,rx.resolveTagInModel)(this.ddeModel,decodeURIComponent(i[1]));return n===null||!(0,rx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??rD,t=this.poller;if(r<=0||!t)return!0;let i=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=i)return!1;await Dv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await K.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await mx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??vx.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 mx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=zs.Utils.joinPath(this.opts.cwd,A??r0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Vr)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,nD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+iD;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 Dv(sD)}}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(i=>i.outcome==="upload").map(i=>i.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 xx(Kn,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 xx(Kn,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:uv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,rx.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}}}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,rx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??tD)}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 Dv(x){return new Promise(A=>setTimeout(A,x))}var gv=H0(require("node:http")),yv=require("vscode-uri"),kv=H0(require("yaml"));var wv=["log","state","sync","build","uto","container-changed","error"],oD=15e3,bv=4*1024*1024,FD="127.0.0.1",vD=8765,_v="no-store",Sv="E_NOT_FOUND",mv="E_BAD_REQUEST",fD=2e3,lD=20;function fr(x,A){return JSON.stringify({err:`${x} ${A}`})}function Be(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":_v,...r}),x.end(e)}function cD(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function ED(x,A){if(!(cD(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 BD(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function CD(x,A){let e=x.headers.origin;typeof e=="string"&&BD(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 dD(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 i=process.env.MYDATANET_TOKEN;return t===A||i!==void 0&&i!==""&&t===i}var Me=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function $v(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>bv)throw x.pause(),new Me(413,"E_TOO_LARGE",`request body exceeds ${bv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Pv(x){return x!=="GET"&&x!=="HEAD"}function uD(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new Me(400,mv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new Me(400,mv,"JSON body must be an object");return A}function jv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function DD(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 hv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Ws=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2322
|
+
public ___${s0}( ${M})${y}`}else if(q=jo.exec(P)){let[,O,s0]=q;S=`${O}${s0}{_log_string="";_assert(__refid,__line);}`}else if(q=bo.exec(P)){let[,O,s0,M,y]=q;S=`${O}${s0}{ if (!(${M})) { sprintf(_log_string,_,${y.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(q=mo.exec(P)){let[,O,s0,M]=q;S=`${O}${s0}{ if (!(${M})) { _log_string="";_assert(__refid,__line); }}`}else if(q=ho.exec(P)){let[,O,s0,M]=q;S=`${O}${s0}_catch(__refid,__line,${M});`}else if(q=go.exec(P)){let[,O,s0,M,y,R]=q,{priority:Y,code:W}=Co(y,M.substring(1));Y!==null&&(S=`${O}${s0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${R});DDE_applog_write(${Y}, ${W}, params_str, __applog_src_id);}`)}else if(q=yo.exec(P)){let[,O,s0,M,y]=q,{priority:R,code:Y}=Co(y,M.substring(1));R!==null&&(S=`${O}${s0}DDE_applog_write(${R}, ${Y}, "", __applog_src_id);`)}else if(q=ko.exec(P)){let[,O,s0,M,y]=q,R=M.substring(1),Y=wo[R];S=`${O}${s0}{ if(_log_level <= ${Y}){ sprintf(_log_string,_,${y.replace(/%%/g,"\xFF")}); _log${M}(__refid,__line); }}`}else(q=nE.exec(P))&&!F.includes(r0.filePaths.studio.auto.path)?(F.includes(r0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:h,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(q=sE.exec(P))&&(n.push({file:t,level:"error",line:h,message:"#endinput is not supported - use #if/#endif instead"}),S=P);v&&!r.legacyProject&&(aE.exec(P)&&(S=S.replaceAll("DDE_",`_${v}`)),oE.exec(P)&&(S=S.replace("onUplink",`_${v}`)),FE.exec(P)&&(S=S.replace("onUplink",`_${v}Uplink`))),u.push(S),w++;for(let O=0;O<L;O++)u.push(""),w++,h++}if(E!=="main.dlo"){let h=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${h}`.substring(0,31),P=`_inc_${h}_inc`.substring(0,31);u.push(`#if defined ${S}`),u.push(`#undef ${S}`),u.push("#endif"),u.push(`#if defined ${P}`),u.push(`#undef ${P}`),u.push("#endif")}return{data:u.join(`
|
|
2323
|
+
`),diagnostics:n}}};var zA=require("vscode-uri");var T0=G0(require("fs")),ix=require("vscode-uri");var Po=G0(require("iconv-lite")),fE=h0.convertBlobToStringArray,qo=16384,No=511,Ts=qo|No,EE=32768,BE=438,So=EE|BE,CE=new Mr,Lr={};function Io(){let x=[];for(let A of Object.keys(Lr))x.push(...Lr[A].diagnostics);return x}var Fn=!!process.env.DLO_PROFILE,ce={precompileCount:0,cacheHits:0,precompileMs:0};function Mo(x){Fn&&(x.log(`[DLO_PROFILE] precompile: ${ce.precompileCount} runs, ${ce.cacheHits} cache hits, ${ce.precompileMs.toFixed(1)}ms`),ce.precompileCount=0,ce.cacheHits=0,ce.precompileMs=0)}var Ps=(x,A,e,r)=>{let t={getattr(n){let F=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)),v=F.fsPath;if(!T0.existsSync(v))throw new x.ErrnoError(44);let E=To(A,r,e,F),u=T0.statSync(v),D=E?.length||u.size;return{mode:u.isDirectory()?Ts:So,size:D,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let v=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!T0.existsSync(v))throw new x.ErrnoError(44);if(typeof F.size=="number"&&T0.truncateSync(v,F.size),typeof F.mode=="number"&&T0.chmodSync(v,F.mode),F.atime||F.mtime){let E=T0.statSync(v);T0.utimesSync(v,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!T0.existsSync(E))throw new x.ErrnoError(44);let u=T0.statSync(E),D=x.createNode(n,F,u.isDirectory()?Ts:So,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},readdir(n){let F=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...T0.readdirSync(F)]},mknod(n,F,v,E){let u=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.writeFileSync(u,"");let D=x.createNode(n,F,v,E);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},unlink(n,F){let v=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.unlinkSync(v)},mkdir(n,F,v){let E=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.mkdirSync(E,{mode:v});let u=x.createNode(n,F,v|Ts,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let v=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.rmdirSync(v)},rename(n,F,v){let E=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=ix.Utils.joinPath(ix.URI.parse(F.mount.opts.root),x.getPath(F),v).fsPath;T0.renameSync(E,u)}},s={open(n){let F=ix.Utils.joinPath(ix.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=To(A,r,e,F),n.modifiedContent||(n.nfd=T0.openSync(F.fsPath,$o(n.flags)))},close(n){n.nfd&&T0.closeSync(n.nfd)},read(n,F,v,E,u){if(!n.modifiedContent)return T0.readSync(n.nfd,F,v,E,u);let D=n.modifiedContent;if(u>=D.length)return 0;let j=D.length-u,w=Math.min(E,j);return dE(D,F,v,u,u+w),w},write(n,F,v,E,u){return T0.writeSync(n.nfd,F,v,E,u)},flagsToMode:$o,llseek(n,F,v){let E=F;if(v===1)E+=n.position;else if(v===2){let u=T0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=fe(A),F=x.createNode(null,n,qo|No,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function $o(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 dE(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 To(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=uE(t);if(!s){delete Lr[t];return}let n=Lr[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return Fn&&ce.cacheHits++,n.buffer;let F=Fn?performance.now():0,v=DE(x,A,e,r);return Fn&&(ce.precompileCount++,ce.precompileMs+=performance.now()-F),Lr[t]={buffer:v.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:v.diagnostics},Lr[t].buffer}function uE(x){try{return T0.statSync(x)}catch{return null}}function DE(x,A,e,r){let t=T0.readFileSync(r.fsPath),s=fE(t),n=CE.preCompileDloFile(x,A,e,r,s);return{buffer:Po.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function fe(x){return x.fsPath.replace(/\\/g,"/")}function jt(x,A){let e=fe(x);return fe(A).replace(e,"")}var Ko=Jo(),gt=Ko.createPawnCC,zo=Ko.createPawnDbg;var Rr=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 gt({noExitRuntime:A,print:n=>{let F=qs(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=qs(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=fe(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await K.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=Ps(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(fe(this.cwd))}async compile(A,e){let r=await K.read(A,e);if(!await K.isApmPartEnabled(A,e,u0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(zA.Utils.joinPath(A,"dist/dlo"));let t=zA.Utils.joinPath(A,r.dlo?.mainFile||r0.filePaths.dlo.mainDLO),s=[],n=zA.Utils.joinPath(A,r0.filePaths.studio.auto.dlo.cfg),F=jt(A,n);s.push(`-T.${F}`);let v=0;try{let E=`.${jt(A,t)}`;v=await this.dloCC.callMain([E,...s])}catch(E){this.logger.error(E)}return{code:v,stdout:this.stdout,stderr:this.stderr,diagnostics:[...Io(),...Ns(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(u=>{let D=u.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(D)?`${D}.${u.substring(2)}`:u}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),v=t?performance.now()-s:0,E=t?performance.now():0;try{if(await n.callMain(["."+A,...r,"-R"]))return null}catch(u){if(u.stack?.startsWith("RuntimeError"))return null;throw u}finally{if(t){let u=performance.now()-E;this.logger.log(`[DLO_PROFILE] instantiate: ${v.toFixed(1)}ms, callMain: ${u.toFixed(1)}ms`),Mo(this.logger)}}return[...F.stdout,...F.stderr]}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await gt({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=fe(this.cwd),[t]=r.split("/"),s=e.FS,n=await K.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=Ps(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function Ns(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 n=qs(x,s);n&&r.push({file:zA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function qs(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),s=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!s||!n)return null;let[F,v]=t.split(/[()(-)]/),E=s.split(" "),u=E[E.length-2],j=zA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");j.startsWith("/")&&(j=j.substring(1));let w=A.replace(F,j);return{level:u,msg:n,posixPath:j,lineNumber:v,message:w}}async function Vo(x,A,e){let r=["-M","-v2"],t=zA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${jt(x,t)}`);let s=await ex.getApmPartDependencies(x,A,u0.Part.dlo);for(let F of s){let v=zA.Utils.dirname(F.path);r.push(`-i.${jt(x,v)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:zA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.cfg),data:r.join(`
|
|
2324
|
+
`)}}var vn;(v=>{v.createPawnCC=gt,v.createPawnDbg=zo,v.FileSequencer=Ir,v.PreCompiler=Mr,v.Compiler=Rr,v.uriToMemFs=fe,v.parseCompilerWarningsAndErrors=Ns;async function F(E,u,D){let j=await K.read(E,u),w=await Vo(E,u,j);await u.writeFile(w.path,w.data),D.log("Generated",r0.filePaths.studio.auto.dlo.cfg)}v.exportDloConfig=F})(vn||={});var Xo=require("vscode-uri");var Ms=require("minimatch");var Yo=require("@gera2ld/tarjs"),qE=h0.convertBlobToString,NE=require("pako"),Qo=".studioignore",Zo=[".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/**"];Zo.push("**/.studio/**","**/node_modules/**",Qo,"dist/defines.app.ts");var Wo={dot:!0},Or;(r=>{async function x(t,s){let n=new Yo.TarWriter;(await A(t,s)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return NE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,s){let n=[],{ignore:F,negate:v}=await IE(t,s),u=(await s.findFiles(t,"**/*")).filter(({path:D})=>{let j=D.slice(t.path.length+1);return!F.some(w=>(0,Ms.minimatch)(j,w,Wo))||v.some(w=>(0,Ms.minimatch)(j,w.slice(1),Wo))});for(let D of u){let j=D.path.slice(t.path.length+1),[w,h]=await Promise.all([s.stat(D),s.readFile(D)]);w&&n.push({name:j,data:h,modifyTime:new Date(w.mtime)})}return n}r.getFilesForArchive=A;async function e(t,s,n,F=vx.ENV.production){let{publisher:v,name:E,version:u}=s,D=await mx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),j={"CHANGELOG.md":await Is(D["CHANGELOG.md"]),"README.md":await Is(D["README.md"]),"studio.json":await Is(D["studio.json"]),"library.tar.gz":n};return await Fx.publishLibraryVersion(t,v,E,u,j,F)}r.publishPackage=e})(Or||={});async function IE(x,A){let e=["!studio.json","!README.md"],t=(await ME(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),s=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...Zo,...s,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function ME(x,A){let e=Xo.Utils.joinPath(x,Qo);if(await A.stat(e)){let t=await A.readFile(e);return qE(t)}else return""}async function Is(x){return new Uint8Array(await x.arrayBuffer())}var VA=require("vscode-uri");var Te=require("yaml");var LE=h0.convertBlobToString,ln=h0.yamlRangeToLineInformation,cn;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(D=>(D.crcStamp="crc_stamp",D.stampOnly="stamp_only",D.onlyDown="only_down",D.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:D,libraryFiles:j}=await t(F,v),w=VA.Utils.joinPath(F,r0.filePaths.dist.dfilesPath);await v.stat(w)&&await v.rm(w);for(let[h,S]of Object.entries(u))await OE(F,v,h,S,j);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(VA.Utils.joinPath(F,r0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),D}n.process=r;async function t(F,v){let E=[],u={},D=await ex.getApmPartDependencies(F,v,u0.Part.dfiles);for(let h of D){let{properties:S,diagnostics:P}=await s(v,h.path,h.name);Object.assign(u,S),E.push(...P)}let{properties:j,diagnostics:w}=await s(v,VA.Utils.joinPath(F,r0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,j),E.push(...w),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function s(F,v,E){let u=[],D={};if(!await F.stat(v))return{properties:D,diagnostics:u};let j=await F.readFile(v),w=LE(j),h=new Te.LineCounter,P=(0,Te.parseDocument)(w,{lineCounter:h}).contents||new Te.YAMLMap;for(let q of P.items){let L=q.key.value,O=(0,Te.isMap)(q.value)?q.value:null,s0=ln(h,q.key.range),M=O?O.has("syncMode"):!1,y=M?O.get("syncMode"):"crc_stamp";if(M){let J=Object.values(n.SyncLogic);if(!J.includes(y)){let a0=O.items.find(Z=>Z.key.value==="syncMode"),t0=ln(h,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:s0.line,startCharacter:s0.startCharacter,endCharacter:s0.endCharacter,level:"error"});let R=O?O.has("type"):!1,Y=R?O.get("type"):"static";if(R){let J=Object.values(n.Type);if(!J.includes(Y)){let a0=O.items.find(Z=>Z.key.value==="type"),t0=ln(h,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}L.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:s0.line,startCharacter:s0.startCharacter,endCharacter:s0.endCharacter,level:"error"});let W=VA.Utils.joinPath(VA.Utils.dirname(v),L),H=await RE(F,W);if(H)D[L]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:y,type:Y,library:E};else{let J=ln(h,q.key.range);u.push({file:v,code:"",message:`Could not find file "${L}"`,line:J.line,startCharacter:J.startCharacter,endCharacter:J.endCharacter,level:"error"})}}return{properties:D,diagnostics:u}}n.parseYamlFile=s})(cn||={});async function RE(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:h0.generateCRC32ForFileContent(r)}}async function OE(x,A,e,r,t){let n=r.library!==null?VA.Utils.dirname(t.find(E=>E.name===r.library).path):VA.Utils.joinPath(x,r0.filePaths.dfiles.path),F=VA.Utils.joinPath(x,r0.filePaths.dist.dfilesPath,e),v=VA.Utils.joinPath(n,e);await A.copy(v,F)}var xF=G0(require("dotenv")),AF=require("vscode-uri");var GE=".env.local",eF;(A=>{async function x(e,r){let t=AF.Utils.joinPath(e,GE);if(await r.stat(t)){let s=await r.readFile(t);return xF.default.parse(h0.convertBlobToString(s))}return{}}A.read=x})(eF||={});var Gr=G0(require("chalk")),WA;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Gr.default.bgGreen.black(" DONE "),0:"",2:Gr.default.bgBlueBright.black(" INFO "),3:Gr.default.bgYellow.black(" WARNING "),4:Gr.default.bgRed.black(" ERROR "),5:Gr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,n,...F){this._silent&&s!==4||(F=[r.LOG_PREFIX[s],n,...F],this._logHandler.log(...F))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...n){this._log(0,s,...n)}debug(s,...n){this._debugEnabled&&this._log(5,s,...n)}set debugEnabled(s){this._debugEnabled=s}error(s,...n){this._log(4,s,...n)}info(s,...n){this._log(2,s,...n)}warn(s,...n){this._log(3,s,...n)}done(s,...n){this._log(1,s,...n)}}r.Logger=e})(WA||={});var ca=require("node:child_process"),il=require("node:fs"),al=G0(require("node:path")),Yr=require("vscode-uri");var qv=require("node:events"),Zi=require("vscode-uri"),rx=G0(Ie());var Wx=G0(Ie());var Xi=G0(Ie()),Dv=2e3;function vD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function lD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var Rn=class{interface="usb";#A=new Set;#e;#r;#s;#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.#s=t.find(s=>s.direction==="out"),this.#t=lD(A,e)}async write(A){await this.#e.transferOut(this.#s.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#i(),()=>{this.#A.delete(e)}}#i(){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,Dv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,vD(Dv)])}},On=class extends Rn{constructor(A){super(A,Xi.USB_CONFIGURATION.utoInterface)}},Gn=class extends Rn{constructor(A){super(A,Xi.USB_CONFIGURATION.debugInterface)}};var cD=9540,Yi;function pv(){if(!Yi){let{WebUSB:x}=require("usb");Yi=new x({allowedDevices:[{vendorId:cD}]})}return Yi}async function fD(){return(await pv().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function bv(x){let A=await fD();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 Qi(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await pv().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 Hn(x){return`Device not found with serial number: ${x}`}var ED=500;function BD(x){if(x instanceof Un)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(Hn(""))}var Un=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function CD(x,A){try{return{uto:new On(x),debug:A?new Gn(x):void 0}}catch(e){throw new Un("Device descriptors not ready",e)}}function dD(x){return async(A,e=!0)=>{let r=await Qi(A,x);if(!r)throw new Error(Hn(A));try{await r.open(),await r.selectConfiguration(Wx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Wx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Wx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=CD(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(Wx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Wx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function uD(x){return new Promise(A=>setTimeout(A,x))}async function DD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!BD(s)||Date.now()>=t)throw s;await uD(ED)}}function vr(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 Jn(x,A={}){let e=A.logger??new WA.Logger,r=A.transportFactory??dD(e),t=A.needDebug!==!1,s=await DD(r,x,t,A.retryMs??0),n=t?s.debug:void 0,F=vr(e),v=n?new Wx.AtCommandHandler(n,F):void 0,E=new Wx.UtoMaster(s.uto,F);return{utoMaster:E,atHandler:v,transports:s,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await s.close()}}}async function Wr(x,A,e,r,t=!1,s=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await Jn(x,{logger:r,debug:t,needDebug:!1,retryMs:s,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",j=>{r.debug("mdnCom",j)}),u.on("mdnComError",j=>{r.debug("mdnComError",j)});let D=-1;u.on("installing",j=>{j&&j!==D&&(D=j,r.info(`Upload progress: ${j}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(Wx.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let D=u instanceof Error?u.message:String(u);return{success:!1,message:D===Hn(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}async function mv(x,A,e=!1){let r,t;try{r=await Jn(x,{logger:A,debug:e});let{atHandler:s,transports:n}=r;if(!s)throw new Error("The debug interface is required for a sync");t=new Wx.SyncManager(n.uto,s,A),t.on("syncError",v=>A.error(`Sync error: ${v.message}`)),e&&(t.on("syncStart",({mode:v})=>A.log(`Sync mode: ${v}`)),t.on("syncPhase",({phase:v})=>A.log(`Sync phase: ${v}`)),t.on("syncComplete",v=>A.info(`Sync complete (mode: ${v.mode}, messages: ${v.serverMessageCount})`))),A.info("Syncing device...");let F=new AbortController;return await t.sync({serialNumber:x,signal:F.signal}),{success:!0,message:"Sync completed successfully"}}catch(s){let n=s instanceof Error?s.message:String(s);return{success:!1,message:n===Hn(x)?n:`Sync failed: ${n}`}}finally{t?.dispose(),await r?.close()}}var jv=require("vscode-uri"),Kn=G0(Ie());var zn=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=jv.Utils.joinPath(A,r0.filePaths.studio.dev.mirror),s=new Kn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=Kn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new Kn.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 yv=require("node:events"),Vn=require("node:fs/promises"),kv=require("node:path"),wv=G0(require("iconv-lite")),lr=G0(Ie());var pD=5e3,hv=500;function gv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function bD(x){let A=x.level===lr.DebugLogLevel.info?"":`${lr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function mD(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 Xr=class extends yv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??pD,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,Vn.mkdir)((0,kv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Vn.appendFile)(e,`${JSON.stringify(A)}
|
|
2325
|
+
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=hv){let r=e>0?e:hv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==lr.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 lr.DebugMaster(A,vr(this.logger??new WA.Logger));e.on("message",r=>{let t=bD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[gv(wv.default.decode(Buffer.from(e),"win1252")),gv(Buffer.from(e).toString("utf8"))].find(mD);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 Sv=require("node:events"),kA=G0(Ie()),jD=1e3,hD=1e4,gD=200,_v=new Set([kA.UtoTag.HISTDATA_RAW,kA.UtoTag.LOG,kA.UtoTag.ALERTS]),Wn=class extends Sv.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,kA.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)||_v.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:jD,hD),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 n=await this.mirrorStamp(A);return(s===void 0?t>n:t!==s)?this.pull(A,r,n,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),n=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,kA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||_v.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,kA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?yD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),s=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,kA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),s+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,gD,F),s===0?null:this.describeChange(A,n||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 yD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Q0=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},kD=2e3,wD=3e3,_D=3e4,SD=1e4,$D=3e4,TD=1e3,xa="dev",$v=`/api/1/sites/${xa}`,Tv="local",Xn="Device not connected",Aa=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 PD(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function PD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Q0(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Me=class extends qv.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 Aa;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??rx.systemTimeSource,this.logStream=new Xr({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 Q0("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Q0("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 Q0(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await zn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new rx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Q0(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=Zi.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Q0(`No DDE model at ${r0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,rx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Jn(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 Q0(`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 Q0(`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}catch(t){throw await this.closeDevice(),new Q0(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=vr(this.logger);this.stateManager=new rx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new rx.LocalDataManager(e,r),this.offlineSync=new rx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Wn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??kD,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 Q0(Xn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Q0(Xn,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(rx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:xa,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,rx.createSiteInfoFromDde)(this.ddeModel,{siteUid:xa,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Tv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,allowAnySiteUid:!0};this.apiHandler=(0,rx.createLocalApiHandler)(e)}async handleApi(A){if(!this.apiHandler)throw new Q0("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 n=(0,rx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,rx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??wD,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await Pv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await K.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await mx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??vx.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 mx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=Zi.Utils.joinPath(this.opts.cwd,A??r0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Wr)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,SD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+$D;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 Pv(TD)}}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 Q0(Xn,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 Q0(Xn,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Tv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,rx.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:`${$v}/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 n=await this.handleApi({path:`${$v}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:qD(n.body)}:n.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,rx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??_D)}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 Pv(x){return new Promise(A=>setTimeout(A,x))}function qD(x){try{return JSON.parse(x).err??x}catch{return x}}var Ov=G0(require("node:http")),Gv=require("vscode-uri"),Uv=G0(require("yaml"));var Hv=["log","state","sync","build","uto","container-changed","error"],ND=15e3,Nv=4*1024*1024,ID="127.0.0.1",MD=8765,Jv="no-store",Kv="E_NOT_FOUND",Iv="E_BAD_REQUEST",LD=2e3,RD=20;function cr(x,A){return JSON.stringify({err:`${x} ${A}`})}function ZA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Jv,...r}),x.end(e)}function OD(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function GD(x,A){if(!(OD(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 UD(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function HD(x,A){let e=x.headers.origin;typeof e=="string"&&UD(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 JD(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 Le=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function zv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>Nv)throw x.pause(),new Le(413,"E_TOO_LARGE",`request body exceeds ${Nv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Vv(x){return x!=="GET"&&x!=="HEAD"}function Mv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new Le(400,Iv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new Le(400,Iv,"JSON body must be an object");return A}function Lv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function KD(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 Rv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var ea=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2326
2326
|
|
|
2327
|
-
`),
|
|
2327
|
+
`),ND),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
|
|
2328
2328
|
data: ${JSON.stringify(e)}
|
|
2329
2329
|
|
|
2330
|
-
`;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>=
|
|
2330
|
+
`;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>=RD&&(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(F=>F.trim()).filter(F=>Hv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":Jv,connection:"keep-alive"}),e.write(`: connected
|
|
2331
2331
|
|
|
2332
|
-
`);let n={res:e,types:i,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function pD(x,A,e,r){let t=A.method??"GET",i={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:Pv(t)?await $v(A):null},n=await x.handleApi(i);Be(e,n.status,n.body,n.headers)}async function bD(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(jv(r,"file"));case"POST /dev/sync":return t.sync(DD(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(hv(e,"since",0),hv(e,"limit",500))};case"POST /dev/at":return mD(t,jv(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 kD(x);default:return}}async function mD(x,A){if(!A)throw new Me(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function jD(x,A,e,r){let[t,i=""]=r.split("?"),n=A.method??"GET",F=Pv(n)?await $v(A):"";try{let v=await bD(x,`${n} ${t}`,new URLSearchParams(i),uD(F));if(v===void 0){Be(e,404,fr(Sv,`no route for ${n} ${t}`));return}Be(e,200,JSON.stringify(v))}catch(v){if(v instanceof Me){Be(e,v.status,fr(v.code,v.message));return}Be(e,500,fr("E_DEV",v instanceof Error?v.message:String(v)))}}async function hD(x,A,e,r){if(CD(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",i=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(i).get("token")??void 0:void 0;if(!dD(e,x.token,F)){Be(r,401,fr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await pD(x.session,e,r,t):n?A.subscribe(e,r,i):t.startsWith("/dev/")?await jD(x,e,r,t):Be(r,404,fr(Sv,`no route for ${t}`))}catch(v){if(v instanceof Me&&!r.headersSent){Be(r,v.status,fr(v.code,v.message),{connection:"close"});return}throw v}}async function Tv(x){let{session:A,logger:e}=x,r=x.host??FD;ED(x,r);let t=new Ws;for(let F of wv)A.on(F,v=>t.broadcast(F,v));let i=gv.default.createServer((F,v)=>{hD(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||Be(v,500,fr("E_INTERNAL",u))})});try{await new Promise((F,v)=>{i.once("error",v),i.listen(x.port??vD,r,()=>{i.off("error",v),F()})})}catch(F){throw t.close(),F}i.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=i.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),i.closeIdleConnections(),i.closeAllConnections(),await Promise.race([new Promise(F=>i.close(()=>F())),gD(fD)])}}}function gD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var yD={"/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/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function kD(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=yv.Utils.joinPath(x.cwd,r0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=kv.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 ${r0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...yD},A}var Nt=require("node:fs"),qv=require("node:path"),Nv=require("vscode-uri");var wD=300,_D=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function Xs(x){return x instanceof Error?x.message:String(x)}function SD(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function $D(x){let A=[],e=r=>{A.push(r);for(let t of(0,Nt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,qv.join)(r,t.name))};try{e(x)}catch{}return A}function Iv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??wD,i=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let w=await e.build();if(w.ok!==!0){r.error(`Rebuild failed: ${w.message??"see diagnostics"}`);return}if(x.flash!==!1){let g=await e.flash();if(!g.success){r.error(g.message);return}}await e.sync()}catch(w){r.error(`Watch cycle failed: ${w instanceof Error?w.message:String(w)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let p=w=>(g,S)=>{let T=typeof S=="string"?S.replace(/\\/g,"/"):null;(!w||T!==null&&w(T))&&u()},j=(w,g,S)=>{let T=Nv.Utils.joinPath(A,w);try{i.push((0,Nt.watch)(T.fsPath,{recursive:g},p(S)))}catch(q){if(SD(q))return;if(g){r.warn(`Recursive file watching is not available on this platform (${Xs(q)}) \u2014 watching every directory under ${w} individually.`);for(let L of $D(T.fsPath))try{i.push((0,Nt.watch)(L,{recursive:!1},p(S)))}catch(R){r.warn(`Could not watch ${L}: ${Xs(R)}`)}return}r.warn(`Could not watch ${w}: ${Xs(q)}`)}};return j(r0.filePaths.dlo.path,!0),j(r0.filePaths.dde.path,!0),j(".",!1,w=>_D.has(w)),{close(){n&&clearTimeout(n);for(let w of i)w.close()}}}var PD="details";function TD(){return[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles]}async function xa(x,A,e){let r=e.logger??new VA.Logger,t=new Ie({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??TD(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let i,n,F;try{i=await Tv({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Iv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=qD(x,t,i.url,e.pov,r))}catch(E){throw await i?.close(),await t.stop(),E}let v=i;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),ND(F,r),await v.close(),await t.stop()}}}function qD(x,A,e,r,t){let i=typeof r=="string"&&r.length>0?r:PD,n=Ys.Utils.joinPath(x,"pov",i);if(!(0,Mv.existsSync)(Ys.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,Zs.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),v=E=>{for(let u of E.toString("utf8").split(/\r?\n/)){let p=u.trim();p&&A.logStream.push("pov",p)}};return F.stdout?.on("data",v),F.stderr?.on("data",v),F.on("error",E=>t.error(`POV dev server failed: ${E.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function ND(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,Zs.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 Lv=require("uuid"),ID="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var It=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:i,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(i?`Bearer ${i}`:""),this.logger=F}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}`,i={Authorization:this.auth},n={method:A,headers:i};r&&(r instanceof FormData?n.body=r:(i["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.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 i=await this.getSite(A,e.name.toLowerCase());if(i)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${i._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 ${i._uid}`),i._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return i._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 Ov(x){return(0,Lv.v5)(x,ID)}async function Aa(x,A,e,r,t,i,n){let F=await K.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await K.isApmPartEnabled(x,A,u0.Part.dlo,F),p=u&&r,j=p?r.toUpperCase():`${E}_${v}`,w=p?r:j,g=n||j;return g.length>50&&(e.warn(`Site name "${g}" is too long. Truncating to 50 characters.`),g=g.substring(0,50)),{apmId:Ov(w),applicationId:null,name:g,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:i}}async function Rv(x,A,e,r,t,i,n=!1){if(i.length>0)for(let F of i){let[v,E]=F.split("@");await ex.installDependency(x,A,e,r,t,v,E||null,n)}else await ex.installDependencies(x,A,e,r,t);await ex.installNpmInApmParts(x,A,e)}async function Gv(x,A,e,r,t=null,i=!0,n){return await K.validateBasicManifest(x,A,null),mx.buildAll(x,A,e,r,t,i,n)}async function MD(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await K.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function Uv(x,A,e,r,t,i,n,F){e.info("Publishing package...");let v=await MD(i);if(F)await mx.publishArchive(x,A,e,t,r,F,n,v);else return await mx.validatePublishSettings(x,A,t,r),mx.release(x,A,e,r,t,n,v)}async function Hv(x,A,e,r,t,i){return mx.pack(x,A,e,r,t,i)}var Oe=G0.DDEContainerName,Jv=G0.allowedRelationTypes,LD=G0.regexRelation,OD=G0.ContainerType,RD=G0.checkForReservedFieldName,zn=G0.ContainerName,Kv=G0.CONTAINER_DEFS,GD=G0.SERVER_CONTAINER,UD=G0.HISTDATA_CONTAINER,HD=G0.CONFIG_CONTAINER,Wr=G0.TransferDirection,zv=G0.fieldTypeDefinitions,EA=h0.yamlRangeToLineInformation,Vn;(A=>{class x{constructor(r,t,i){this.manifest=r;this.libraryFiles=t;this.ddeHistory=i}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:i,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(i),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,i=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===i)||null}parseMainDDE(r,t){let{parsedDDE:i,diagnostics:n}=this.parseYamlFile(r,t);return n.find(E=>E.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(i),diagnostics:n}}parseYamlFile(r,t,i){this.fileDiagnostics.length=0;let n=new Le.LineCounter,F=(0,Le.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let v=F.contents||new Le.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,i),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),i),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t){let i={containers:{},setPointList:{}},n=new Map,F=[...Object.values(Oe)];if(r.get("cloudProject")){let E=Object.values(this.previousVersion.containers).map(p=>p.title),u=[...new Set([...F,...E])];F.length=0,F.push(...u)}for(let E of F)r.has(E)&&n.set(E,r.get(E));let v=r.get("timeseries");if(v)for(let[E,u]of v)n.set(E,u);for(let[E,u]of n){let{realContainer:p,transferDirection:j,legacyTitle:w}=this.getRealContainerInformation(E);if(!p)continue;let g=Kv[p],S=E.includes("timeseries_")?E.replace("timeseries_",""):E,T={name:p,title:S,previousTitle:w,containerType:g.ctype,volatile:E===Oe.volatile,transferDirection:j,fieldCount:u.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};t&&T.libraries.push(t);for(let[q,L]of u){let R=[],i0=L.get("type"),M=zv[i0];if(!(!M&&i0!=="array")){if(i0==="array"){let y=[],O=L.get("length"),Y=L.get("fields"),W={name:q,length:O,library:t||null,fields:[]};T.arrays[q]=W;for(let H=0;H<O;H++){let J={name:q,index:H};for(let[a0,t0]of Y){let Z=zv[t0.get("type")];if(!Z)continue;W.fields?.find(f0=>f0.name===a0)||W.fields.push({name:a0,type:t0.get("type"),byteSize:Z.len||t0.get("bytes")||t0.get("length")});let s0=`${q}[${H}].${a0}`,{fields:U,shadowInfo:v0}=this.createDDEJsonFields(s0,t,Z,t0);U.forEach(f0=>{f0.arrayRef=J}),v0&&(T.shadows[v0.name]=v0),y.push(...U)}}R.push(...y)}else{let{arrayInfo:y,fields:O,shadowInfo:Y}=this.createDDEJsonFields(q,t,M,L);y&&(T.arrays[y.name]=y),Y&&(T.shadows[Y.name]=Y),R.push(...O)}R.forEach(y=>{y.index=++T.fieldIndex,T.fields.push(y),T.size+=y.byteSize})}}i.containers[p]=T}return i}getRealContainerInformation(r){let t,i,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:v,direction:E,previousTitle:u}=this.findPreviousUsedContainer(F);t=v,i=E,n=u}if(!t){let F=Object.entries(this.usedContainerNames).find(([,v])=>v===r);F&&(t=F[0])}return t||(t=this.findNextFreeContainer(r)),this.usedContainerNames[t]=r,i||(i=[Oe.setting,Oe.command].includes(r)?Wr.down:Wr.up),i===Wr.up&&t&&Kv[t].xmits.includes(Wr.upPlus)&&(i=Wr.upPlus),t&&[zn.configA,zn.configB].includes(t)&&(i=Wr.backendOnly),{realContainer:t,transferDirection:i,legacyTitle:n}}findNextFreeContainer(r){if(r===zn.aloha)return zn.aloha;let t=HD;r.startsWith("timeseries_")?t=UD:[Oe.relations,Oe.storage].includes(r)&&(t=GD);let i=this.previousVersion?.containers;return i&&(t=t.filter(n=>!Object.hasOwn(i,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,i=Object.values(t).find(n=>n.title===r);return{name:i?.name,direction:i?.transferDirection,previousTitle:i?.previousTitle}}createDDEJsonFields(r,t,i,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let p=0;p<F;p++){let j=`${r.toLowerCase()}[${p}]`;v.push(this.buildDDEJsonField(j,n,{name:r,index:p},i,t,null))}}else{let p=this.buildDDEJsonField(r,n,null,i,t,null);v.push(p);let j=n.get("shadowFields");if(j){u={name:p.name,byteSize:p.byteSize,byteOffset:p.byteOffset};for(let[w,g]of j){let S=w;r.includes(".")&&(S=r.split(".")[0]+`.${w}`),v.push(this.buildDDEJsonField(S,g,null,i,t,p.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,i,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:i,shadowRef:v,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,Le.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(i=>{let F=i.key.value;F==="timeseries"?i.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants"].includes(F)||t.push(i)}),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,i,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...EA(i,t.key.range)})}if(K.isAnalytics(this.manifest)&&![Oe.relations,Oe.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...EA(i,t.key.range)})}}validateContainerFields(r,t,i,n){let F=i.value;if(!F)return;let v=i.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let j=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let w=E?.fields.find(R=>R.id===j.toLowerCase()),g=u.value,S=g.get("type",!0),T=this.resolvePossibleAlias(r,S),q=g.get("bytes",!0),L=this.resolvePossibleAlias(r,q);w&&(S&&T&&w.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${w.type}" to "${T}".
|
|
2332
|
+
`);let n={res:e,types:s,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function zD(x,A,e,r){let t=A.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:Vv(t)?await zv(A):null},n=await x.handleApi(s);ZA(e,n.status,n.body,n.headers)}async function VD(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(Lv(r,"file"));case"POST /dev/sync":return t.sync(KD(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Rv(e,"since",0),Rv(e,"limit",500))};case"POST /dev/at":return WD(t,Lv(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 x7(x);case"GET /dev/configs":return t.configs();default:return}}async function WD(x,A){if(!A)throw new Le(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function XD(x,A,e,r){let[t,s=""]=r.split("?"),n=A.method??"GET",F=Vv(n)?await zv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Mv(F)),u=Object.values(E).every(D=>D.ok);ZA(e,u?200:400,JSON.stringify({results:E}));return}let v=await VD(x,`${n} ${t}`,new URLSearchParams(s),Mv(F));if(v===void 0){ZA(e,404,cr(Kv,`no route for ${n} ${t}`));return}ZA(e,200,JSON.stringify(v))}catch(v){if(v instanceof Le){ZA(e,v.status,cr(v.code,v.message));return}ZA(e,500,cr("E_DEV",v instanceof Error?v.message:String(v)))}}async function YD(x,A,e,r){if(HD(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(s).get("token")??void 0:void 0;if(!JD(e,x.token,F)){ZA(r,401,cr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await zD(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await XD(x,e,r,t):ZA(r,404,cr(Kv,`no route for ${t}`))}catch(v){if(v instanceof Le&&!r.headersSent){ZA(r,v.status,cr(v.code,v.message),{connection:"close"});return}throw v}}async function ra(x){let{session:A,logger:e}=x,r=x.host??ID;GD(x,r);let t=new ea;for(let F of Hv)A.on(F,v=>t.broadcast(F,v));let s=Ov.default.createServer((F,v)=>{YD(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||ZA(v,500,cr("E_INTERNAL",u))})});try{await new Promise((F,v)=>{s.once("error",v),s.listen(x.port??MD,r,()=>{s.off("error",v),F()})})}catch(F){throw t.close(),F}s.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=s.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(F=>s.close(()=>F())),QD(LD)])}}}function QD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var ZD={"/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 x7(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Gv.Utils.joinPath(x.cwd,r0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=Uv.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 ${r0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...ZD},A}var Lt=require("node:fs"),Wv=require("node:path"),Xv=require("vscode-uri");var A7=300,e7=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function ta(x){return x instanceof Error?x.message:String(x)}function r7(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function t7(x){let A=[],e=r=>{A.push(r);for(let t of(0,Lt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Wv.join)(r,t.name))};try{e(x)}catch{}return A}function Yv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??A7,s=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let w=await e.build();if(w.ok!==!0){r.error(`Rebuild failed: ${w.message??"see diagnostics"}`);return}if(x.flash!==!1){let h=await e.flash();if(!h.success){r.error(h.message);return}}await e.sync()}catch(w){r.error(`Watch cycle failed: ${w instanceof Error?w.message:String(w)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=w=>(h,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!w||P!==null&&w(P))&&u()},j=(w,h,S)=>{let P=Xv.Utils.joinPath(A,w);try{s.push((0,Lt.watch)(P.fsPath,{recursive:h},D(S)))}catch(q){if(r7(q))return;if(h){r.warn(`Recursive file watching is not available on this platform (${ta(q)}) \u2014 watching every directory under ${w} individually.`);for(let L of t7(P.fsPath))try{s.push((0,Lt.watch)(L,{recursive:!1},D(S)))}catch(O){r.warn(`Could not watch ${L}: ${ta(O)}`)}return}r.warn(`Could not watch ${w}: ${ta(q)}`)}};return j(r0.filePaths.dlo.path,!0),j(r0.filePaths.dde.path,!0),j(".",!1,w=>e7.has(w)),{close(){n&&clearTimeout(n);for(let w of s)w.close()}}}var n7=new Set(["uto-meta","state","console","command","recorder-drop"]),s7=".ndjson",i7=[".db",".sqlite",".sqlite3"];function Zv(x,A,e,r){if(!n7.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 a7(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 o7(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")),n=Zv(t.type,s,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function F7(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 v7(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),s=A.get(r)??[],n=F7(s);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:s.length}})}async function l7(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=o7(a7(e));return{sessions:v7(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function c7(){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 Qv(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Rt(x){return x==null?null:String(x)}function na(x){return typeof x=="number"?x:Number(x)}function f7(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 E7(x,A){let e=await c7(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],n=new Map;for(let v of Qv(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),D=na(v.ts),j=f7(v.data,`${u}@${D} (session ${E})`,s),w=Zv(u,j,Rt(v.owner),D),h=n.get(E);h?h.push(w):n.set(E,[w])}return{sessions:Qv(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(v=>{let E=String(v.session_id);return{id:E,serial:Rt(v.serial),deviceId:Rt(v.device_id),startedTs:na(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:na(v.ended_ts),appVersion:Rt(v.app_version),platform:Rt(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:s}}finally{t.close()}}async function sa(x,A){let e=x.path.toLowerCase();if(e.endsWith(s7))return l7(x,A);if(i7.some(r=>e.endsWith(r)))return E7(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function ia(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 rl=require("node:events"),tl=G0(Ie());var xl="at-tx",aa="at-rx",B7=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function C7(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function Al(x){let A=B7.exec(C7(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function d7(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 u7(x,A){if(d7(x,A))return!0;let e=Al(x),r=Al(A);return e!==null&&r!==null&&e===r}function D7(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function p7(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function oa(x){return`hex[${D7(x)}] ascii["${p7(x)}"]`}function b7(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Fa(x){return x===void 0?1:x==="max"||x<=0?0:x}var Yn=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===xl||r.type===aa).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=Fa(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!==aa)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!==xl;)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: ${oa(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!u7(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${oa(t)} actual: ${oa(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===aa;)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=b7(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var Qn="state",la="console",nl="command",sl="uto-meta",va="at",m7=new Set([Qn,la,nl,sl]),j7="not available in replay mode",el="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function h7(x){return x===Qn?"state":x===la?"console":x===sl?"uto":va}function g7(x,A){return x===la&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===nl&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Ot=class extends rl.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 Xr({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 Yn(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(va,t)}),this.atHandler=new tl.AtCommandHandler(this.transport,vr(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=Fa(this.speed);for(let t of A){if(!m7.has(t.type))continue;let s=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),s);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===Qn&&(this.lastState=A.json??null,this.emit(Qn,this.lastState)),this.logStream.push(h7(A.type),g7(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:el})}}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 Q0(j7,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(va,`> ${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:el};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 y7="details";function k7(){return[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles]}async function fa(x,A,e){let r=e.logger??new WA.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return _7(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Me({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??k7(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let s,n,F;try{s=await ra({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Yv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=ol(x,t,s.url,e.pov,r))}catch(E){throw await s?.close(),await t.stop(),E}let v=s;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),Fl(F,r),await v.close(),await t.stop()}}}function w7(x,A){return al.isAbsolute(A)?Yr.URI.file(A):Yr.Utils.joinPath(x,A)}async function _7(x,A,e,r){let t=w7(x,e.replay),s=await sa(t,A);for(let D of s.warnings)r.warn(D);let n=ia(s,e.session),F=new Ot({file:t.fsPath,recording:s,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",D=>r.warn(D instanceof Error?D.message:String(D))),F.start();let v,E;try{v=await ra({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=ol(x,F,v.url,e.pov,r))}catch(D){throw await v?.close(),await F.stop(),D}let u=v;return{url:u.url,port:u.port,session:F,apmId:F.status().apmId,async close(){Fl(E,r),await u.close(),await F.stop()}}}function ol(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:y7,n=Yr.Utils.joinPath(x,"pov",s);if(!(0,il.existsSync)(Yr.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,ca.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),v=E=>{for(let u of E.toString("utf8").split(/\r?\n/)){let D=u.trim();D&&A.logStream.push("pov",D)}};return F.stdout?.on("data",v),F.stderr?.on("data",v),F.on("error",E=>t.error(`POV dev server failed: ${E.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function Fl(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,ca.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 vl=require("uuid"),S7="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var Gt=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:s,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(s?`Bearer ${s}`:""),this.logger=F}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},n={method:A,headers:s};r&&(r instanceof FormData?n.body=r:(s["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.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(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.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 ll(x){return(0,vl.v5)(x,S7)}async function Ea(x,A,e,r,t,s,n){let F=await K.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await K.isApmPartEnabled(x,A,u0.Part.dlo,F),D=u&&r,j=D?r.toUpperCase():`${E}_${v}`,w=D?r:j,h=n||j;return h.length>50&&(e.warn(`Site name "${h}" is too long. Truncating to 50 characters.`),h=h.substring(0,50)),{apmId:ll(w),applicationId:null,name:h,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:s}}async function cl(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[v,E]=F.split("@");await ex.installDependency(x,A,e,r,t,v,E||null,n)}else await ex.installDependencies(x,A,e,r,t);await ex.installNpmInApmParts(x,A,e)}async function fl(x,A,e,r,t=null,s=!0,n){return await K.validateBasicManifest(x,A,null),mx.buildAll(x,A,e,r,t,s,n)}async function $7(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await K.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function El(x,A,e,r,t,s,n,F){e.info("Publishing package...");let v=await $7(s);if(F)await mx.publishArchive(x,A,e,t,r,F,n,v);else return await mx.validatePublishSettings(x,A,t,r),mx.release(x,A,e,r,t,n,v)}async function Bl(x,A,e,r,t,s){return mx.pack(x,A,e,r,t,s)}var Oe=H0.DDEContainerName,Cl=H0.allowedRelationTypes,T7=H0.regexRelation,P7=H0.ContainerType,q7=H0.checkForReservedFieldName,xs=H0.ContainerName,dl=H0.CONTAINER_DEFS,N7=H0.SERVER_CONTAINER,I7=H0.HISTDATA_CONTAINER,M7=H0.CONFIG_CONTAINER,Qr=H0.TransferDirection,ul=H0.fieldTypeDefinitions,EA=h0.yamlRangeToLineInformation,As;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=F}),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(n=>n.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:n}=this.parseYamlFile(r,t);return n.find(E=>E.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s),diagnostics:n}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new Re.LineCounter,F=(0,Re.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let v=F.contents||new Re.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,s),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),s),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t){let s={containers:{},setPointList:{}},n=new Map,F=[...Object.values(Oe)];if(r.get("cloudProject")){let E=Object.values(this.previousVersion.containers).map(D=>D.title),u=[...new Set([...F,...E])];F.length=0,F.push(...u)}for(let E of F)r.has(E)&&n.set(E,r.get(E));let v=r.get("timeseries");if(v)for(let[E,u]of v)n.set(E,u);for(let[E,u]of n){let{realContainer:D,transferDirection:j,legacyTitle:w}=this.getRealContainerInformation(E);if(!D)continue;let h=dl[D],S=E.includes("timeseries_")?E.replace("timeseries_",""):E,P={name:D,title:S,previousTitle:w,containerType:h.ctype,volatile:E===Oe.volatile,transferDirection:j,fieldCount:u.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};t&&P.libraries.push(t);for(let[q,L]of u){let O=[],s0=L.get("type"),M=ul[s0];if(!(!M&&s0!=="array")){if(s0==="array"){let y=[],R=L.get("length"),Y=L.get("fields"),W={name:q,length:R,library:t||null,fields:[]};P.arrays[q]=W;for(let H=0;H<R;H++){let J={name:q,index:H};for(let[a0,t0]of Y){let Z=ul[t0.get("type")];if(!Z)continue;W.fields?.find(l0=>l0.name===a0)||W.fields.push({name:a0,type:t0.get("type"),byteSize:Z.len||t0.get("bytes")||t0.get("length")});let i0=`${q}[${H}].${a0}`,{fields:U,shadowInfo:v0}=this.createDDEJsonFields(i0,t,Z,t0);U.forEach(l0=>{l0.arrayRef=J}),v0&&(P.shadows[v0.name]=v0),y.push(...U)}}O.push(...y)}else{let{arrayInfo:y,fields:R,shadowInfo:Y}=this.createDDEJsonFields(q,t,M,L);y&&(P.arrays[y.name]=y),Y&&(P.shadows[Y.name]=Y),O.push(...R)}O.forEach(y=>{y.index=++P.fieldIndex,P.fields.push(y),P.size+=y.byteSize})}}s.containers[D]=P}return s}getRealContainerInformation(r){let t,s,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:v,direction:E,previousTitle:u}=this.findPreviousUsedContainer(F);t=v,s=E,n=u}if(!t){let F=Object.entries(this.usedContainerNames).find(([,v])=>v===r);F&&(t=F[0])}return t||(t=this.findNextFreeContainer(r)),this.usedContainerNames[t]=r,s||(s=[Oe.setting,Oe.command].includes(r)?Qr.down:Qr.up),s===Qr.up&&t&&dl[t].xmits.includes(Qr.upPlus)&&(s=Qr.upPlus),t&&[xs.configA,xs.configB].includes(t)&&(s=Qr.backendOnly),{realContainer:t,transferDirection:s,legacyTitle:n}}findNextFreeContainer(r){if(r===xs.aloha)return xs.aloha;let t=M7;r.startsWith("timeseries_")?t=I7:[Oe.relations,Oe.storage].includes(r)&&(t=N7);let s=this.previousVersion?.containers;return s&&(t=t.filter(n=>!Object.hasOwn(s,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(n=>n.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let D=0;D<F;D++){let j=`${r.toLowerCase()}[${D}]`;v.push(this.buildDDEJsonField(j,n,{name:r,index:D},s,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,s,t,null);v.push(D);let j=n.get("shadowFields");if(j){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[w,h]of j){let S=w;r.includes(".")&&(S=r.split(".")[0]+`.${w}`),v.push(this.buildDDEJsonField(S,h,null,s,t,D.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,s,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:v,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,Re.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let F=s.key.value;F==="timeseries"?s.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants"].includes(F)||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,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...EA(s,t.key.range)})}if(K.isAnalytics(this.manifest)&&![Oe.relations,Oe.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...EA(s,t.key.range)})}}validateContainerFields(r,t,s,n){let F=s.value;if(!F)return;let v=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let j=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let w=E?.fields.find(O=>O.id===j.toLowerCase()),h=u.value,S=h.get("type",!0),P=this.resolvePossibleAlias(r,S),q=h.get("bytes",!0),L=this.resolvePossibleAlias(r,q);w&&(S&&P&&w.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${w.type}" to "${P}".
|
|
2333
2333
|
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...EA(n,S.range)}),q&&L&&w.byteSize!==L&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${w.byteSize}' to '${L}'.
|
|
2334
|
-
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...EA(n,q.range)}))})}checkForContainerRelation(r,t,
|
|
2335
|
-
`)}function
|
|
2336
|
-
`);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let
|
|
2334
|
+
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...EA(n,q.range)}))})}checkForContainerRelation(r,t,s,n){let F=r.value.get("fields");F&&F.items.forEach(E=>{this.checkForContainerRelation(E,t,s,n)}),r.value.items.forEach(E=>{let u=E.value;if(u?.value&&T7.exec(`${u.value}`)){let D=E.key.value;if(D){if(!Object.hasOwn(Cl,D))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${D}" does not allow relations.`,...EA(n,u.range)});if(["scale","offset"].includes(D))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${D}" are not available within the dlo source.`,...EA(n,u.range)})}return this.validateContainerRelation(D,u,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],v=r.key,E=v.value;q7(E)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${E}" is not allowed.`,...EA(n,v.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(D=>{this.validateFieldName(D,t,s,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${E}" is already occupied`,...EA(n,v.range)}):F.push(E.toLowerCase())}checkFieldNameLength(r,t,s,n){let F=r.key,v=F.value,u=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,D=31-u.length;u.length+v.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:on.CODE.ddeFieldLength,message:`Field name "${v}" to long. ${D} characters allowed for this field/container.`,...EA(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[v,E,u]=t.value.split(".",3),[D,j]=v.split("@"),w=D?D.split(":")[1]:null,S=(w&&this.libraryYaml[w]?this.libraryYaml[w]:s).contents?.get(j),P=E.split("[")[0],q=null;if(S){let L=S.get(P);if(L)if(u){let O=L.get("fields");O&&O.get(u)&&(q=O.get(u))}else q=L;else q=this.findRelatedShadowField(S,P)}if(q){let L=Cl[r],O=q.get("type");L.includes(O)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${O}" is not allowed for attribute "${r}".`,...EA(F,t.range)})}else w&&!this.libraryYaml[w]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${w}" does not exist.`,...EA(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...EA(F,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let F=s.value.get("shadowFields");if(!F)continue;let v=F.get(t);if(v)return v}}mergeAndFormat(r){let t={containers:{},setPointList:{}};for(let s of this.libraryDDE)this.combineDDE(t,s);return this.combineDDE(t,r),this.sortContainerFields(t),this.generateSetPointList(t),t}combineDDE(r,t){for(let[s,n]of Object.entries(t.containers)){let F=r.containers[s];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[s]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let v=this.initialContainerByteOffset(F);for(let[E,u]of F.fields.entries()){if(u.shadowRef){let D=F.shadows[u.shadowRef];u.byteOffset=D.byteOffset}else u.byteOffset=v,this.updateShadowFieldInformation(r.containers[s],u),v+=u.byteSize||0;E>F.fieldCount-1&&(u.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===P7.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:n}=this.sortFields(t);t.fields=s,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(D=>!D.shadowRef),s=r.fields.filter(D=>D.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let D=this.sortPreviousContainerFields(r,t);n.push(...D)}else n.push(...t);n.forEach(D=>{this.updateShadowFieldInformation(r,D)});let E=n[n.length-1],u=E.byteSize+E.byteOffset;return s.forEach(D=>{D.byteOffset=r.shadows[D.shadowRef].byteOffset,n.push(D)}),{sortedFields:n,containerSize:u}}sortPreviousContainerFields(r,t){let s=r.name,n=this.previousVersion.containers[s],F=[],v=this.initialContainerByteOffset(r);for(let E of n.fields){if(E.shadowRef)continue;let u=t.findIndex(j=>E.id===j.name?.toLowerCase());if(u===-1){v=E.byteOffset+E.byteSize;continue}let D=t[u];if(E.type!==D.type&&E.byteSize!==D.byteSize){v=E.byteOffset+E.byteSize;continue}D.byteOffset=E.byteOffset,t.splice(u,1),F.push(D),v=this.initialContainerByteOffset(r)}if(v>this.initialContainerByteOffset(r)){let E=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(v,E)),this.updateShadowFieldInformation(r,E)}for(let E of t){if(E.shadowRef)E.byteOffset=r.shadows[E.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,E);let u=F[F.length-1];u.shadowRef&&(u=r.shadows[u.shadowRef]),E.byteOffset=u.byteOffset+u.byteSize}F.push(E)}return F}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(n)}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})(As||={});var AA=H0.TransferDirection,_A=H0.parseXMLValueWithRelation,L7=H0.parseXMLBitmask,R7=H0.parseXMLDefaultValue,O7=H0.fieldTypeDefinitions;function Ba(x,A){let r=[];function t(F,v=!0){if(v){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function s(F,v){F!=="mergeofs"&&t(`${F}=${v}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,v]of Object.entries(A.containers)){F.startsWith("histdata")&&v.transferDirection!==AA.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),s("name",F),s("alias",v.title),s("title",v.title.replace("_"," "));let E={};[AA.none,AA.backendOnly,AA.deviceOnly,AA.down,AA.downPlus].includes(v.transferDirection)&&s("upload","0"),[AA.none,AA.backendOnly,AA.deviceOnly,AA.up,AA.upPlus].includes(v.transferDirection)&&s("download","0"),(K.isIotApp(x)||K.isLibrary(x))&&[AA.up,AA.upPlus].includes(v.transferDirection)&&s("edit","99");for(let u of v.fields){if(u.type==="shadow")continue;let D=G7(u),j=O7[D.type],w=_A("title",D,A)||D.name;!w.startsWith("%")&&D.library&&(w=`${D.library}: ${w}`);let h={title:w,alias:D.name,index:u.index,...E};h.byteofs=`${D.byteOffset}`;for(let[S,P]of Object.entries(j.xml))h[S]=P;Object.hasOwn(j,"xmlOut")&&j.xmlOut(h,D,A),h.units=_A("unit",D,A),h.chmode=_A("channelMode",D,A),h.ialarm_high=_A("chartAlarmHigh",D,A),h.ialarm_low=_A("chartAlarmLow",D,A),h.iwarn_high=_A("chartWarningHigh",D,A),h.iwarn_low=_A("chartWarningLow",D,A),h.hysterese=_A("chartHysteresis",D,A),h.itrigger=_A("chartTriggerThreshold",D,A),h.itriggerus=_A("chartTriggerRelation",D,A),h.setpoint=_A("chartSetPoint",D,A),h.bitmask=L7(D),D.hex&&(h.editmask="%HEX%"),D.readPermission&&(h.view=D.readPermission),D.writePermission&&(h.edit=D.writePermission),D.defaultValue!==void 0&&(h.default=R7(D)),D.utilsTransferInterval===!0&&(h.param0="%FFFF0005%transfer_interval"),t("<field>"),D.library&&t(`// declared by ${D.library} library`,!0);for(let[S,P]of Object.entries(h))P!==void 0&&s(S,`${P}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+v.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
|
|
2335
|
+
`)}function G7(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]=h0.patchValueWithArrayInfo(t,e);return A}var xe=G0(require("semver"));var SA=G0(require("semver"));var ua=require("vscode-uri");var Px=H0.ContainerType,M0=H0.TransferDirection,Ut=H0.regexRelation,U7=H0.CONFIG_CONTAINER,da=H0.CONTAINER_DEF_DLO_CID_BASE,Kt=H0.CONTAINER_DEFS,Jt=H0.fieldTypeDefinitions,pl=h0.isNumeric;function BA(x){let A=Jt[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var es="Microtronics/dlo-core";function Da(x){return K.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,es)?ex.rangeToVersion(x.libraryDependencies[es]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,es)?ex.rangeToVersion(x.libraryDevDependencies[es]):null}function H7(x){let A=Da(x);return A===null||SA.gte(A,"0.3.0")?SA.valid(x.version)?x.version:SA.coerce(`${x.version}`):SA.coerce(x.version)?.major}function Ca(x){let A=Da(x);if(A===null)return!1;let e=SA.coerce(A);return SA.gte(e,"1.1.0")}function J7(x){let A=Da(x);if(A===null)return!1;let e=SA.coerce(A);return SA.gte(e,"1.15.0")}var K7=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function z7(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=BA(x);return!A||A==="skip"?!1:K7.includes(`${A.rwfunc}`)}function V7(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}=Ss[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=H7(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,v]of Object.entries(s))pl(v)?A(F,`${v}`):A(F,`"${v}"`)}function W7(x,A,e,r){let t=r.flat,{definesWithSource:s}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let v=s[n]?.comment;if(v){let u=v.split(`
|
|
2336
|
+
`);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let D of u)x(` * ${D}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function X7(x,A,e,r){let t=parseInt(x.substring(6)),s=1<<t;e[t]=A.size,r.cx_isupm|=[M0.both,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)?s:0,r.cx_isvolatilem|=A.volatile?s:0,r.cx_isdnm|=[M0.both,M0.none,M0.deviceOnly,M0.down,M0.downPlus].includes(A.transferDirection)?s:0,r.cx_isvlm|=[M0.bothPlus,M0.upPlus,M0.downPlus].includes(A.transferDirection)?s:0}function Y7(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[M0.upPlus].includes(A.transferDirection)?1<<t:0}function Q7(x){return[M0.upPlus].includes(x.transferDirection)}function Z7(x,A,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),v={hx_isvlm:0},E;for(let[D,j]of Object.entries(e.containers))j.containerType===Px.cx&&j.transferDirection!==M0.backendOnly?(X7(D,j,t,s),r=Math.max(r,j.size)):j.containerType===Px.hx?(Y7(D,j,F,v),r=Math.max(r,j.size)):j.containerType===Px.aloha&&(E=Q7(j),r=Math.max(r,j.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${n.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[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${v.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let u=[...F];Object.hasOwn(e,"applog")&&u.push(125),Object.hasOwn(e,"alerts")&&u.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...u)}`),x(""),E!==void 0&&(x(`#define _DDE_ALOHA_varlen ${E?1:0}`),x(""))}function x6(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=da(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===Px.aloha?Px.aloha:t.title}`,F=Kt[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${s}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function bl(x,A,e){let r=[],t=r.push.bind(r);function s(F){t(`
|
|
2337
2337
|
// === ${F} ===
|
|
2338
|
-
`)}function n(F,v,E=!1){let u=
|
|
2339
|
-
`)}var Rt=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)||!ta(e.containerType,e.transferDirection)||!e.fields||!this.context&&!G0.hasContainerAppFields(e)||Ot[A].ctype!==Tx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e){this.sourceType="globalVariables";let r=e?this.variableNameForPawnDefinition(A,e):A;if(e){let t=this.generateCommentForField(e);t&&(Array.isArray(t)?(this.pawn("/**"),t.forEach(i=>{this.pawn(` * ${i}`)}),this.pawn(" */")):this.pawn(`// ${t}`))}this.pawn(`stock ${r}${e?this.initialiserForGlobalVar(e):""};`)}initialiserForGlobalVar(A){if(A.defaultDloDefine===void 0||A.arrayRef)return"";let e=BA(A);return!e||e==="skip"||`${e.rwp||""}`.includes("%l")?"":` = ${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}`;this.generateArrayDefines(e,A);for(let r of A.fields){if(r.type==="shadow"||r.shadowRef||r.library!==this.context)continue;if(r.arrayRef!==null){let i=A.arrays[r.arrayRef.name],n=`${e}_${r.arrayRef.name}`;i.fields?.length&&(n+=`_${r.name.split(".")[1]}`),this.createDefaultDefineForField(n,r);continue}let t=this.generateFieldVariableName(e,r);this.createDefaultDefineForField(t,r),this.createGlobalVar(`${t}`,r)}}generateArrayDefines(A,e){for(let r of Object.values(e.arrays)){if(this.context!==r.library)continue;let t=`${A}_${r.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${t} ${r.length}`),r.fields){for(let F of r.fields)Xn[F.type]?.isBlob&&F.byteSize&&this.addDefine(`${A}_${r.name}_${F.name}_dim`,F.byteSize);let i={...e};i.fields=[],r.fields.forEach(F=>{i.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:F.byteSize,id:F.name,library:r.library,name:F.name,type:F.type,title:null,index:0})});let n=`${A}_${r.name}_def`;this.generateTypeDefinitions(i,n),this.createGlobalVar(`${A}_${r.name}[${t}][${n}]`)}else this.createGlobalVar(`${A}_${r.name}[${t}]`)}}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(Xn,e.type)&&Xn[e.type].isBlob,i=e.byteSize;return i&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${i}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${i};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 i of r){let n=this.generateFieldTypeDefinition(i,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let i=A.arrayRef;if(i){let v=e.arrays[i.name];if(!r.includes(i.name)&&!v.fields)r.push(i.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let i=this.handleArrayFieldDedup(A,e,r,t);if(i===null)return null;let{fieldName:n,fld_dim:F}=i,v="";if(A.type==="struct")v="// ."+n+F;else{let E=BA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=BA(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&&ZD(e)){let{value:r,reason:t}=this.parseFieldDefault(e),i=`${A}_default`;this.addDefine(i,r,t)&&(e.defaultDloDefine=i)}}addDefine(A,e,r){return Mt.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=Ot[e],t=`DDE_${A.containerType===Tx.aloha?Tx.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===Tx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[Tx.hx,Tx.aloha].includes(e.containerType),i=e.containerType===Tx.hx,n=e.containerType===Tx.aloha,F=`_${A}_write`,v=ra(this.manifest)?", flags":"",E=i?`stamp${v}`:"",u=ra(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${i?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?Tx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let p=`${A}_transfer`,j=`${A}_persist`,w=this.functionArgumentsForDdeWrite(i,t);if(this.pawn(">",`${this.context?"stock ":""}${p}(${w}) {`),t)this.pawn(`${F}(${E});`);else{let g=e.name.slice(-1);this.pawn(`dde_flush(${g}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${j}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=ra(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,i,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=i.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,i=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=BA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,i,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||YD(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,i){e.byteOffset!==i&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let i of e.templateFields){let n=BA(i);if(!n||n==="skip")continue;let F=i.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+i.byteSize;let v=`${A}_${i.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${i.byteSize}`),E+=this.defaultArgumentFor(i,r),this.pawn(E+");")}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=BA(r);if(!t||t==="skip")continue;let{name:i,index:n}=r.arrayRef;e.has(i)||e.set(i,new Map);let F=e.get(i);F.has(n)||F.set(n,[]),F.get(n).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[i,n]of A){let F=r.arrays[i];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(i,{arrayName:i,dimDefine:`${e}_${i}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=BA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}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 F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let i=this.parseFieldScaleOffset(A);return i?t(i.calculated,i.reason):(r!==void 0&&!Mt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!Mt.exec(`${A.offset}`)||!!Mt.exec(`${A.scale}`)||!!Mt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,i=A.scale!==void 0?Number(A.scale):1;if(i===0)return null;let n=(Number(e)-t)/i,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${i}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function s7(x){return`${`onUplinkApply_${x}()`};`}function Yv(x,A,e){A.libraries.forEach(r=>{let t=h0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function a7(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${h0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function o7(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))Ot[r].ctype===Tx.cx&&([M0.up,M0.upPlus,M0.deviceOnly].includes(t.transferDirection)&&e.push(t),[M0.bothPlus,M0.both,M0.downPlus,M0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function F7(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();`),Yv(x,e,"Restore"),G0.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 v7(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();`),Yv(x,e,"Apply"),G0.hasContainerAppFields(e)&&x(` ${s7(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 Qv(x,A){let e=[],r=e.push.bind(e);a7(r,A);let{containerApply:t,containerRestore:i}=o7(x);return F7(r,i),v7(r,t),e.join(`
|
|
2340
|
-
`)}var
|
|
2341
|
-
`)}function
|
|
2342
|
-
`)}async function l7(x,A,e){let r=[];for(let t of e){let i=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(na.Utils.joinPath(x,i))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Lt(x,A,e,r){let t=na.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var ef=H0(require("semver")),rf=require("yaml");var CA=G0.ContainerType,Qn=G0.TransferDirection,c7=G0.fieldTypeDefinitions,Xr={$ref:"#/components/parameters/contextId"},E7={$ref:"#/components/parameters/addonId"},B7={$ref:"#/components/parameters/appId"},Af={$ref:"#/components/schemas/histdataResponse"},C7={$ref:"#/components/schemas/histdataRequest"},Zn={$ref:"#/components/schemas/rapidM2MStamp"},d7={$ref:"#/components/schemas/timeseriesRequestBase"},Yn="rapidM2M Stamp",SA={description:"Successful operation"},tf={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"'}}},nf={...structuredClone(tf)};Object.assign(nf.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:[Zn,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:Yn,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:Yn,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:Yn,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:Yn,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 Gt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Re={401:{description:"Permission denied",...Gt},403:{description:"Forbidden",...Gt},404:{description:"Resource not found",...Gt},500:{description:"Internal error",...Gt}};function sa(x,A,e=null){let r=ef.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(tf)):Object.assign(t.components,structuredClone(nf));let i=K.isAddon(A),n=K.isAnalytics(A);i&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===CA.hx)||!e&&!G0.hasContainerAppFields(F)||F.containerType===CA.aloha||(u7(t,F),p7(t,F,e),j7(t,F,i,n),!i&&!n&&(D7(t,F,e),m7(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,rf.stringify)(t)}function u7(x,A){x.tags.push({name:eA(A.title),description:`Transfer direction ${A.transferDirection}`})}function eA(x){return x.split("_").join(" ")}function D7(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},i=[];A.containerType===CA.hx&&(r+="Select",i.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===CA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=sf(n),!n.readPermission&&!n.writePermission&&i.push(n.id)));t.required=i.length?i:void 0,x.components.schemas[r]=t}function p7(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},i=[],n=A.containerType===CA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=sf(v),!v.readPermission&&!v.writePermission&&i.push(v.name));t.required=i.length?i:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={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(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[d7,v]},t.properties.stamp=Zn,i.push("stamp")}}function sf(x){let e={...c7[x.type].openApi},r=b7(x);return e.default=r,e.example=r,e.description=x.description,e}function b7(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function m7(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([CA.cx,CA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[eA(A.title)],summary:`Retrieve the data of the "${eA(A.title)}" container`,parameters:[Xr],responses:{200:{...SA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Zn}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Re}},[Qn.down,Qn.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[eA(A.title)],summary:`Modify the data of the "${eA(A.title)}" container`,parameters:[Xr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...SA},204:{...SA},...Re}});else if(A.containerType===CA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[eA(A.title)],summary:`Retrieve the youngest data of the "${eA(A.title)}" container`,parameters:[Xr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...SA,content:{"application/json":{schema:Af}}},...Re}},x.paths[t]={get:{deprecated:!0,tags:[eA(A.title)],summary:`Get the historical data of the "${eA(A.title)}" container.`,parameters:[Xr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},C7]}}],responses:{200:{...SA,content:{"application/json":{schema:Af}}},...Re}}}}x.paths[e]=r}function j7(x,A,e=!1,r=!1){let i=A.containerType===CA.hx?"timeseries":"containers",n=[],F=eA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${i}/${A.title}`,params:[Xr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${i}/${A.title}`,params:[Xr,E7],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${i}/${A.title}`,params:[B7],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${eA(A.title)}" container`,parameters:[],responses:{200:{...SA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Zn}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Re}};if([CA.cx,CA.cb].includes(A.containerType)&&(E.get=u,[Qn.down,Qn.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${eA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...SA},204:{...SA},...Re}}),n.forEach(p=>{let j=structuredClone(E);Object.values(j).forEach(w=>{w?.parameters?.unshift(...p.params),w?.tags?.unshift(...p.tags)}),x.paths[p.path]=j})),A.containerType===CA.hx){E.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:{...SA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Re}},e&&(E.post={tags:[],summary:`Insert data into the "${eA(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:{...SA},400:{description:"Bad request",...Gt},...Re}});let p=n[0],j=structuredClone(E);Object.values(j).forEach(R=>{R?.parameters?.unshift(...p.params),R?.tags?.unshift(...p.tags)}),x.paths[p.path]=j;let w={...SA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},g=`${p.path}/youngest`,S={get:structuredClone(j.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=w;let T=e?2:1;S.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[g]=S;let q=`${p.path}/oldest`,L={get:structuredClone(j.get)};L.get.summary=`Get the oldest record of "${A.title}" container`,L.get.responses[200]=w,L.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[q]=L}}var of=G0.TransferDirection,xi=" new szTemp{64};",Ai=" return strcat(aData, szTemp, sizeof(szTemp));";function Ff(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 aa(x){if(x.type==="shadow"||x.shadowRef)return null;let A=BA(x);return!A||A==="skip"?null:Ff(A)}function vf(x){return[G0.ContainerType.hx,G0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==of.backendOnly}function h7(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=BA(x);return!!A&&A!=="skip"}function g7(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",i=`${x.arrayRef.name}|${t}|${A}`;e.has(i)||e.set(i,{fields:[],formatType:A}),e.get(i).fields.push(x)}function y7(x){let A=[],e=new Map,r=new Set,t=!1;for(let i of x){if(!h7(i))continue;let n=aa(i);i.arrayRef&&n?g7(i,n,e):(A.push(i),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function k7(x,A,e){e.sort((E,u)=>E.arrayRef.index-u.arrayRef.index);let r=e.map(E=>E.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((E,u)=>u===0||E-r[u-1]===t)))return null;let[n,F]=A.split("|"),v=e[0].library?`_${h0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:aa(e[0]),pawnVarBase:`${v}${x}_${n}`}}function w7(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:i}=y7(A),n=[];for(let[F,v]of r){let{fields:E,formatType:u}=v;if(E.length<2){e.push(...E),t.add(u);continue}let p=k7(x,F,E);p?(t.add(u),n.push(p)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:i}}function _7(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(vf(e))for(let r of e.fields){let t=aa(r);t&&A.add(t)}return A}function S7(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(xi),x(' sprintf(szTemp, _, "%d", value);'),x(Ai),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(xi),x(' sprintf(szTemp, _, "%.3f", value);'),x(Ai),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(xi),x(' sprintf(szTemp, _, "%s", value);'),x(Ai),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(xi),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(Ai),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 $7(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function P7(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 T7(x,A){let{startOffset:e,endOffset:r,step:t,formatType:i,pawnVarBase:n,subField:F}=A,v=$7(e,t),E=P7(e,r,t);if(x(` if (${E}) {`),i==="bin"){let u=`${n}[${v}]${F}`,p=F?F.substring(1):"",j=p?`${n}_${p}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${j});`)}else x(` return _DDE_fmt_${i}(aData, ${n}[${v}]${F});`);x(" }")}function q7(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=BA(e);if(!r||r==="skip")return;let i=`${e.library?`_${h0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Ff(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${i}, ${i}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${i});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=i;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function N7(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function af(x,A,e){let r=e===G0.ContainerType.cx?"c":"h",t=e===G0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[i,n]of Object.entries(A.containers))e===n.containerType&&i.startsWith(t)&&n.transferDirection!==of.backendOnly&&N7(x,i,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function I7(x,A){let e=w7(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)T7(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)q7(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function M7(x,A){for(let[,e]of Object.entries(A.containers))vf(e)&&I7(x,e)}function ff(x){let A=[],e=A.push.bind(A),r=_7(x);return S7(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),af(e,x,G0.ContainerType.cx),af(e,x,G0.ContainerType.hx),e(" return OK;"),e("}"),M7(e,x),A.join(`
|
|
2343
|
-
`)}var
|
|
2344
|
-
`),tx=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",Ex.libraryName),rA=jx.Utils.joinPath(M,tx);
|
|
2345
|
-
`)),O.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await y.writeFile(L0,s0),O.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await R(M,y,O)}i0.exportAutoDloFiles=q;async function L(M,y,O,Y){let W=await K.read(M,y),H=K.isLibrary(W),J=jx.Utils.joinPath(M,r0.filePaths.dist.path,"dde-api.yaml");await y.rm(J).catch(()=>{});let a0=jx.Utils.joinPath(M,r0.filePaths.dist.ddeApi);if(await y.writeFile(a0,sa(Y,W)),O.log("Generated",r0.filePaths.dist.ddeApi),H){let t0=jx.Utils.joinPath(M,r0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),Z=sa(Y,W,W.name);Z.length&&(await y.writeFile(t0,Z),O.log("Generated",r0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}i0.exportOpenApi=L;async function R(M,y,O){let Y=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.defaultInc),W=await xf(M,y);await y.writeFile(Y,W),O.log("Generated",r0.filePaths.studio.auto.dlo.defaultInc)}i0.exportDefaultInc=R})(kA||={});async function lf(x,A,e){let r=[],t=await ex.getAll(e);for(let i in t){let n=ex.dependencyToPath(x,i),F=ex.dependencyIdToName(i),v=jx.Utils.joinPath(n,`${Ut}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await kA.readYamlFile(v,A)})}if(K.isLibrary(e)){let i=jx.Utils.joinPath(x,`/${Ut}/${e.name}.dde`);await A.stat(i)&&r.push({libraryName:e.name,path:i,yaml:await kA.readYamlFile(i,A)})}return r}function L7(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 O7(x,A,e,r){let i={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 i?i():e}function R7(x){let A=x.instancePath||"/",e=x.parentSchema,r=L7(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${O7(x.keyword,x.params,t,e)}`}function G7(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),i=x.getIn(t,!0);if(i?.range)return i.range}return null}function U7(x,A,e){let r=G7(x,e.instancePath||"");return r?Bf(A,r):{line:0,startCharacter:0,endCharacter:0}}var oa=require("vscode-uri");var df=H0(require("node:child_process"));var ri;(e=>{async function x(r,t,i){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.pov)){i.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=oa.Utils.joinPath(r,v);try{await Cf(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,i){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.blo,n)){i.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=oa.Utils.joinPath(r,v);try{await Cf(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(ri||={});async function Cf(x,A,e){return new Promise((r,t)=>{df.exec(A,{cwd:x.fsPath,env:process.env},(i,n,F)=>{e.log(n),F&&e.error(F),i&&t(i),r(null)})})}var Ht=require("@gera2ld/tarjs"),uf=h0.convertBlobToString,Fa=require("pako"),mx;(p=>{class x extends Error{_mergedDiagnostics;constructor(w,g){super(w),this.name="BuildError",this._mergedDiagnostics=g}get mergedDiagnostics(){return this._mergedDiagnostics}}p.BuildError=x;async function A(j,w,g,S,T,q=!0,L){q=H7(g,q),await J7(j,w,g,S,T,q);try{let M=await vx.read(j,w,g);await K7(j,w,g,M)}catch(M){g.warn("Could not generate defines.ts:",M)}let R={[u0.Part.dde]:[],[u0.Part.dlo]:[],[u0.Part.dfiles]:[]},i0={[u0.Part.dde]:z7,[u0.Part.dlo]:V7,[u0.Part.dfiles]:W7};try{for(let M of[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles])if(q.includes(M)&&(g.info(`Building ${M.toUpperCase()}...`),await Z7(g,M,i0[M],R[M],j,w)))return R}catch(M){throw L?new x(M?.message,R):M}return q.includes(u0.Part.pov)?await ri.tryBuildPov(j,w,g):g.info("Skipping pov build"),q.includes(u0.Part.blo)?await ri.tryBuildBlo(j,w,g):g.info("Skipping blo build"),await X7(j,w,g),await Y7(j,w,g),g.done("Project build completed."),R}p.buildAll=A;async function e(j,w,g,S,T,q,L){let R=await K.read(j,w);return K.isLibrary(R)?(g.info("Library project detected. Publishing library..."),i(j,w,g,T,S)):(g.info("App project detected. Publishing app..."),t(j,w,g,T,q,L,S))}p.release=e;async function r(j,w,g,S,T,q){let L=await K.read(j,w),R=`${L.name}-${L.version}.tar.gz`,i0=null;if(K.isLibrary(L))g.info("Library project detected. Packing library..."),i0=await Df(j,w,g,T,S);else{g.info("App project detected. Packing app...");let y=await pf(j,w,g,T,q,S);i0=await A6(y)}let M=lr.Utils.joinPath(j,R);i0!==null?(await w.writeFile(M,i0),g.done(`Packaged: ${M.fsPath}`)):g.error(`Could not create archive: ${M.fsPath}`)}p.pack=r;async function t(j,w,g,S,T,q=null,L){if(!await u0.validateAccess(j,w,S,!1,L))throw new Error("Could not validate access to application");let i0=await pf(j,w,g,S,T,L);await u0.updateProfile(j,w,S,L);let M=await u0.publishTag(j,w,S,i0,L);if(q!==null){let y=await K.read(j,w);await Fx.updateExistingApplicationVersion(S,y.publisher,y.registry?.id,y.version,{allowedBackends:q},L),g.info(`Tag "${M.version}" with phase "${M.phase}" shared with ${[...q].join(";")}!`)}g.done(`Tag "${M.version}" with phase "${M.phase}" published!`)}p.releaseAPM=t;async function i(j,w,g,S,T){let q=await K.read(j,w),L=await Df(j,w,g,S,T);await Or.publishPackage(S,q,L,T),g.done(`Library "${q.publisher}/${q.name}" with version "${q.version}" published!`)}p.releaseLibrary=i;async function n(j,w,g,S,T,q,L,R=null){if(q==="*"){let H=await K.read(j,w);q=`${H.name}-${H.version}.tar.gz`,g.info(`Publishing detected archive package "${q}"...`)}let i0=lr.Utils.joinPath(j,q);if(!await w.stat(i0))throw new Error(`Archive package not found: ${i0.fsPath}`);let M=await w.readFile(i0),y=await e6(M),{publisher:O,registry:Y,version:W}=y;K.isLibrary(y)?(await Or.publishPackage(S,y,M,T),g.done(`Library "${O}/${y.name}" with version "${y.version}" published!`)):(await Fx.updateApplicationFile(S,O,Y.id,W,"app.tar.gz",M,T),await Fx.updateExistingApplicationVersion(S,O,Y?.id,W,{allowedBackends:R||void 0,phase:L||void 0},T),g.info(`Tag "${W}" with phase "${L}" shared with ${[...R||""].join(";")}!`),g.done(`Tag "${W}" with phase "${L}" published!`))}p.publishArchive=n;async function F(j,w,g){let S;try{S=await w.readFile(lr.Utils.joinPath(j,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(uf(S)===r0.readme(g))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}p.getReadmeFile=F;async function v(j,w){let g;try{g=await w.readFile(lr.Utils.joinPath(j,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(uf(g)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return g}p.getChangelogFile=v;async function E(j,w,g,S){let T=await K.read(j,w),{name:q,publisher:L,description:R}=T,i0=K.validateProjectName(q,K.isLibrary(T));if(i0)throw new Error(`name: ${i0}`);let M=K.validateDescription(R);if(M)throw new Error(`description: ${M}`);let y=K.validatePublisherId(L)||await K.validatePublisherOnline(g,L,S);if(y)throw new Error(`publisher: ${y}`);if(!K.isLibrary(T)&&(await K.validateApplicationIcon(j,w,T),K.validateEngineSettings(T),K.isApp(T)&&await K.isApmPartEnabled(j,w,u0.Part.dlo,T)&&(!T.dpid||!Object.values(K.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}p.validatePublishSettings=E;async function u(j,w){let g=Fa.ungzip(j),S=await Ht.TarReader.load(g),T={};for(let q of S.fileInfos)w.includes(q.name)&&(T[q.name]=S.getFileBlob(q.name));return T}p.readFilesFromTarGz=u})(mx||={});function H7(x,A){let e=Object.values(u0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function J7(x,A,e,r,t,i){await ex.validateMinimumBackendVersion(x,A,e),i.includes(u0.Part.dde)&&await kA.fetchPreviousHistoryJson(x,A,e,r,t)}async function K7(x,A,e,r){r.defaultsOnly?(await vx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await vx.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await vx.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function z7(x,A,e){let r=await kA.compileDDE(x,A,e);if(r.ddeJSON){await kA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await K.read(x,A);K.isLibrary(t)||await kA.exportHistoryJson(x,A,e,r.ddeJSON),await kA.exportOpenApi(x,A,e,r.ddeJSON),await K.isApmPartEnabled(x,A,u0.Part.dlo,t)&&(await kA.exportAutoDloFiles(x,A,e,r.ddeJSON),await nn.exportDloConfig(x,A,e))}return r.diagnostics}async function V7(x,A,e){let r=new Lr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function W7(x,A,e){return await an.process(x,A,e)}async function X7(x,A,e){let r=await K.read(x,A);K.isLibrary(r)&&await Sr.normalizeLibraryParts(x,A,r,e)}async function Y7(x,A,e){let r=lr.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=lr.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function Q7(x,A,e){A!==u0.Part.dlo&&x6(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 Z7(x,A,e,r,t,i){let n=await e(t,i,x);return r.push(...n),Q7(x,A,n)}function x6(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 Df(x,A,e,r,t){let i=await K.read(x,A);return await K.validateBasicManifest(x,A,i),await mx.buildAll(x,A,e,t,r),await Or.createArchive(x,A)}async function pf(x,A,e,r,t,i){if(!Object.values(u0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await K.validateBasicManifest(x,A,null),await mx.buildAll(x,A,e,i,r),await u0.createTag(x,A,t)}async function A6(x){let A=new Ht.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let i=t;A.addFile(r,i)}else{let i=t;A.addFile(r,await i.arrayBuffer())}let e=await A.write();return Fa.gzip(await e.arrayBuffer())}async function e6(x){let A=await r6(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 r6(x,A){let e=Fa.ungzip(x),r=await Ht.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var t6=h0.bufferToBase64;var u0;(u=>{let x;(L=>(L.alpha="alpha",L.beta="beta",L.rc="rc",L.release="release",L.stage="stage",L.passive="passive",L.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=u.Part||={});function e(p){let{description:j,name:w,pov:g,engines:S,blo:T,publisher:q,type:L}=p,R=L||K.ProjectTypes.app,i0={name:w,abstract:j,author:q||"",pov_location:K.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:T?.accessLevel||K.BloAccessLevel.restricted,pip_id:""};return g&&g.details&&(i0.pov_location=K.PovLocation.pure,i0.pov_details_lowlevel=!!g.details.lowLevel),R==="addon"&&(i0.required_hwfw=void 0,i0.required_productcode=void 0,i0.addon_max_sources=1,i0.addon_max_per_site=p.maxInstancesPerSite),i0}u.createBaseTagHeader=e;async function r(p,j,w){let g=await K.read(p,j),S=e(g),T={version:g.version,...S,phase:w};return await i(p,j,g,T)}u.createTag=r;async function t(p,j){let w=await K.read(p,j),S={...e(w),blo_autostart:!1};return i(p,j,w,S)}u.createDevTag=t;async function i(p,j,w,g){let S=new FormData;S.append("tag",JSON.stringify(g)),S.append(`src/${K.fileName}`,new Blob([await K.readAsBlob(p,j)]));let T=new Blob([await j.readFile(Ce.Utils.joinPath(p,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",T),w.icon){let L=await j.readFile(Ce.Utils.joinPath(p,w.icon)),R=t6(L);S.append("previews/00.png",new Blob([`data:image/png;base64,${R}`]))}if(Object.hasOwn(g,"phase")){let L=await mx.getReadmeFile(p,j,g.name),R=await mx.getChangelogFile(p,j);S.append("previews/README.md",new Blob([L])),S.append("previews/CHANGELOG.md",new Blob([R]))}if(await K.isApmPartEnabled(p,j,"dlo")){let L=new Blob([await j.readFile(Ce.Utils.joinPath(p,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",L)}if(await K.isApmPartEnabled(p,j,"pov",w)){await bf(p,j,S,r0.filePaths.dist.povDetailsPath,"bin/pov/details");let L=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([L]))}let q=await j.findFiles(p,`${r0.filePaths.dist.dfilesPath}/*`);for(let L of q){let R=new Blob([await j.readFile(L)]);S.append(`bin/dfiles/${Ce.Utils.basename(L)}`,R)}return await K.isApmPartEnabled(p,j,"blo",w)&&await bf(p,j,S,r0.filePaths.dist.bloPath,"bin/blo"),await n6(p,j,S),S}u.createBuffer=i;async function n(p,j,w,g,S){let T=await K.read(p,j);g||await mx.validatePublishSettings(p,j,w,S);let{registry:q}=T,L=q?.id;if(!L&&!g&&(L=await F(p,j,w,T,S)),L){let{publisher:R}=T;if(!R)return null;try{return{id:L,...await Fx.getExistingApplication(w,R,L,S)}}catch(i0){if(i0?.message==="Could not find given application")return L=await F(p,j,w,T,S),{id:L,...await Fx.getExistingApplication(w,R,L,S)}}}return null}u.validateAccess=n;async function F(p,j,w,g,S){let T="myDatanet",{publisher:q,name:L,description:R,registry:i0}=g,M={id:i0?.id,type:g.type||K.ProjectTypes.app,name:L,targetSystem:T,description:R||"",allowedBackends:null};K.isAddon(g)&&(M.allowedApplications=null);let y=await Fx.createNewApplication(w,q,M,S);if(!y)throw new Error("Failed to initialize application");return g.registry={id:y},await K.write(p,j,g),y}u.registerNew=F;async function v(p,j,w,g){let{name:S,publisher:T,description:q,registry:L}=await K.read(p,j),R=L?.id;await Fx.updateExistingApplication(w,T,R,{description:q,name:S,targetSystem:"myDatanet"},g)}u.updateProfile=v;async function E(p,j,w,g,S){let{publisher:T,registry:q,version:L}=await K.read(p,j);return await Fx.publishApplicationVersion(w,T,q?.id,L,g,S)}u.publishTag=E})(u0||={});async function bf(x,A,e,r,t){let i=await A.findFiles(x,`${r}/**`);for(let n of i){let F=Ce.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(Ce.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function n6(x,A,e){let r=Ce.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);if(await A.stat(r)){let i=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",i)}let t=Ce.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var If=H0(require("update-notifier"));function i6(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let i=0;i<r.length;i++){let n=r[i];i===r.length-1?t[n]=e:((typeof t[n]!="object"||t[n]===null||Array.isArray(t[n]))&&(t[n]={}),t=t[n])}}function mf(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[i,n]=t.split("=",2),F=i.slice(2),v=!0;if(n!==void 0)v=n;else{let E=A[r+1];E&&!E.startsWith("-")&&(v=E,r++)}F.includes(".")?i6(e,F,v):e[F]=v}return e}var jf=require("vscode-uri");function ni(x){return x instanceof Error?x.message:String(x)}function de(x,A){return{success:!1,errorCode:x,message:A}}async function a6(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:i,options:n}=x;r.info("[1/5] Building project...");try{let F=n.part?n.part:!0;return await K.validateBasicManifest(A,e,null),await mx.buildAll(A,e,r,t,i,F,!0),r.done("Build completed successfully"),null}catch(F){return de(1,`Build failed: ${ni(F)}`)}}async function o6(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await Ks(r,A);return t||de(2,`USB device not found with serial number: ${r}`)}async function F6(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:i,debug:n}=t;r.info("[3/5] Uploading binary to USB device...");let F=jf.Utils.joinPath(A,r0.filePaths.dist.mainAmxPath),v=await Vr(i,F,e,r,n);return v.success?(r.done("USB upload completed"),null):de(3,`USB upload failed: ${v.message}`)}async function v6(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return de(4,`myDatanet authentication failed: ${ni(e)}`)}}async function f6(x,A,e){if(A)try{let i=await x.getCustomer(A);return e.info(`Using customer: ${i.name} (${i._uid})`),i._uid}catch{return de(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return de(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(i=>i.name).join(", ");return de(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function l6(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 c6(x,A,e){let{cwd:r,fs:t,logger:i}=x;i.info("Creating development APM tag...");try{let n=await u0.createDevTag(r,t),F=await A.uploadDevTag(e.apmId,n);return e.applicationId=F,i.done("Development tag uploaded"),null}catch(n){return de(5,`Development tag upload failed: ${ni(n)}`)}}async function E6(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 de(6,`Site creation failed: ${ni(t)}`)}}function hf(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 ti(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function gf(x,A,e,r,t,i){let n={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:i},{serial:F,server:v,customer:E,mdnToken:u}=i;e.info("Starting development deployment...");let p=await a6(n);if(p)return p;let j=await o6(n);if(ti(j))return j;let w=await F6(n);if(w)return w;let g=new It(v,u,e),S=await v6(g,e);if(ti(S))return S;let T=S,q=await f6(g,E,e);if(ti(q))return q;let L=q,R=await Aa(x,A,e,F,T.name,L,i.siteName);await l6(g,F,R,e);let i0=await c6(n,g,R);if(i0)return i0;let M=await E6(g,L,R,e);return ti(M)?M:{success:!0,siteUid:M.siteUid,siteName:M.siteName,apmId:R.apmId,message:"Development deployment completed successfully"}}var va="/api/1/sites/dev";function B6(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function fa(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 xx(`${e} (HTTP ${A})`,r)}function C6(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(i,n,F)=>fetch(`${e}${n}`,{method:i,headers:r,body:F===void 0?void 0:JSON.stringify(F)});return{async api(i){let n=B6(i.method)&&i.body?JSON.parse(i.body):void 0,F=await t(i.method,i.path,n),v={};return F.headers.forEach((E,u)=>{v[u]=E}),{status:F.status,headers:v,body:await F.text()}},async dev(i,n,F){let v=await t(i,n,F),E=await v.text();if(!v.ok)throw fa(E,v.status);return E?JSON.parse(E):null},async close(){}}}async function d6(x){if(!x.serial)throw new xx("--serial is required unless --url is given",2);let A=new Ie({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 u6(A,e,r,t)},close:()=>A.stop()}}function yf(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function u6(x,A,e,r){let t=r??{},[i,n=""]=e.split("?"),F=new URLSearchParams(n);switch(`${A} ${i}`){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(yf(F,"since",0),yf(F,"limit",500))};default:throw new xx(`unsupported route ${A} ${i}`,3)}}async function D6(x){return x.url?C6(x.url,x.token):d6(x)}async function ue(x,A){let e=await D6(x);try{return await A(e)}finally{await e.close()}}function la(x){if(x.status>=400)throw fa(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function kf(x){return ue(x,A=>A.dev("GET","/dev/status"))}async function wf(x,A){let[e,r]=p6(A);return ue(x,async t=>{let i=la(await t.api({path:`${va}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return i;let n=i??{},F=Object.keys(n).find(v=>v.toLowerCase()===r.toLowerCase());if(F===void 0)throw new xx(`unknown field '${r}' in container '${e}'`,8);return{[F]:n[F]}})}async function _f(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new xx(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return ue(x,async t=>{let i=`${va}/containers/${encodeURIComponent(A)}`,n=await t.api({path:i,method:"PUT",body:JSON.stringify(r)});if(n.status>=400)throw fa(n.body,n.status);let F=n.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:F,record:la(await t.api({path:i,method:"GET"}))}})}async function Sf(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${va}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return ue(x,async i=>la(await i.api({path:t,method:"GET"})))}async function $f(x,A){return ue(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function Pf(x){return ue(x,A=>A.dev("GET","/dev/state"))}async function Tf(x,A){return ue(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function qf(x,A){return ue(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}async function Nf(x,A,e){let r=A.filter?new RegExp(A.filter):null,t=i=>{let n=i.text??"";(!r||r.test(n))&&e(i)};await ue(x,async i=>{let n=0,F=async()=>{let E=await i.dev("GET",`/dev/logs?since=${n}&limit=500`);for(let u of E.records)n=Math.max(n,u.seq),t(u)};if(await F(),!A.follow)return;let v=Date.now()+(A.durationMs??3e4);for(;Date.now()<v;)await new Promise(E=>setTimeout(E,500)),await F()})}function p6(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var dA=new Ax.Command,si=(0,If.default)({pkg:ui}),y0=new VA.Logger,b6=()=>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":"",De=Yr.Utils.joinPath(Yr.URI.file(process.cwd()),b6());dA.version(ui.version).usage("<command>");dA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
|
|
2338
|
+
`)}function n(F,v,E=!1){let u=pl(v)?"":'"';E&&(u=""),t(`#define ${F} ${u}${v}${u}`)}return V7(s,n,e),W7(t,s,n,A),Z7(t,s,x),x6(t,s,x),r.join(`
|
|
2339
|
+
`)}var zt=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)||!da(e.containerType,e.transferDirection)||!e.fields||!this.context&&!H0.hasContainerAppFields(e)||Kt[A].ctype!==Px.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(n=>{this.pawn(` * ${n}`)}),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],n=`${A}_${t.arrayRef.name}`,F="";s.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!Jt[A.type])return!1;let e=BA(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 n=e.get(s.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:s.type}))return"";r.push(n?.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 v of t.fields)Jt[v.type]?.isBlob&&v.byteSize&&this.addDefine(`${A}_${t.name}_${v.name}_dim`,v.byteSize);let n={...e};n.fields=[],t.fields.forEach(v=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:v.byteSize,id:v.name,library:t.library,name:v.name,type:v.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${s}][${F}]`,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(Jt,e.type)&&Jt[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 n=this.generateFieldTypeDefinition(s,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let s=A.arrayRef;if(s){let v=e.arrays[s.name];if(!r.includes(s.name)&&!v.fields)r.push(s.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}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:n,fld_dim:F}=s,v="";if(A.type==="struct")v="// ."+n+F;else{let E=BA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=BA(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&&z7(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 Ut.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=Kt[e],t=`DDE_${A.containerType===Px.aloha?Px.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===Px.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[Px.hx,Px.aloha].includes(e.containerType),s=e.containerType===Px.hx,n=e.containerType===Px.aloha,F=`_${A}_write`,v=Ca(this.manifest)?", flags":"",E=s?`stamp${v}`:"",u=Ca(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?Px.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let D=`${A}_transfer`,j=`${A}_persist`,w=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${w}) {`),t)this.pawn(`${F}(${E});`);else{let h=e.name.slice(-1);this.pawn(`dde_flush(${h}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${j}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Ca(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,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=s.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=BA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,s,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||J7(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),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 n=BA(s);if(!n||n==="skip")continue;let F=s.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+s.byteSize;let v=`${A}_${s.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${s.byteSize}`),E+=this.defaultArgumentFor(s,r),this.pawn(E+");")}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=BA(r);if(!t||t==="skip")continue;let{name:s,index:n}=r.arrayRef;e.has(s)||e.set(s,new Map);let F=e.get(s);F.has(n)||F.set(n,[]),F.get(n).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,n]of A){let F=r.arrays[s];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=BA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}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 F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(A);return s?t(s.calculated,s.reason):(r!==void 0&&!Ut.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!Ut.exec(`${A.offset}`)||!!Ut.exec(`${A.scale}`)||!!Ut.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 n=(Number(e)-t)/s,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function A6(x){return`${`onUplinkApply_${x}()`};`}function ml(x,A,e){A.libraries.forEach(r=>{let t=h0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function e6(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${h0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function r6(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))Kt[r].ctype===Px.cx&&([M0.up,M0.upPlus,M0.deviceOnly].includes(t.transferDirection)&&e.push(t),[M0.bothPlus,M0.both,M0.downPlus,M0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function t6(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();`),ml(x,e,"Restore"),H0.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 n6(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();`),ml(x,e,"Apply"),H0.hasContainerAppFields(e)&&x(` ${A6(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 jl(x,A){let e=[],r=e.push.bind(e);e6(r,A);let{containerApply:t,containerRestore:s}=r6(x);return t6(r,s),n6(r,t),e.join(`
|
|
2340
|
+
`)}var s6=U7.map(x=>`_DDE_${x}_write`);function hl(x){let A=[],e=A.push.bind(A),r=[...s6];for(let[t,s]of Object.entries(x.containers)){let n=da(s.containerType,s.transferDirection),F=Kt[t];if(!n||!s.fields||F.ctype!==Px.cx)continue;let v=`DDE_${s.name}`,E=`DDE_${s.title}_id`;if([M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(s.transferDirection)){let u=`_${v}_write`;e(`stock ${u}() {`),e(` dde_wbegin(${E});`),Dl(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===Px.cx){let u=`_${v}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),Dl(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(`
|
|
2341
|
+
`)}function Dl(x,A,e){A.libraries.forEach(r=>{let t=h0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),H0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function gl(x,A){let e=[],r=await ex.getApmPartDependencies(x,A,u0.Part.dlo);await Ht(x,A,e,r0.fileNames.autoInc);let t=await i6(x,A,r);for(let s of r)s.name==="local-data-interface"&&await Ht(x,A,e,r0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await Ht(x,A,e,r0.fileNames.autoDdeInc.replace("X","app")),await Ht(x,A,e,r0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await Ht(x,A,e,r0.fileNames.autoUplinkInc),e.join(`
|
|
2342
|
+
`)}async function i6(x,A,e){let r=[];for(let t of e){let s=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(ua.Utils.joinPath(x,s))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Ht(x,A,e,r){let t=ua.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var kl=G0(require("semver")),wl=require("yaml");var CA=H0.ContainerType,ts=H0.TransferDirection,a6=H0.fieldTypeDefinitions,Zr={$ref:"#/components/parameters/contextId"},o6={$ref:"#/components/parameters/addonId"},F6={$ref:"#/components/parameters/appId"},yl={$ref:"#/components/schemas/histdataResponse"},v6={$ref:"#/components/schemas/histdataRequest"},ns={$ref:"#/components/schemas/rapidM2MStamp"},l6={$ref:"#/components/schemas/timeseriesRequestBase"},rs="rapidM2M Stamp",$A={description:"Successful operation"},_l={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"'}}},Sl={...structuredClone(_l)};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:[ns,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:rs,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:rs,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:rs,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:rs,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 Vt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Ge={401:{description:"Permission denied",...Vt},403:{description:"Forbidden",...Vt},404:{description:"Resource not found",...Vt},500:{description:"Internal error",...Vt}};function pa(x,A,e=null){let r=kl.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(_l)):Object.assign(t.components,structuredClone(Sl));let s=K.isAddon(A),n=K.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===CA.hx)||!e&&!H0.hasContainerAppFields(F)||F.containerType===CA.aloha||(c6(t,F),E6(t,F,e),d6(t,F,s,n),!s&&!n&&(f6(t,F,e),C6(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,wl.stringify)(t)}function c6(x,A){x.tags.push({name:eA(A.title),description:`Transfer direction ${A.transferDirection}`})}function eA(x){return x.split("_").join(" ")}function f6(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===CA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===CA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=$l(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function E6(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=[],n=A.containerType===CA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=$l(v),!v.readPermission&&!v.writePermission&&s.push(v.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={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(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[l6,v]},t.properties.stamp=ns,s.push("stamp")}}function $l(x){let e={...a6[x.type].openApi},r=B6(x);return e.default=r,e.example=r,e.description=x.description,e}function B6(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function C6(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([CA.cx,CA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[eA(A.title)],summary:`Retrieve the data of the "${eA(A.title)}" container`,parameters:[Zr],responses:{200:{...$A,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:ns}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Ge}},[ts.down,ts.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[eA(A.title)],summary:`Modify the data of the "${eA(A.title)}" container`,parameters:[Zr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...$A},204:{...$A},...Ge}});else if(A.containerType===CA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[eA(A.title)],summary:`Retrieve the youngest data of the "${eA(A.title)}" container`,parameters:[Zr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...$A,content:{"application/json":{schema:yl}}},...Ge}},x.paths[t]={get:{deprecated:!0,tags:[eA(A.title)],summary:`Get the historical data of the "${eA(A.title)}" container.`,parameters:[Zr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},v6]}}],responses:{200:{...$A,content:{"application/json":{schema:yl}}},...Ge}}}}x.paths[e]=r}function d6(x,A,e=!1,r=!1){let s=A.containerType===CA.hx?"timeseries":"containers",n=[],F=eA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[Zr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[Zr,o6],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[F6],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${eA(A.title)}" container`,parameters:[],responses:{200:{...$A,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:ns}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Ge}};if([CA.cx,CA.cb].includes(A.containerType)&&(E.get=u,[ts.down,ts.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${eA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...$A},204:{...$A},...Ge}}),n.forEach(D=>{let j=structuredClone(E);Object.values(j).forEach(w=>{w?.parameters?.unshift(...D.params),w?.tags?.unshift(...D.tags)}),x.paths[D.path]=j})),A.containerType===CA.hx){E.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:{...$A,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Ge}},e&&(E.post={tags:[],summary:`Insert data into the "${eA(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:{...$A},400:{description:"Bad request",...Vt},...Ge}});let D=n[0],j=structuredClone(E);Object.values(j).forEach(O=>{O?.parameters?.unshift(...D.params),O?.tags?.unshift(...D.tags)}),x.paths[D.path]=j;let w={...$A,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},h=`${D.path}/youngest`,S={get:structuredClone(j.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=w;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[h]=S;let q=`${D.path}/oldest`,L={get:structuredClone(j.get)};L.get.summary=`Get the oldest record of "${A.title}" container`,L.get.responses[200]=w,L.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[q]=L}}var Pl=H0.TransferDirection,ss=" new szTemp{64};",is=" return strcat(aData, szTemp, sizeof(szTemp));";function ql(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 ba(x){if(x.type==="shadow"||x.shadowRef)return null;let A=BA(x);return!A||A==="skip"?null:ql(A)}function Nl(x){return[H0.ContainerType.hx,H0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Pl.backendOnly}function u6(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=BA(x);return!!A&&A!=="skip"}function D6(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 p6(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!u6(s))continue;let n=ba(s);s.arrayRef&&n?D6(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function b6(x,A,e){e.sort((E,u)=>E.arrayRef.index-u.arrayRef.index);let r=e.map(E=>E.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((E,u)=>u===0||E-r[u-1]===t)))return null;let[n,F]=A.split("|"),v=e[0].library?`_${h0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:ba(e[0]),pawnVarBase:`${v}${x}_${n}`}}function m6(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=p6(A),n=[];for(let[F,v]of r){let{fields:E,formatType:u}=v;if(E.length<2){e.push(...E),t.add(u);continue}let D=b6(x,F,E);D?(t.add(u),n.push(D)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function j6(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Nl(e))for(let r of e.fields){let t=ba(r);t&&A.add(t)}return A}function h6(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(ss),x(' sprintf(szTemp, _, "%d", value);'),x(is),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(ss),x(' sprintf(szTemp, _, "%.3f", value);'),x(is),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(ss),x(' sprintf(szTemp, _, "%s", value);'),x(is),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(ss),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(is),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 g6(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function y6(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 k6(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,v=g6(e,t),E=y6(e,r,t);if(x(` if (${E}) {`),s==="bin"){let u=`${n}[${v}]${F}`,D=F?F.substring(1):"",j=D?`${n}_${D}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${j});`)}else x(` return _DDE_fmt_${s}(aData, ${n}[${v}]${F});`);x(" }")}function w6(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=BA(e);if(!r||r==="skip")return;let s=`${e.library?`_${h0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=ql(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=s;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function _6(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Tl(x,A,e){let r=e===H0.ContainerType.cx?"c":"h",t=e===H0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,n]of Object.entries(A.containers))e===n.containerType&&s.startsWith(t)&&n.transferDirection!==Pl.backendOnly&&_6(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function S6(x,A){let e=m6(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)k6(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)w6(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function $6(x,A){for(let[,e]of Object.entries(A.containers))Nl(e)&&S6(x,e)}function Il(x){let A=[],e=A.push.bind(A),r=j6(x);return h6(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Tl(e,x,H0.ContainerType.cx),Tl(e,x,H0.ContainerType.hx),e(" return OK;"),e("}"),$6(e,x),A.join(`
|
|
2343
|
+
`)}var Ol=h0.yamlRangeToLineInformation,Wt=r0.filePaths.dde.path,wA;(s0=>{let x=H0.DDEJson,A=h0.convertBlobToString;s0.DDE_SCHEMA=Bo;async function r(M,y){let R=await y.readFile(M);return A(R)}s0.readYamlFile=r;async function t(M,y,R=r0.fileNames.mainDDE,Y){let W=[],H=await K.read(M,y),J=await Ml(M,y,H);if(Y)for(let Z of J){let{result:i0,unresolvedKeys:U}=vx.replaceDefineTemplates(Z.yaml,Y);Z.yaml=i0;for(let v0 of U)W.push({file:Z.path,level:"error",message:`Unresolved define template: {{${v0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of J)W.push(...v(Z.path,Z.yaml));let a0=jx.Utils.joinPath(M,Wt,R),t0=await r(a0,y);if(Y){let{result:Z,unresolvedKeys:i0}=vx.replaceDefineTemplates(t0,Y);t0=Z;for(let U of i0)W.push({file:a0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return W.push(...v(a0,t0)),{manifest:H,libraryFiles:J,main:{path:a0,yaml:t0},diagnostics:W}}s0.validate=t;async function s(M,y,R,Y=r0.fileNames.mainDDE){let W=await K.read(M,y),H=await vx.read(M,y,R),J=await t(M,y,Y,H.flat);if(J.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:J.diagnostics};let t0=await w(M,y,R),Z=new As.PreCompiler(W,J.libraryFiles,t0),i0=Z.parseLibraries();if(i0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...J.diagnostics,...i0]};let{ddeJSON:v0,diagnostics:l0}=Z.parseMainDDE(J.main.path,J.main.yaml);return{ddeJSON:v0,diagnostics:[...J.diagnostics,...l0]}}s0.compileDDE=s;let n=new Ll.default({strict:!1,allErrors:!0,verbose:!0});(0,Rl.default)(n);let F=n.compile(s0.DDE_SCHEMA);function v(M,y){let R=new as.LineCounter,Y=(0,as.parseDocument)(y,{lineCounter:R,keepSourceTokens:!0}),W=[];for(let a0 of Y.errors){let t0=a0.pos?Ol(R,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};W.push({file:M,level:"error",message:a0.message,...t0})}if(W.length>0)return W;let H=Y.toJSON();if(!F(H)){let t0=(F.errors||[]).filter(i0=>i0.keyword!=="if"),Z=new Set;for(let i0 of t0){let U=q6(i0);if(Z.has(U))continue;Z.add(U);let v0=I6(Y,R,i0);W.push({file:M,level:"error",message:U,...v0})}}return W}s0.validateJsonSchema=v,s0.PreCompiler=(M,y,R)=>new As.PreCompiler(M,y,R);function u(M,y){return Ba(M,y)}s0.generateMyDatanetXML=u;async function D(M,y,R,Y){let W=await K.read(M,y),H=Ba(W,Y),J=jx.Utils.joinPath(M,r0.filePaths.dist.ddeXmlPath);await y.writeFile(J,H),R.log("Generated",r0.filePaths.dist.ddeXmlPath)}s0.exportMyDatanetXML=D;async function j(M,y,R,Y,W){let H=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dde.historyJson);await y.rm(H).catch(console.error);let J=await K.read(M,y);if(!K.isApp(J)||!J.registry?.id)return;if(!W){R.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=xe.coerce(J.version);try{let i0=(await Fx.getExistingApplication(W,J.publisher,J.registry.id,Y)).versions.find(B0=>!xe.prerelease(B0.version)&&xe.lte(B0.version,a0)),U=i0?.files.find(B0=>B0.name==="dde.json");if(!U){R.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let v0=await fetch(U.downloadUrl,{headers:{...FA(W),...Fx.injectSemverHeader(!0)}});if(v0.status!==200){R.warn(`Could not fetch the dde.json of version "${i0?.version}"`);return}let l0=await v0.text();await y.writeFile(H,l0),R.log(`Saved history.json of previous app version ${i0.version}`)}catch(t0){R.error("Failed to fetch the dde of previous version",t0)}}s0.fetchPreviousHistoryJson=j;async function w(M,y,R){try{let Y=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dde.historyJson);if(await y.stat(Y)){let H=await y.readFile(Y);return JSON.parse(A(H))}let W=jx.Utils.joinPath(M,Wt,"history.json");if(await y.stat(W)){R.warn(`"${r0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${Wt}history.json"`);let H=await y.readFile(W),J=JSON.parse(A(H)),a0=await K.read(M,y),t0=xe.coerce(a0.version)?.version,Z=Object.keys(J||{}).sort(xe.rcompare).find(U=>U!==t0);if(!Z)return null;let i0=J[Z];return{version:Z,...i0}}}catch(Y){R.error("Failed to read history.json",Y)}return R.warn("history.json does not exist"),null}s0.getHistoryJson=w;function h(M,y){return{version:xe.coerce(y.version)?.version||"1.0.0",...structuredClone(M)}}s0.buildHistoryJson=h;async function S(M,y,R,Y){let W=await K.read(M,y),H=h(Y,W),J=jx.Utils.joinPath(M,r0.filePaths.dist.historyJson);await y.writeFile(J,JSON.stringify(H,null," ")),R.log("Generated",r0.filePaths.dist.historyJson)}s0.exportHistoryJson=S;async function P(M,y){return y.rm(jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.path))}s0.clearAutoDloDir=P;async function q(M,y,R,Y){await P(M,y);let W=await K.read(M,y),H=await Ml(M,y,W),J=await vx.read(M,y,R),a0=bl(Y,J,W),Z=new zt(W,Y,null).generate();for(let Ex of H){let Xx=new zt(W,Y,Ex.libraryName),{globals:TA,helper:PA}=Xx.generate(),lx=[...TA,...PA].join(`\r
|
|
2344
|
+
`),tx=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",Ex.libraryName),rA=jx.Utils.joinPath(M,tx);lx.length&&(R.log("Generated",tx),await y.writeFile(rA,lx))}let i0=hl(Y),U=jl(Y,H.map(Ex=>Ex.libraryName)),v0=Il(Y),l0=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoInc);await y.writeFile(l0,a0),R.log("Generated",r0.filePaths.studio.auto.dlo.autoInc);let B0=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoUplinkInc);await y.writeFile(B0,U),R.log("Generated",r0.filePaths.studio.auto.dlo.autoUplinkInc);let d0=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoLocalDataInc);await y.writeFile(d0,v0),R.log("Generated",r0.filePaths.studio.auto.dlo.autoLocalDataInc);let P0=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await y.writeFile(P0,[...Z.globals,...Z.helper].join(`
|
|
2345
|
+
`)),R.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await y.writeFile(L0,i0),R.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await O(M,y,R)}s0.exportAutoDloFiles=q;async function L(M,y,R,Y){let W=await K.read(M,y),H=K.isLibrary(W),J=jx.Utils.joinPath(M,r0.filePaths.dist.path,"dde-api.yaml");await y.rm(J).catch(()=>{});let a0=jx.Utils.joinPath(M,r0.filePaths.dist.ddeApi);if(await y.writeFile(a0,pa(Y,W)),R.log("Generated",r0.filePaths.dist.ddeApi),H){let t0=jx.Utils.joinPath(M,r0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),Z=pa(Y,W,W.name);Z.length&&(await y.writeFile(t0,Z),R.log("Generated",r0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}s0.exportOpenApi=L;async function O(M,y,R){let Y=jx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.defaultInc),W=await gl(M,y);await y.writeFile(Y,W),R.log("Generated",r0.filePaths.studio.auto.dlo.defaultInc)}s0.exportDefaultInc=O})(wA||={});async function Ml(x,A,e){let r=[],t=await ex.getAll(e);for(let s in t){let n=ex.dependencyToPath(x,s),F=ex.dependencyIdToName(s),v=jx.Utils.joinPath(n,`${Wt}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await wA.readYamlFile(v,A)})}if(K.isLibrary(e)){let s=jx.Utils.joinPath(x,`/${Wt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await wA.readYamlFile(s,A)})}return r}function T6(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 P6(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 q6(x){let A=x.instancePath||"/",e=x.parentSchema,r=T6(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${P6(x.keyword,x.params,t,e)}`}function N6(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 I6(x,A,e){let r=N6(x,e.instancePath||"");return r?Ol(A,r):{line:0,startCharacter:0,endCharacter:0}}var ma=require("vscode-uri");var Ul=G0(require("node:child_process"));var os;(e=>{async function x(r,t,s){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=ma.Utils.joinPath(r,v);try{await Gl(E,F,s)}catch(u){throw u.code?new Error(`APM part '${u0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,s){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=ma.Utils.joinPath(r,v);try{await Gl(E,F,s)}catch(u){throw u.code?new Error(`APM part '${u0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(os||={});async function Gl(x,A,e){return new Promise((r,t)=>{Ul.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var Xt=require("@gera2ld/tarjs"),Hl=h0.convertBlobToString,ja=require("pako"),mx;(D=>{class x extends Error{_mergedDiagnostics;constructor(w,h){super(w),this.name="BuildError",this._mergedDiagnostics=h}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(j,w,h,S,P,q=!0,L){q=M6(h,q),await L6(j,w,h,S,P,q);try{let M=await vx.read(j,w,h);await R6(j,w,h,M)}catch(M){h.warn("Could not generate defines.ts:",M)}let O={[u0.Part.dde]:[],[u0.Part.dlo]:[],[u0.Part.dfiles]:[]},s0={[u0.Part.dde]:O6,[u0.Part.dlo]:G6,[u0.Part.dfiles]:U6};try{for(let M of[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles])if(q.includes(M)&&(h.info(`Building ${M.toUpperCase()}...`),await z6(h,M,s0[M],O[M],j,w)))return O}catch(M){throw L?new x(M?.message,O):M}return q.includes(u0.Part.pov)?await os.tryBuildPov(j,w,h):h.info("Skipping pov build"),q.includes(u0.Part.blo)?await os.tryBuildBlo(j,w,h):h.info("Skipping blo build"),await H6(j,w,h),await J6(j,w,h),h.done("Project build completed."),O}D.buildAll=A;async function e(j,w,h,S,P,q,L){let O=await K.read(j,w);return K.isLibrary(O)?(h.info("Library project detected. Publishing library..."),s(j,w,h,P,S)):(h.info("App project detected. Publishing app..."),t(j,w,h,P,q,L,S))}D.release=e;async function r(j,w,h,S,P,q){let L=await K.read(j,w),O=`${L.name}-${L.version}.tar.gz`,s0=null;if(K.isLibrary(L))h.info("Library project detected. Packing library..."),s0=await Jl(j,w,h,P,S);else{h.info("App project detected. Packing app...");let y=await Kl(j,w,h,P,q,S);s0=await W6(y)}let M=fr.Utils.joinPath(j,O);s0!==null?(await w.writeFile(M,s0),h.done(`Packaged: ${M.fsPath}`)):h.error(`Could not create archive: ${M.fsPath}`)}D.pack=r;async function t(j,w,h,S,P,q=null,L){if(!await u0.validateAccess(j,w,S,!1,L))throw new Error("Could not validate access to application");let s0=await Kl(j,w,h,S,P,L);await u0.updateProfile(j,w,S,L);let M=await u0.publishTag(j,w,S,s0,L);if(q!==null){let y=await K.read(j,w);await Fx.updateExistingApplicationVersion(S,y.publisher,y.registry?.id,y.version,{allowedBackends:q},L),h.info(`Tag "${M.version}" with phase "${M.phase}" shared with ${[...q].join(";")}!`)}h.done(`Tag "${M.version}" with phase "${M.phase}" published!`)}D.releaseAPM=t;async function s(j,w,h,S,P){let q=await K.read(j,w),L=await Jl(j,w,h,S,P);await Or.publishPackage(S,q,L,P),h.done(`Library "${q.publisher}/${q.name}" with version "${q.version}" published!`)}D.releaseLibrary=s;async function n(j,w,h,S,P,q,L,O=null){if(q==="*"){let H=await K.read(j,w);q=`${H.name}-${H.version}.tar.gz`,h.info(`Publishing detected archive package "${q}"...`)}let s0=fr.Utils.joinPath(j,q);if(!await w.stat(s0))throw new Error(`Archive package not found: ${s0.fsPath}`);let M=await w.readFile(s0),y=await X6(M),{publisher:R,registry:Y,version:W}=y;K.isLibrary(y)?(await Or.publishPackage(S,y,M,P),h.done(`Library "${R}/${y.name}" with version "${y.version}" published!`)):(await Fx.updateApplicationFile(S,R,Y.id,W,"app.tar.gz",M,P),await Fx.updateExistingApplicationVersion(S,R,Y?.id,W,{allowedBackends:O||void 0,phase:L||void 0},P),h.info(`Tag "${W}" with phase "${L}" shared with ${[...O||""].join(";")}!`),h.done(`Tag "${W}" with phase "${L}" published!`))}D.publishArchive=n;async function F(j,w,h){let S;try{S=await w.readFile(fr.Utils.joinPath(j,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Hl(S)===r0.readme(h))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function v(j,w){let h;try{h=await w.readFile(fr.Utils.joinPath(j,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Hl(h)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return h}D.getChangelogFile=v;async function E(j,w,h,S){let P=await K.read(j,w),{name:q,publisher:L,description:O}=P,s0=K.validateProjectName(q,K.isLibrary(P));if(s0)throw new Error(`name: ${s0}`);let M=K.validateDescription(O);if(M)throw new Error(`description: ${M}`);let y=K.validatePublisherId(L)||await K.validatePublisherOnline(h,L,S);if(y)throw new Error(`publisher: ${y}`);if(!K.isLibrary(P)&&(await K.validateApplicationIcon(j,w,P),K.validateEngineSettings(P),K.isApp(P)&&await K.isApmPartEnabled(j,w,u0.Part.dlo,P)&&(!P.dpid||!Object.values(K.DeviceProfiles).includes(P.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}D.validatePublishSettings=E;async function u(j,w){let h=ja.ungzip(j),S=await Xt.TarReader.load(h),P={};for(let q of S.fileInfos)w.includes(q.name)&&(P[q.name]=S.getFileBlob(q.name));return P}D.readFilesFromTarGz=u})(mx||={});function M6(x,A){let e=Object.values(u0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function L6(x,A,e,r,t,s){await ex.validateMinimumBackendVersion(x,A,e),s.includes(u0.Part.dde)&&await wA.fetchPreviousHistoryJson(x,A,e,r,t)}async function R6(x,A,e,r){r.defaultsOnly?(await vx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await vx.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await vx.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function O6(x,A,e){let r=await wA.compileDDE(x,A,e);if(r.ddeJSON){await wA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await K.read(x,A);K.isLibrary(t)||await wA.exportHistoryJson(x,A,e,r.ddeJSON),await wA.exportOpenApi(x,A,e,r.ddeJSON),await K.isApmPartEnabled(x,A,u0.Part.dlo,t)&&(await wA.exportAutoDloFiles(x,A,e,r.ddeJSON),await vn.exportDloConfig(x,A,e))}return r.diagnostics}async function G6(x,A,e){let r=new Rr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function U6(x,A,e){return await cn.process(x,A,e)}async function H6(x,A,e){let r=await K.read(x,A);K.isLibrary(r)&&await $r.normalizeLibraryParts(x,A,r,e)}async function J6(x,A,e){let r=fr.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=fr.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function K6(x,A,e){A!==u0.Part.dlo&&V6(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 z6(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),K6(x,A,n)}function V6(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 Jl(x,A,e,r,t){let s=await K.read(x,A);return await K.validateBasicManifest(x,A,s),await mx.buildAll(x,A,e,t,r),await Or.createArchive(x,A)}async function Kl(x,A,e,r,t,s){if(!Object.values(u0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await K.validateBasicManifest(x,A,null),await mx.buildAll(x,A,e,s,r),await u0.createTag(x,A,t)}async function W6(x){let A=new Xt.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 ja.gzip(await e.arrayBuffer())}async function X6(x){let A=await Y6(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 Y6(x,A){let e=ja.ungzip(x),r=await Xt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var Q6=h0.bufferToBase64;var u0;(u=>{let x;(L=>(L.alpha="alpha",L.beta="beta",L.rc="rc",L.release="release",L.stage="stage",L.passive="passive",L.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(P=>(P.dde="dde",P.dlo="dlo",P.pov="pov",P.blo="blo",P.dfiles="dfiles"))(A=u.Part||={});function e(D){let{description:j,name:w,pov:h,engines:S,blo:P,publisher:q,type:L}=D,O=L||K.ProjectTypes.app,s0={name:w,abstract:j,author:q||"",pov_location:K.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:P?.accessLevel||K.BloAccessLevel.restricted,pip_id:""};return h&&h.details&&(s0.pov_location=K.PovLocation.pure,s0.pov_details_lowlevel=!!h.details.lowLevel),O==="addon"&&(s0.required_hwfw=void 0,s0.required_productcode=void 0,s0.addon_max_sources=1,s0.addon_max_per_site=D.maxInstancesPerSite),s0}u.createBaseTagHeader=e;async function r(D,j,w){let h=await K.read(D,j),S=e(h),P={version:h.version,...S,phase:w};return await s(D,j,h,P)}u.createTag=r;async function t(D,j){let w=await K.read(D,j),S={...e(w),blo_autostart:!1};return s(D,j,w,S)}u.createDevTag=t;async function s(D,j,w,h){let S=new FormData;S.append("tag",JSON.stringify(h)),S.append(`src/${K.fileName}`,new Blob([await K.readAsBlob(D,j)]));let P=new Blob([await j.readFile(Ce.Utils.joinPath(D,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),w.icon){let L=await j.readFile(Ce.Utils.joinPath(D,w.icon)),O=Q6(L);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(h,"phase")){let L=await mx.getReadmeFile(D,j,h.name),O=await mx.getChangelogFile(D,j);S.append("previews/README.md",new Blob([L])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await K.isApmPartEnabled(D,j,"dlo")){let L=new Blob([await j.readFile(Ce.Utils.joinPath(D,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",L)}if(await K.isApmPartEnabled(D,j,"pov",w)){await zl(D,j,S,r0.filePaths.dist.povDetailsPath,"bin/pov/details");let L=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([L]))}let q=await j.findFiles(D,`${r0.filePaths.dist.dfilesPath}/*`);for(let L of q){let O=new Blob([await j.readFile(L)]);S.append(`bin/dfiles/${Ce.Utils.basename(L)}`,O)}return await K.isApmPartEnabled(D,j,"blo",w)&&await zl(D,j,S,r0.filePaths.dist.bloPath,"bin/blo"),await Z6(D,j,S),S}u.createBuffer=s;async function n(D,j,w,h,S){let P=await K.read(D,j);h||await mx.validatePublishSettings(D,j,w,S);let{registry:q}=P,L=q?.id;if(!L&&!h&&(L=await F(D,j,w,P,S)),L){let{publisher:O}=P;if(!O)return null;try{return{id:L,...await Fx.getExistingApplication(w,O,L,S)}}catch(s0){if(s0?.message==="Could not find given application")return L=await F(D,j,w,P,S),{id:L,...await Fx.getExistingApplication(w,O,L,S)}}}return null}u.validateAccess=n;async function F(D,j,w,h,S){let P="myDatanet",{publisher:q,name:L,description:O,registry:s0}=h,M={id:s0?.id,type:h.type||K.ProjectTypes.app,name:L,targetSystem:P,description:O||"",allowedBackends:null};K.isAddon(h)&&(M.allowedApplications=null);let y=await Fx.createNewApplication(w,q,M,S);if(!y)throw new Error("Failed to initialize application");return h.registry={id:y},await K.write(D,j,h),y}u.registerNew=F;async function v(D,j,w,h){let{name:S,publisher:P,description:q,registry:L}=await K.read(D,j),O=L?.id;await Fx.updateExistingApplication(w,P,O,{description:q,name:S,targetSystem:"myDatanet"},h)}u.updateProfile=v;async function E(D,j,w,h,S){let{publisher:P,registry:q,version:L}=await K.read(D,j);return await Fx.publishApplicationVersion(w,P,q?.id,L,h,S)}u.publishTag=E})(u0||={});async function zl(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=Ce.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(Ce.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function Z6(x,A,e){let r=Ce.Utils.joinPath(x,r0.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=Ce.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var ac=G0(require("update-notifier"));function xp(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let s=0;s<r.length;s++){let n=r[s];s===r.length-1?t[n]=e:((typeof t[n]!="object"||t[n]===null||Array.isArray(t[n]))&&(t[n]={}),t=t[n])}}function Vl(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,n]=t.split("=",2),F=s.slice(2),v=!0;if(n!==void 0)v=n;else{let E=A[r+1];E&&!E.startsWith("-")&&(v=E,r++)}F.includes(".")?xp(e,F,v):e[F]=v}return e}var Wl=require("vscode-uri");function vs(x){return x instanceof Error?x.message:String(x)}function de(x,A){return{success:!1,errorCode:x,message:A}}async function ep(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:s,options:n}=x;r.info("[1/5] Building project...");try{let F=n.part?n.part:!0;return await K.validateBasicManifest(A,e,null),await mx.buildAll(A,e,r,t,s,F,!0),r.done("Build completed successfully"),null}catch(F){return de(1,`Build failed: ${vs(F)}`)}}async function rp(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await Qi(r,A);return t||de(2,`USB device not found with serial number: ${r}`)}async function tp(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:s,debug:n}=t;r.info("[3/5] Uploading binary to USB device...");let F=Wl.Utils.joinPath(A,r0.filePaths.dist.mainAmxPath),v=await Wr(s,F,e,r,n);return v.success?(r.done("USB upload completed"),null):de(3,`USB upload failed: ${v.message}`)}async function np(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return de(4,`myDatanet authentication failed: ${vs(e)}`)}}async function sp(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 de(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return de(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 de(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function ip(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 ap(x,A,e){let{cwd:r,fs:t,logger:s}=x;s.info("Creating development APM tag...");try{let n=await u0.createDevTag(r,t),F=await A.uploadDevTag(e.apmId,n);return e.applicationId=F,s.done("Development tag uploaded"),null}catch(n){return de(5,`Development tag upload failed: ${vs(n)}`)}}async function op(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 de(6,`Site creation failed: ${vs(t)}`)}}function Xl(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 Fs(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function Yl(x,A,e,r,t,s){let n={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:s},{serial:F,server:v,customer:E,mdnToken:u}=s;e.info("Starting development deployment...");let D=await ep(n);if(D)return D;let j=await rp(n);if(Fs(j))return j;let w=await tp(n);if(w)return w;let h=new Gt(v,u,e),S=await np(h,e);if(Fs(S))return S;let P=S,q=await sp(h,E,e);if(Fs(q))return q;let L=q,O=await Ea(x,A,e,F,P.name,L,s.siteName);await ip(h,F,O,e);let s0=await ap(n,h,O);if(s0)return s0;let M=await op(h,L,O,e);return Fs(M)?M:{success:!0,siteUid:M.siteUid,siteName:M.siteName,apmId:O.apmId,message:"Development deployment completed successfully"}}var ha="/api/1/sites/dev";function Fp(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function ga(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 Q0(`${e} (HTTP ${A})`,r)}function vp(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(s,n,F)=>fetch(`${e}${n}`,{method:s,headers:r,body:F===void 0?void 0:JSON.stringify(F)});return{async api(s){let n=Fp(s.method)&&s.body?JSON.parse(s.body):void 0,F=await t(s.method,s.path,n),v={};return F.headers.forEach((E,u)=>{v[u]=E}),{status:F.status,headers:v,body:await F.text()}},async dev(s,n,F){let v=await t(s,n,F),E=await v.text();if(!v.ok)throw ga(E,v.status);return E?JSON.parse(E):null},async close(){}}}async function lp(x){if(!x.serial)throw new Q0("--serial is required unless --url is given",2);let A=new Me({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 cp(A,e,r,t)},close:()=>A.stop()}}function Ql(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function cp(x,A,e,r){let t=r??{},[s,n=""]=e.split("?"),F=new URLSearchParams(n);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(Ql(F,"since",0),Ql(F,"limit",500))};default:throw new Q0(`unsupported route ${A} ${s}`,3)}}async function fp(x){return x.url?vp(x.url,x.token):lp(x)}async function ue(x,A){let e=await fp(x);try{return await A(e)}finally{await e.close()}}function ya(x){if(x.status>=400)throw ga(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function Zl(x){return ue(x,A=>A.dev("GET","/dev/status"))}async function xc(x,A){let[e,r]=Ep(A);return ue(x,async t=>{let s=ya(await t.api({path:`${ha}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return s;let n=s??{},F=Object.keys(n).find(v=>v.toLowerCase()===r.toLowerCase());if(F===void 0)throw new Q0(`unknown field '${r}' in container '${e}'`,8);return{[F]:n[F]}})}async function Ac(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new Q0(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return ue(x,async t=>{let s=`${ha}/containers/${encodeURIComponent(A)}`,n=await t.api({path:s,method:"PUT",body:JSON.stringify(r)});if(n.status>=400)throw ga(n.body,n.status);let F=n.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:F,record:ya(await t.api({path:s,method:"GET"}))}})}async function ec(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${ha}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return ue(x,async s=>ya(await s.api({path:t,method:"GET"})))}async function rc(x,A){return ue(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function tc(x){return ue(x,A=>A.dev("GET","/dev/state"))}async function nc(x,A){return ue(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function sc(x,A){return ue(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}async function ic(x,A,e){let r=A.filter?new RegExp(A.filter):null,t=s=>{let n=s.text??"";(!r||r.test(n))&&e(s)};await ue(x,async s=>{let n=0,F=async()=>{let E=await s.dev("GET",`/dev/logs?since=${n}&limit=500`);for(let u of E.records)n=Math.max(n,u.seq),t(u)};if(await F(),!A.follow)return;let v=Date.now()+(A.durationMs??3e4);for(;Date.now()<v;)await new Promise(E=>setTimeout(E,500)),await F()})}function Ep(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var uA=new z0.Command,cs=(0,ac.default)({pkg:hs}),y0=new WA.Logger,Bp=()=>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":"",De=xt.Utils.joinPath(xt.URI.file(process.cwd()),Bp());uA.version(hs.version).usage("<command>");uA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
|
|
2346
2346
|
The manifest options can be overwritten with the --option=value syntax.
|
|
2347
2347
|
Example: "studio build --dlo.mainFile="./dlo/test.dlo" will overwrite the dlo.mainFile option of the manifest.
|
|
2348
2348
|
|
|
2349
|
-
Use "studio --help" for more information.`);function
|
|
2349
|
+
Use "studio --help" for more information.`);function hx(x,A){let e=Vl(x);return K.setOverwrites(e),A.catch(r=>{y0.error(r instanceof Error?r.message:r),process.exit(1)}).finally(()=>{cs.notify()})}function Cp(x){return process.env.STUDIO_ENV=x||vx.ENV.production,x&&x!==vx.ENV.production&&y0.log(`Using STUDIO_ENV=${x}`),process.env.STUDIO_ENV}function dp(x){return x?.token||null}function Er(x){return(x.silent||x.json)&&(y0.silent=!0),x.debug&&(y0.debugEnabled=!0),{env:Cp(x.env),token:dp(x)}}var Br=new z0.Option("-e, --env <environment>","CLI target environment (defaults to STUDIO_ENV environment variable)").default(process.env.STUDIO_ENV).choices(Object.values(vx.ENV)),Cr=new z0.Option("--token <API-token>","API Access Token (defaults to STUDIO_TOKEN environment variable)").default(process.env.STUDIO_TOKEN),up=new z0.Option("--allowedBackends <null|*|server.xz;server.yz>","specify the allowedBackends deployment for this version.").default(null),Dp=Object.values(u0.TagPhase),oc=new z0.Option("-ph --phase <release phase>","specify a release phase").choices(Dp).default("release"),ka=new z0.Option("-p --part <APM part>","APM part that should be built").choices(Object.values(u0.Part));function Yt(x=!1){return new z0.Option("-s, --serial <serial>","Device serial number (16 characters hex)").makeOptionMandatory(x)}var Qt=new z0.Option("--debug","Enable debug logging").default(!1),wa=new z0.Option("--silent","Suppress intermediate progress output. Only the final result and errors are printed.").default(!1),pp=new z0.Option("--siteName <name>","Override the auto-generated development site name (max 50 characters)."),_a=new z0.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),bp=new z0.Option("--server <url>","myDatanet instance URL (https:// prefix optional)").default(process.env.MYDATANET_HOST),mp=new z0.Option("--customer <customerId>","myDatanet customer UID or ID").default(process.env.MYDATANET_CUSTOMER),jp=new z0.Option("--mdn-token <token>","myDatanet API token").default(process.env.MYDATANET_TOKEN);function At(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 z0.InvalidArgumentError(`${x} must be an integer between ${A} and ${e}, got '${r}'`);return t}}var hp=new z0.Option("--port <port>","Port the local device API server listens on").default(8765).argParser(At("--port",0,65535)),gp=new z0.Option("--host <host>","Address the local device API server binds to").default("127.0.0.1"),yp=new z0.Option("--allow-remote","Allow a non-loopback --host without --bearer (the device API is then unauthenticated)"),kp=new z0.Option("--poll-interval <ms>","Stamp-poll interval in ms (0 disables polling)").default(2e3).argParser(At("--poll-interval",0)),Fc=new z0.Option("--wait <ms>","How long a write waits for the device to confirm, in ms").default(3e3).argParser(At("--wait",0)),wp=new z0.Option("--log-file [path]","Append every device log record to this JSONL file"),vc=new z0.Option("--bearer <token>","Bearer token required by the local device API server (--token is the Studio API token)"),_p=new z0.Option("--replay <file>","Replay a companion-app flight-recorder export (.ndjson or .db) instead of a live device"),Sp=new z0.Option("--session <id>","Recording session id to replay (default: the session with the most records)"),$p=new z0.Option("--speed <n|max>","Replay speed: a multiplier, or `max` for no recorded delays").default(1).argParser(x=>x==="max"?"max":At("--speed",0)(x)),Tp=new z0.Option("--url <url>","Run against a running `studio dev` server instead of opening USB");function Ue(x,A){y0.silent=!1,A?y0.log(JSON.stringify(x)):y0.log(JSON.stringify(x,null,2)),process.exitCode=0}function lc(x){return x instanceof Q0?x.exitCode:1}function dA(x){y0.silent=!1,y0.error(x instanceof Error?x.message:String(x)),cs.notify(),process.exitCode=lc(x)}function pe(x){let{env:A,token:e}=Er(x);return{cwd:De,fs:ve,logger:y0,serial:x.serial,url:x.url,token:x.bearer,debug:x.debug,env:A,apiToken:e,waitMs:x.wait}}function be(x,A,e){return x.command(A).description(e).addOption(Yt()).addOption(Tp).addOption(vc).addOption(Qt).addOption(wa).addOption(_a).addOption(Br).addOption(Cr)}uA.command("install").aliases(["i"]).description("install all the dependencies in your project").arguments("[dependency...]").allowExcessArguments(!0).addOption(Br).addOption(Cr).allowUnknownOption(!0).action((x,A,e)=>{let{env:r,token:t}=Er(A);hx(e,cl(De,ve,y0,r,t,x))});uA.command("build").addOption(ka).allowExcessArguments(!0).addOption(Br).addOption(Cr).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Er(x);hx(A,fl(De,ve,y0,e,r,x.part))});uA.command("publish").addOption(oc).addOption(up).addOption(Br).addOption(Cr).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}=Er(x);hx(A,El(De,ve,y0,e,r,x.allowedBackends,x.phase,x.packagePath))});uA.command("package").alias("pack").description("Package the project").addOption(oc).addOption(Br).addOption(Cr).allowUnknownOption(!0).action(async(x,A)=>{let{env:e,token:r}=Er(x);hx(A,Bl(De,ve,y0,e,r,x.phase))});uA.command("run").description("Build, upload to USB device, and create development site on myDatanet").addOption(Yt(!0)).addOption(bp).addOption(mp).addOption(jp).addOption(ka).addOption(Br).addOption(Cr).addOption(Qt).addOption(wa).addOption(_a).addOption(pp).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Er(x),t=x.mdnToken,s=x.server;t||(y0.error("MYDATANET_TOKEN is required. Set via --mdn-token or MYDATANET_TOKEN environment variable"),cs.notify(),process.exit(4)),s||(y0.error("Server URL is required. Set via --server or MYDATANET_HOST environment variable"),cs.notify(),process.exit(4)),hx(A,Yl(De,ve,y0,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(n=>{y0.silent=!1,n.success?(Xl(y0,n,x.json),process.exit(0)):(y0.error(n.message),process.exit(n.errorCode||1))}))});var Sa=uA.command("usb").description("USB device management commands");Sa.command("list").description("List available USB devices").action((x,A)=>{hx(A,bv(y0))});Sa.command("upload").description("Upload an AMX binary to a USB device").addOption(Yt(!0)).requiredOption("-f, --file <path>","Path to the AMX file (relative to current directory)").addOption(Qt).action((x,A)=>{let e=xt.Utils.joinPath(De,x.file);y0.debugEnabled=x.debug===!0,hx(A,Wr(x.serial,e,ve,y0,x.debug).then(r=>{r.success?process.exit(0):(y0.error(r.message),process.exit(1))}))});Sa.command("sync").description("Sync a USB device with the myDatanet server").addOption(Yt(!0)).addOption(Qt).action((x,A)=>{y0.debugEnabled=x.debug===!0,hx(A,mv(x.serial,y0,x.debug).then(e=>{e.success?process.exit(0):(y0.error(e.message),process.exit(1))}))});uA.command("dev").description("Build, flash and serve the myDatanet-compatible device API on localhost").addOption(Yt()).addOption(hp).addOption(gp).addOption(yp).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(kp).addOption(Fc).addOption(wp).addOption(vc).addOption(_p).addOption(Sp).addOption($p).option("--pov [name]","Also start the project POV dev server against this server").addOption(ka).addOption(Br).addOption(Cr).addOption(Qt).addOption(wa).addOption(_a).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Er(x);return!x.serial&&!x.replay?hx(A,Promise.reject(new Error("One of --serial or --replay is required")).catch(dA)):x.serial&&x.replay?hx(A,Promise.reject(new Error("--serial and --replay are mutually exclusive")).catch(dA)):(x.json&&(y0.output={log:(...t)=>console.error(...t)},y0.silent=x.silent===!0),hx(A,qp(x,e,r).catch(dA)))});function Pp(x,A,e){let r=x.logFile===!0?xt.Utils.joinPath(De,r0.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:y0,replay:x.replay,session:x.session,speed:x.speed}}async function qp(x,A,e){let r=await fa(De,ve,Pp(x,A,e));x.json?Np(r):Ip(r),await new Promise(t=>{let s=!1,n=()=>{s||(s=!0,r.close().catch(F=>y0.error(F instanceof Error?F.message:String(F))).finally(()=>{process.exitCode=0,process.stdin.pause(),t()}))};process.once("SIGINT",n),process.once("SIGTERM",n),x.json||Mp(r,n)})}function Np(x){process.stdout.write(`${JSON.stringify({url:x.url,serial:x.session.serial,apmId:x.apmId,port:x.port})}
|
|
2350
2350
|
`);for(let A of["log","build","sync","state","container-changed"])x.session.on(A,e=>process.stdout.write(`${JSON.stringify({event:A,payload:e})}
|
|
2351
|
-
`))}function
|
|
2351
|
+
`))}function Ip(x){y0.done(`Device API server: ${x.url} (serial ${x.session.serial})`),y0.info("Commands: `at <cmd>`, `sync`, `flash`, `build`, `q` to quit"),x.session.on("log",A=>y0.log(`${ls.default.dim(A.source)} ${A.text}`)),x.session.on("container-changed",A=>y0.log(`${ls.default.cyan(A.container??"uto")} ${JSON.stringify(A.decoded??null)}`)),x.session.on("build",A=>{A.ok===!0?y0.done("Build completed"):A.ok===!1&&y0.error(A.message??"Build failed")})}function Mp(x,A){process.stdin.isTTY&&(process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{Lp(x,String(e).trim(),A).catch(r=>y0.error(r instanceof Error?r.message:String(r)))}))}async function Lp(x,A,e){A==="q"?e():A==="sync"?y0.log(JSON.stringify(await x.session.sync())):A==="flash"?y0.log(JSON.stringify(await x.session.flash())):A==="build"?await x.session.build():A.startsWith("at ")?y0.log(await x.session.at(A.slice(3).trim())):A&&y0.warn(`Unknown command: ${A}`)}var $a="<container>",Ta="Container name or alias",me=uA.command("device").description("One-shot device commands (USB or a running `studio dev`)");be(me,"info","Print DEVINFO/STAMPS/model status").action((x,A)=>hx(A,Zl(pe(x)).then(e=>Ue(e,x.json)).catch(dA)));be(me,"get","Read a container, decoded via the project DDE").argument($a,`${Ta}, optionally \`container.field\``).action((x,A,e)=>hx(e,xc(pe(A),x).then(r=>Ue(r,A.json)).catch(dA)));be(me,"set","Write a container: encode, push and re-read").argument($a,Ta).argument("<values>","JSON object of field values").addOption(Fc).action((x,A,e,r)=>hx(r,Ac(pe(e),x,A).then(t=>Ue(t,e.json)).catch(dA)));be(me,"timeseries","Read a histdata window, decoded via the project DDE").argument($a,`Histdata ${Ta.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)",At("--limit",1),100).action((x,A,e)=>hx(e,ec(pe(A),x,{from:A.from,to:A.to,limit:A.limit}).then(r=>Ue(r,A.json)).catch(dA)));be(me,"logs","Print the device log ring buffer").option("--follow","Keep printing new records",!1).option("--duration <ms>","How long --follow runs",At("--duration",0),3e4).option("--filter <regex>","Only print records whose text matches").action((x,A)=>hx(A,ic(pe(x),{follow:x.follow,durationMs:x.duration,filter:x.filter},e=>Rp(e,x.json)).then(()=>{process.exitCode=0}).catch(dA)));function Rp(x,A){if(y0.silent=!1,A){y0.log(JSON.stringify(x));return}let e=x;y0.log(`${ls.default.dim(e.source)} ${e.text}`)}be(me,"at","Run one AT command").argument("<cmd>",'AT command, e.g. "at+rm2mstate"').action((x,A,e)=>hx(e,rc(pe(A),x).then(r=>Ue(r,A.json)).catch(dA)));be(me,"state","Print the last rm2m state").action((x,A)=>hx(A,tc(pe(x)).then(e=>Ue(e,x.json)).catch(dA)));be(me,"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)=>hx(A,nc(pe(x),x.file).then(e=>Ue(e,x.json)).catch(dA)));be(me,"sync","Pull the device data into the mirror").action((x,A)=>hx(A,sc(pe(x)).then(e=>Ue(e,x.json)).catch(dA)));function cc(x){uA.parse(x)}0&&(module.exports={deviceExitCode,program});
|
|
2352
2352
|
/*! Bundled license information:
|
|
2353
2353
|
|
|
2354
2354
|
@microtronics/device-master/dist/cjs/index.cjs:
|