From 724c9d52e2ac38717f0e2545b3de183034e9cb2b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:28:37 +0200 Subject: [PATCH 1/2] chore: update SQLite Wasm binaries from 6932c59ee5c280599dfae9e7b431698a7cab9687 (6932c59ee5c280599dfae9e7b431698a7cab9687) (#25) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/bin/sqlite3-bundler-friendly.mjs | 764 ++++++--- src/bin/sqlite3-node.mjs | 2171 +++----------------------- src/bin/sqlite3-opfs-async-proxy.js | 2 +- src/bin/sqlite3.mjs | 775 ++++++--- src/bin/sqlite3.wasm | Bin 868907 -> 878802 bytes 5 files changed, 1359 insertions(+), 2353 deletions(-) diff --git a/src/bin/sqlite3-bundler-friendly.mjs b/src/bin/sqlite3-bundler-friendly.mjs index e026859..6327745 100644 --- a/src/bin/sqlite3-bundler-friendly.mjs +++ b/src/bin/sqlite3-bundler-friendly.mjs @@ -27,9 +27,9 @@ /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.0" +** SQLITE_VERSION_NUMBER 3054000 +** SQLITE_SOURCE_ID "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3" ** ** Emscripten SDK: 5.0.5 */ @@ -92,7 +92,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR /** This file was preprocessed using: - ./c-pp -o ./bld/pre-js.bundler.js -Dtarget:es6-module -Dtarget:es6-bundler-friendly -DModule.instantiateWasm api/pre-js.c-pp.js + ./c-pp -o ./bld/pre-js.bundler.js -Dtarget:es6-module -Dtarget:es6-bundler-friendly -Dsqlite3.wasm.base64=./jswasm/sqlite3.wasm -DModule.instantiateWasm api/pre-js.c-pp.js */ /* END FILE: api/pre-js.js. */ // end include: ./bld/pre-js.bundler.js @@ -4008,11 +4008,11 @@ var _sqlite3_status64, _sqlite3_db_status, _sqlite3_vfs_find, _sqlite3_initialize, - _sqlite3_malloc, - _sqlite3_free, _sqlite3_vfs_register, _sqlite3_vfs_unregister, + _sqlite3_malloc, _sqlite3_malloc64, + _sqlite3_free, _sqlite3_realloc, _sqlite3_realloc64, _sqlite3_value_text, @@ -4035,6 +4035,11 @@ var _sqlite3_status64, _sqlite3_column_type, _sqlite3_errmsg, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4272,11 +4277,11 @@ function assignWasmExports(wasmExports) { _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; - _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; - _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; @@ -4299,6 +4304,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4731,9 +4741,9 @@ Module.runSQLite3PostLoadInit = async function( /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.0" +** SQLITE_VERSION_NUMBER 3054000 +** SQLITE_SOURCE_ID "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3" ** ** Emscripten SDK: 5.0.5 */ @@ -5510,7 +5520,11 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5530,7 +5544,8 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -6978,7 +6993,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.53.4", "libVersionNumber": 3053004, "sourceId": "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","downloadVersion": 3530400,"scm":{ "sha3-256": "bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","branch": "branch-3.53","tags": "release version-3.53.4","datetime": "2026-07-24T19:02:57.525Z"}}; + sqlite3.version = {"libVersion": "3.54.0", "libVersionNumber": 3054000, "sourceId": "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3","downloadVersion": 3540000,"scm":{ "sha3-256": "be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3","branch": "trunk","tags": "release major-release version-3.54.0","datetime": "2026-10-09T15:46:58.543Z"}}; }); /** 2022-07-08 @@ -9550,7 +9565,7 @@ globalThis.WhWasmUtilInstaller ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js - by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; globalThis.Jaccwabyt = @@ -9862,8 +9877,8 @@ function StructBinderFactory(config){ and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ const ii = getInstanceHandle(obj, false); - if( !ii ) return; - rmInstanceHandle(obj); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; if( !m && !(m = ii.p) ){ console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); return; @@ -9890,6 +9905,7 @@ function StructBinderFactory(config){ m,'threw. NOT propagating it.',e); } } + rmInstanceHandle(obj); delete obj.ondispose; if(ctor.debugFlags.__flags.dealloc){ log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), @@ -10815,6 +10831,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Please keep these sorted by function name! ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written bindings to permit more flexible inputs. */ ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], @@ -11522,6 +11543,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -11573,6 +11595,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -12726,8 +12749,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __doesNotOwnHandle = new Set(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -13209,7 +13232,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -13225,6 +13249,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); if( !__doesNotOwnHandle.delete(this) ){ capi.sqlite3_close_v2(pDb); } - if(this.onclose && (this.onclose.after instanceof Function)){ + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -13884,8 +13959,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -14309,6 +14387,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -14325,6 +14408,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -14542,14 +14651,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -14561,7 +14672,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -14576,69 +14707,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rc cache.storagePool[store.jzClass] = @@ -16641,6 +16745,35 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const pFileHandles = new Map(); + /** + Map of filename to lock objects with this structure: + + {.lockType: int, .nShared: int} + + Used by xLock(), xUnlock(), and xCheckReservedLock(). Modelled + after the "same-process, same-file, different-db-handle" locking + in os_unix.c. + */ + const mapPathToLocks = new Map(); + + /** + Main xUnlock() impl for kvvfs, also used by xClose(). Expects an + xOpen()-created file handle object and the second argument to + xUnlock(). It returns void. + */ + const unlockFile = function(fh, lockType){ + if(fh.lockType<=lockType) return; + const lk = mapPathToLocks.get(fh.jzClass); + if(fh.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + mapPathToLocks.delete(fh.jzClass); + } + fh.lockType = lockType; + }; + /** Original WASM functions for methods we partially override. */ @@ -16725,29 +16858,25 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ else if(1===nBuf){ wasm.poke(zBuf, 0); return nV; - } - if( nBuf+1 nV + 1 ){ + nBuf = nV + 1; } if( 0 ){ debug("xRcrdRead", nBuf, zClass, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey), nV, jV, store); } - const zV = cache.memBuffer(0); - //if( !zV ) return -3 /*OOM*/; + const nCopy = nV0, }/*.vfs*/, @@ -16965,6 +17108,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ kvvfs?.log?.xClose && debug("xClose", pFile, h); if( h ){ pFileHandles.delete(pFile); + unlockFile(h, capi.SQLITE_LOCK_NONE); const s = h.store;//storageForZClass(h.jzClass); s.files = s.files.filter((v)=>v!==h.file); if( --s.refc<=0 && s.deleteAtRefc0 ){ @@ -17043,6 +17187,82 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } }, + xLock: function(pFile, iLock){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + if( capi.SQLITE_LOCK_NONE!==iLock ){ + /* Tells the impl to re-read its size. */ + originalMethods.ioDb.xLock(pFile, iLock); + } + /** + This impl is based off of the one in the opfs-sahpool VFS + impl which, in turn, is based off of the impl in + os_unix.c. + */ + if(h.lockType>=iLock) return 0; + let lk = mapPathToLocks.get(h.jzClass); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + mapPathToLocks.set(h.jzClass, lk); + } + if(h.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || iLock>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(iLock===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = iLock; + }else if(iLock===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(h.lockType===capi.SQLITE_LOCK_RESERVED){ + h.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = iLock; + } + h.lockType = iLock; + return 0; + }catch(e){ + error("xLock", e); + return cache.setError(e); + } + }, + + xUnlock: function(pFile, iLock){ + cache.popError(); + try{ + if( capi.SQLITE_LOCK_NONE===iLock ){ + /* Tells the impl to re-read its size on the next op. */ + originalMethods.ioDb.xUnlock(pFile, iLock); + } + const h = pFileHandles.get(pFile); + unlockFile(h, iLock); + return 0; + }catch(e){ + error("xUnlock", e); + return cache.setError(e); + } + }, + + xCheckReservedLock: function(pFile, pOut){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + const lk = mapPathToLocks.get(h.jzClass); + wasm.poke32(pOut, + (!!lk && lk.lockType>capi.SQLITE_LOCK_SHARED) + ? 1 : 0) + return 0; + }catch(e){ + error("xCheckReservedLock", e); + return cache.setError(e); + } + }, + }/*.ioDb*/, @@ -17051,6 +17271,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ are copied as-is from the ioDb objects. Others are specific to journal files. */ xClose: true, + xLock: true, + xUnlock: true, + xCheckReservedLock: true, }/*.ioJrnl*/ }/*methodOverrides*/; @@ -18280,11 +18503,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way, the resolved value of the returned Promise is the number of bytes written to the target file. - It very specifically requires the input to be an SQLite3 - database and throws if that's not the case. It does so in - order to prevent this function from taking on a larger scope - than it is specifically intended to. i.e. we do not want it to - become a convenience for importing arbitrary files into OPFS. + It very specifically requires the input to be an SQLite3 database + and throws if that's not the case. It does so in order to + prevent this function from taking on a larger scope than it is + specifically intended to. i.e. we do not want it to become a + convenience for importing arbitrary files into OPFS. Caveat: as + of 3.54 in SEE builds, the "is this a db?" check is necessarily + lax to account for SEE-encrypted databases not having a legible + header. In such builds, only the db size is relevant for the + check. This routine rewrites the database header bytes in the output file (not the input array) to force disabling of WAL mode. @@ -18766,6 +18993,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ so would need to pass it to the async proxy. That would make it inordinately expensive considering that it's just a hint. + + See: forum:a2f573b00cda1372 */ wasm.poke(pOut, 0, 'i32'); return 0; @@ -19171,7 +19400,6 @@ const initS11n = function(){ const options = opfsUtil.options; const W = opfsVfs.worker = (()=>{ - /* _Sigh_... */ /* Discussion explaining this formulation: https://github.com/sqlite/sqlite-wasm/pull/159 */ const url = new URL('sqlite3-opfs-async-proxy.js', import.meta.url); @@ -19210,7 +19438,7 @@ const initS11n = function(){ //| capi.SQLITE_OPEN_DELETEONCLOSE | capi.SQLITE_OPEN_MAIN_DB; const pOut = wasm.scopedAlloc(8); - const dbFile = "/sanity/check/file"+randomFilename(8); + const dbFile = "/sanity/check/file"+opfsUtil.randomFilename(8); const zDbFile = wasm.scopedAllocCString(dbFile); let rc; state.s11n.serialize("This is รค string."); @@ -19299,7 +19527,7 @@ const initS11n = function(){ state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); opfsVfs.initS11n(); - delete opfsVfs.initS11n; + opfsVfs.initS11n = null; if(options.sanityChecks){ warn("Running sanity checks because of opfs-sanity-check URL arg..."); sanityCheck(); @@ -19565,6 +19793,9 @@ globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ - Also because of that, it does not require the SharedArrayBuffer, so can function without the COOP/COEP HTTP response headers. + - Also because of that, this one is much faster and the performance + gap increases as the job sizes increase. + - It can hypothetically support Safari 16.4+, whereas the "opfs" VFS requires v17 due to a subworker/storage bug in 16.x which makes it incompatible with that VFS. @@ -19669,7 +19900,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Logging verbosity 3+ == everything, 2 == warnings+errors, 1 == errors only. */ verbosity: 2, - forceReinitIfPreviouslyFailed: false + forceReinitIfPreviouslyFailed: false, + preserveOnInitFailure: false }); /** Logging routines, from most to least serious. */ @@ -19706,7 +19938,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xCheckReservedLock'); pool.storeErr(); - wasm.poke32(pOut, 1); + const file = pool.getOFileForS3File(pFile); + wasm.poke32( + pOut, + pool.hasReservedLock(file.path) ? 1 : 0 + /* As forum:b2fbb61642 elaborates on why we cannot simply + check file.lockType>=capi.SQLITE_LOCK_RESERVED + here. Summary: xOpen() has long allowed multiple handles to + the same filename and we need to check if any of them have + a lock to avoid a specific corruption case which that forum + thread demonstrates. */ + ); return 0; }, xClose: function(pFile){ @@ -19716,6 +19958,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(file) { try{ pool.log(`xClose ${file.path}`); + pool.unlockFile(file, capi.SQLITE_LOCK_NONE); pool.mapS3FileToOFile(pFile, false); file.sah.flush(); if(file.flags & capi.SQLITE_OPEN_DELETEONCLOSE){ @@ -19747,8 +19990,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xLock ${lockType}`); pool.storeErr(); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; - return 0; + return pool.lockFile(file, lockType); }, xRead: function(pFile,pDest,n,offset64){ const pool = getPoolForPFile(pFile); @@ -19802,7 +20044,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xUnlock'); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; + pool.unlockFile(file, lockType); return 0; }, xWrite: function(pFile,pSrc,n,offset64){ @@ -19903,6 +20145,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ? pool.getPath(zName) : getRandomName(); let sah = pool.getSAHForPath(path); + if(sah && (flags & capi.SQLITE_OPEN_CREATE) + && (flags & capi.SQLITE_OPEN_EXCLUSIVE)){ + toss('file already exists:', path); + } if(!sah && (flags & capi.SQLITE_OPEN_CREATE)) { // File not found so try to create it. if(pool.getFileCount() < pool.getCapacity()) { @@ -19969,7 +20215,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Inherit certain VFS members from the default VFS, if available. */ opfsVfs.$xRandomness = dVfs.$xRandomness; - opfsVfs.$xSleep = dVfs.$xSleep; dVfs.dispose(); } if(!opfsVfs.$xRandomness && !vfsMethods.xRandomness){ @@ -19982,9 +20227,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return i; }; } - if(!opfsVfs.$xSleep && !vfsMethods.xSleep){ - vfsMethods.xSleep = (pVfs,ms)=>0; - } + /** + This VFS's xSleep() must be a no-op. In this environment, + only db handles within the same thread can ever come into + contention, and that contention cannot be resolved if + one of the handles sleeps in that same thread. + See also: forum:3f0794c5d8 + */ + vfsMethods.xSleep = (pVfs,ms)=>0; sqlite3.vfs.installVfs({ vfs: {struct: opfsVfs, methods: vfsMethods} }); @@ -19992,8 +20242,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; /** - Class for managing OPFS-related state for the - OPFS SharedAccessHandle Pool sqlite3_vfs. + Class for managing OPFS-related state for the OPFS + SharedAccessHandle Pool sqlite3_vfs. This class is + internal-use-only, never exposed to the client. OpfsSAHPoolUtil + is the public-facing part. */ class OpfsSAHPool { /* OPFS dir in which VFS metadata is stored. */ @@ -20015,7 +20267,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Set of currently-unused SAHs. */ #availableSAH = new Set(); /* Maps (sqlite3_file*) to xOpen's file objects. */ - #mapS3FileToOFile_ = new Map(); + #mapS3FileToOFile = new Map(); + /* Maps client-side file names to the lock state of the files + opened via this pool: {nShared, lockType}, modelled after + os_unix.c:unixInodeInfo. */ + #mapPathToLock = new Map(); /* Maps SAH to an abstract File Object which contains various metadata about that handle. */ @@ -20031,6 +20287,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Logging verbosity. See optionDefaults.verbosity. #verbosity; + /** + Options are documented in installOpfsSAHPoolVfs(). + */ constructor(options = Object.create(null)){ this.#verbosity = options.verbosity ?? optionDefaults.verbosity; this.vfsName = options.name || optionDefaults.name; @@ -20057,6 +20316,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ warn(...args){this.#logImpl(1, ...args)}; error(...args){this.#logImpl(0, ...args)}; + /* Design note: at the time this method was added, the developer + was unaware that getter syntax was an option: get vfs(){...} */ getVfs(){return this.#cVfs} /* Current pool capacity. */ @@ -20091,22 +20352,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } /** - Reduce capacity by n, but can only reduce up to the limit - of currently-available SAHs. Returns a Promise which resolves - to the number of slots really removed. + Reduce capacity by n, but can only reduce up to the limit of + currently-available SAHs. Returns a Promise which resolves to + the number of slots really removed. Throws if removal of an + OPFS filesystem entry fails for any reason, in which case the + VFS itself is left in a well-defined state, possibly partially + reduced in capacity compared to before this call, but the file + which was unable to be removed is in an undefined state. It may + be orphaned and/or later recycled. + + As of 3.54, throws if n is an invalid value. Prior to that + an invalid value could cause it to remove all entries. */ async reduceCapacity(n){ + if(!Number.isSafeInteger(n) || n < 0){ + toss('Invalid capacity reduction:', n); + } let nRm = 0; for(const ah of Array.from(this.#availableSAH)){ if(nRm === n || this.getFileCount() === this.getCapacity()){ break; } const name = this.#mapSAHToName.get(ah); - //this.#unmapFileObject(ah); ah.close(); - await this.#dhOpaque.removeEntry(name); this.#mapSAHToName.delete(ah); this.#availableSAH.delete(ah); + await this.#dhOpaque.removeEntry(name); ++nRm; } return nRm; @@ -20122,6 +20393,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ this.#mapSAHToName.clear(); this.#mapFilenameToSAH.clear(); this.#availableSAH.clear(); + this.#mapS3FileToOFile.clear(); + this.#mapPathToLock.clear(); } /** @@ -20131,8 +20404,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ throws, this.$error will contain the corresponding Error object. - If it throws, it releases any SAHs which it may have - acquired before the exception was thrown, leaving the VFS in a + If it throws, it waits for every pending acquisition to settle, + then releases all SAHs it acquired, leaving the VFS in a well-defined but unusable state. If clearFiles is true, the client-stored state of each file is @@ -20146,27 +20419,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ files.push([name,h]); } } - return Promise.all(files.map(async([name,h])=>{ - try{ - const ah = await h.createSyncAccessHandle() - this.#mapSAHToName.set(ah, name); - if(clearFiles){ - ah.truncate(HEADER_OFFSET_DATA); - this.setAssociatedPath(ah, '', 0); + const results = await Promise.allSettled(files.map(async([name,h])=>{ + const ah = await h.createSyncAccessHandle() + this.#mapSAHToName.set(ah, name); + if(clearFiles){ + ah.truncate(HEADER_OFFSET_DATA); + this.setAssociatedPath(ah, '', 0); + }else{ + const path = this.getAssociatedPath(ah); + if(path){ + this.#mapFilenameToSAH.set(path, ah); }else{ - const path = this.getAssociatedPath(ah); - if(path){ - this.#mapFilenameToSAH.set(path, ah); - }else{ - this.#availableSAH.add(ah); - } + this.#availableSAH.add(ah); } - }catch(e){ - this.storeErr(e); - this.releaseAccessHandles(); - throw e; } })); + const failure = results.find((r)=>'rejected'===r.status) + /* If any failures are found then clean up and re-throw the + first one. We "could" record them all but we can only throw + one of them (or an exception wrapping all of them, which + seems unnecessary). */; + if( failure ){ + this.storeErr(failure.reason); + this.releaseAccessHandles(); + throw failure.reason; + } } /** @@ -20373,7 +20650,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ xOpen file object. */ getOFileForS3File(pFile){ - return this.#mapS3FileToOFile_.get(pFile); + return this.#mapS3FileToOFile.get(pFile); } /** Maps or unmaps (if file is falsy) the given (sqlite3_file*) @@ -20381,10 +20658,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ mapS3FileToOFile(pFile,file){ if(file){ - this.#mapS3FileToOFile_.set(pFile, file); + this.#mapS3FileToOFile.set(pFile, file); setPoolForPFile(pFile, this); }else{ - this.#mapS3FileToOFile_.delete(pFile); + this.#mapS3FileToOFile.delete(pFile); setPoolForPFile(pFile, false); } } @@ -20442,7 +20719,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return true; } - /** "Pauses" this VFS by unregistering it from SQLite and relinquishing all open SAHs, leaving the associated files @@ -20464,7 +20740,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ @see unpauseVfs() */ pauseVfs(){ - if(this.#mapS3FileToOFile_.size>0){ + if(this.#mapS3FileToOFile.size>0){ sqlite3.SQLite3Error.toss( capi.SQLITE_MISUSE, "Cannot pause VFS", this.vfsName,"because it has opened files." @@ -20535,7 +20811,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ util.affirmDbHeader(chunk); checkedHeader = true; } - sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + const n = sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + if( n!==chunk.byteLength ){ + toss("Expected to write "+chunk.byteLength+ + "bytes but wrote"+n+"."); + } nWrote += chunk.byteLength; } if( nWrote < 512 || 0!==nWrote % 512 ){ @@ -20543,7 +20823,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if( !checkedHeader ){ const header = new Uint8Array(20); - sah.read( header, {at: 0} ); + sah.read( header, {at: HEADER_OFFSET_DATA} ); util.affirmDbHeader( header ); } sah.write(new Uint8Array([1,1]), { @@ -20561,24 +20841,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ importDb(name, bytes){ if( bytes instanceof ArrayBuffer ) bytes = new Uint8Array(bytes); else if( bytes instanceof Function ) return this.importDbChunked(name, bytes); + util.affirmIsDb(bytes); const sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss("No available handles to import to."); const n = bytes.byteLength; - if(n<512 || n%512!=0){ - toss("Byte array size is invalid for an SQLite db."); - } - const header = "SQLite format 3"; - for(let i = 0; i < header.length; ++i){ - if( header.charCodeAt(i) !== bytes[i] ){ - toss("Input does not contain an SQLite database header."); - } - } const nWrote = sah.write(bytes, {at: HEADER_OFFSET_DATA}); if(nWrote != n){ this.setAssociatedPath(sah, '', 0); toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); }else{ + sah.truncate(HEADER_OFFSET_DATA + n + /* Ensure no trailing junk when overwriting an + existing file with a shorter one. */); sah.write(new Uint8Array([1,1]), {at: HEADER_OFFSET_DATA+18} /* force db out of WAL mode */); this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); @@ -20586,8 +20861,72 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return nWrote; } - }/*class OpfsSAHPool*/; + /** + Returns true if any (sqlite3_file*) currently opened by this + pool using the given client-provided file name (as distinct from + its opaque name) holds a RESERVED or greater lock, else false. + */ + hasReservedLock(filename){ + const lk = this.#mapPathToLock.get(filename); + return !!lk && lk.lockType>capi.SQLITE_LOCK_SHARED; + } + /** + Implements xLock() for the given xOpen-generated file object. + This pool holds its SAHs exclusively, so its xOpen() represent + the only connections to a given file. The locks are held + separately from their file object in the same thread the same + way in which os_unix.c:unixLock() distinguishes multiple + connections of a single process which share an inode: a lock + which conflicts with another connection's lock fails with + SQLITE_BUSY, and a failed attempt to get from RESERVED to + EXCLUSIVE leaves a PENDING lock, which admits no new SHARED + locks. + */ + lockFile(file, lockType){ + if(file.lockType>=lockType) return 0; + let lk = this.#mapPathToLock.get(file.path); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + this.#mapPathToLock.set(file.path, lk); + } + if(file.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || lockType>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(lockType===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = lockType; + }else if(lockType===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(file.lockType===capi.SQLITE_LOCK_RESERVED){ + file.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = lockType; + } + file.lockType = lockType; + return 0; + } + + /** Implements xUnlock() for the given xOpen file object. */ + unlockFile(file, lockType){ + if(file.lockType<=lockType) return; + const lk = this.#mapPathToLock.get(file.path); + if(file.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + this.#mapPathToLock.delete(file.path); + } + file.lockType = lockType; + } + + }/*class OpfsSAHPool*/; /** A OpfsSAHPoolUtil instance is exposed to clients in order to @@ -20741,9 +21080,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ option is truthy _and_ the previous attempt to initialize this VFS with the same `name` failed, the VFS will attempt to initialize a second time instead of returning the cached - failure. See discussion at: + failure. See discussion at + - `preserveOnInitFailure`: (default=`false`) If truthy, + initialization failure unregisters and disposes of the VFS and + releases acquired handles without also deleting its storage. This + does not undo changes already made during initialization, + including `clearOnInit`. Otherwise, initialization failure + invokes this.removeVfs(), which attempts to delete the + pool. Retrying a cached initialization failure requires + `forceReinitIfPreviouslyFailed`. See discussion at + . + Peculiarities of this VFS vis a vis other SQLite VFSes: @@ -20780,16 +21129,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - byteArray exportFile(name) - Synchronously reads the contents of the given file into a Uint8Array - and returns it. This will throw if the given name is not currently - in active use or on I/O error. Note that the given name is _not_ - visible directly in OPFS (or, if it is, it's not from this VFS). + Synchronously reads the contents of the given file into a + Uint8Array and returns it. This will throw if the given name is + not currently in active use or on I/O error. Because of how this + VFS maps names to storage, the given name is _not_ visible + directly in OPFS (or, if it is, it's not from this VFS). - number getCapacity() - Returns the number of files currently contained - in the SAH pool. The default capacity is only large enough for one - or two databases and their associated temp files. + Returns the number of files currently contained in the SAH + pool. The default capacity is only large enough for one or two + databases and their associated temp files. - number getFileCount() @@ -20806,11 +21156,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Imports the contents of an SQLite database, provided as a byte array or ArrayBuffer, under the given name, overwriting any existing content. Throws if the pool has no available file slots, - on I/O error, or if the input does not appear to be a - database. In the latter case, only a cursory examination is made. + on I/O error, or if the input does not appear to be a database. + In the latter case, only a cursory examination is made to + determine whether the input is a db (and only in non-SEE builds, + as we cannot distinguish encrypted DBs from garbage input). + Results are undefined if the given db name refers to an opened - db. Note that this routine is _only_ for importing database - files, not arbitrary files, the reason being that this VFS will + db. This routine is _only_ for importing database files, not + arbitrary files, the reason being that this VFS will automatically clean up any non-database files so importing them is pointless. @@ -20825,7 +21178,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way is the size of the resulting database. On success this routine rewrites the database header bytes in the - output file (not the input array) to force disabling of WAL mode. + output file (not the input array) to force disabling of WAL mode, + (A) for historical reasons and (B) getting WAL to work in this + build requires doing a (pragma locking_mode=exclusive) on the db + before using it. On a write error, the handle is removed from the pool and made available for re-use. @@ -20941,6 +21297,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return (initPromises[vfsName] = Promise.reject(new Error("Missing required OPFS APIs."))); } + /** + An interal detail of OpfsSAHPool, called only by initPromises(). + + Unregisters and disposes of OpfsSAHPool thePool, releasing all + of its SAHs without deleting its files. Used when + initialization fails and the preserveOnInitFailure option is + set. This is a no-op if thePool.getVfs().pointer is falsy. Returns the + undefined value. + */ + const unregisterVfs = (thePool)=>{ + const cVfs = thePool.getVfs(); + if( cVfs?.pointer ){ + capi.sqlite3_vfs_unregister(cVfs.pointer); + cVfs.dispose(); + thePool.releaseAccessHandles(); + } + }; + /** Maintenance reminder: the order of ASYNC ops in this function is significant. We need to have them all chained at the very @@ -20978,7 +21352,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ thePool.log("VFS initialized."); return poolUtil; }).catch(async (e)=>{ - await thePool.removeVfs().catch(()=>{}); + if( options.preserveOnInitFailure ){ + unregisterVfs(thePool); + }else{ + await thePool.removeVfs().catch(()=>{}); + } throw e; }); }).catch((err)=>{ diff --git a/src/bin/sqlite3-node.mjs b/src/bin/sqlite3-node.mjs index fe47aaa..cfda697 100644 --- a/src/bin/sqlite3-node.mjs +++ b/src/bin/sqlite3-node.mjs @@ -27,9 +27,9 @@ /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.0" +** SQLITE_VERSION_NUMBER 3054000 +** SQLITE_SOURCE_ID "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3" ** ** Emscripten SDK: 5.0.5 */ @@ -98,7 +98,7 @@ if (ENVIRONMENT_IS_NODE) { /** This file was preprocessed using: - ./c-pp -o ./bld/pre-js.node.js -Dtarget:node -Dtarget:es6-module -Dtarget:es6-bundler-friendly -Dunsupported-build -DModule.instantiateWasm api/pre-js.c-pp.js + ./c-pp -o ./bld/pre-js.node.js -Dtarget:node -Dtarget:es6-module -Dtarget:es6-bundler-friendly -Dunsupported-build -Dsqlite3.wasm.base64=./jswasm/sqlite3.wasm -DModule.instantiateWasm api/pre-js.c-pp.js */ /** UNSUPPORTED BUILD: @@ -4067,11 +4067,11 @@ var _sqlite3_status64, _sqlite3_db_status, _sqlite3_vfs_find, _sqlite3_initialize, - _sqlite3_malloc, - _sqlite3_free, _sqlite3_vfs_register, _sqlite3_vfs_unregister, + _sqlite3_malloc, _sqlite3_malloc64, + _sqlite3_free, _sqlite3_realloc, _sqlite3_realloc64, _sqlite3_value_text, @@ -4094,6 +4094,11 @@ var _sqlite3_status64, _sqlite3_column_type, _sqlite3_errmsg, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4331,11 +4336,11 @@ function assignWasmExports(wasmExports) { _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; - _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; - _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; @@ -4358,6 +4363,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4790,9 +4800,9 @@ Module.runSQLite3PostLoadInit = async function( /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.0" +** SQLITE_VERSION_NUMBER 3054000 +** SQLITE_SOURCE_ID "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3" ** ** Emscripten SDK: 5.0.5 */ @@ -5569,7 +5579,11 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5589,7 +5603,8 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -7037,7 +7052,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.53.4", "libVersionNumber": 3053004, "sourceId": "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","downloadVersion": 3530400,"scm":{ "sha3-256": "bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","branch": "branch-3.53","tags": "release version-3.53.4","datetime": "2026-07-24T19:02:57.525Z"}}; + sqlite3.version = {"libVersion": "3.54.0", "libVersionNumber": 3054000, "sourceId": "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3","downloadVersion": 3540000,"scm":{ "sha3-256": "be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3","branch": "trunk","tags": "release major-release version-3.54.0","datetime": "2026-10-09T15:46:58.543Z"}}; }); /** 2022-07-08 @@ -9609,7 +9624,7 @@ globalThis.WhWasmUtilInstaller ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js - by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; globalThis.Jaccwabyt = @@ -9921,8 +9936,8 @@ function StructBinderFactory(config){ and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ const ii = getInstanceHandle(obj, false); - if( !ii ) return; - rmInstanceHandle(obj); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; if( !m && !(m = ii.p) ){ console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); return; @@ -9949,6 +9964,7 @@ function StructBinderFactory(config){ m,'threw. NOT propagating it.',e); } } + rmInstanceHandle(obj); delete obj.ondispose; if(ctor.debugFlags.__flags.dealloc){ log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), @@ -10874,6 +10890,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Please keep these sorted by function name! ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written bindings to permit more flexible inputs. */ ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], @@ -11581,6 +11602,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -11632,6 +11654,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -12785,8 +12808,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __doesNotOwnHandle = new Set(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -13268,7 +13291,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -13284,6 +13308,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); if( !__doesNotOwnHandle.delete(this) ){ capi.sqlite3_close_v2(pDb); } - if(this.onclose && (this.onclose.after instanceof Function)){ + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -13943,8 +14018,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -14368,6 +14446,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -14384,6 +14467,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -14601,14 +14710,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -14620,7 +14731,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -14635,69 +14766,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rcObject.prototype.hasOwnProperty.call(o,k); - - const kvvfsMethods = new sqlite3_kvvfs_methods( - /* Wraps the static sqlite3_api_methods singleton */ - wasm.exports.sqlite3__wasm_kvvfs_methods() - ); - util.assert( 32<=kvvfsMethods.$nKeySize, "unexpected kvvfsMethods.$nKeySize: "+kvvfsMethods.$nKeySize); - - /** - Most of the VFS-internal state. - */ - const cache = Object.assign(Object.create(null),{ - /** Regex matching journal file names. */ - rxJournalSuffix: /-journal$/, - /** Frequently-used C-string. */ - zKeyJrnl: wasm.allocCString("jrnl"), - /** Frequently-used C-string. */ - zKeySz: wasm.allocCString("sz"), - /** - The maximum size of a kvvfs record key. It is historically only - 32, a limitation currently retained only because it's convenient to - do so (the underlying code has outgrown the need for the artifically - low limit). - - We cache this value here because the end of this init code will - dispose of kvvfsMethods, invalidating it. - */ - keySize: kvvfsMethods.$nKeySize, - /** - WASM heap memory buffers to optimize out some frequent - allocations. - */ - buffer: Object.assign(Object.create(null),{ - /** - The size of each buffer in this.pool. - - kvvfsMethods.$nBufferSize is slightly larger than the output - space needed for a kvvfs-encoded 64kb db page in a worse-cast - encoding (128kb). It is not suitable for arbitrary buffer - use, only page de/encoding. - */ - n: kvvfsMethods.$nBufferSize, - /** - Map of buffer ids to wasm.alloc()'d pointers of size - this.n. (Re)used by various internals. - - Buffer ids 0 and 1 are used in the API internals. Other - names are used in higher-level APIs. - - See memBuffer() and memBufferFree(). - */ - pool: Object.create(null) - }) - }); - - /** - Returns a (cached) wasm.alloc()'d buffer of cache.buffer.n size, - throwing on OOM. - - We leak this one-time alloc because we've no better option. - sqlite3_vfs does not have a finalizer, so we've no place to hook - in the cleanup. We "could" extend sqlite3_shutdown() to have a - cleanup list for stuff like this but that function is never - used in JS, so it's hardly worth it. - */ - cache.memBuffer = (id=0)=>cache.buffer.pool[id] ??= wasm.alloc(cache.buffer.n); - - /** Frees the buffer with the given id. */ - cache.memBufferFree = (id)=>{ - const b = cache.buffer.pool[id]; - if( b ){ - wasm.dealloc(b); - delete cache.buffer.pool[id]; - } - }; - - const noop = ()=>{}; - const debug = sqlite3.__isUnderTest - ? (...args)=>sqlite3.config.debug?.("kvvfs:", ...args) - : noop; - const warn = (...args)=>sqlite3.config.warn?.("kvvfs:", ...args); - const error = (...args)=>sqlite3.config.error?.("kvvfs:", ...args); - - /** - Implementation of JS's Storage interface for use as backing store - of the kvvfs. Storage is a native class and its constructor - cannot be legally called from JS, making it impossible to - directly subclass Storage. This class implements (only) the - Storage interface, to make it a drop-in replacement for - localStorage/sessionStorage. (Any behavioral discrepancies are to - be considered bugs.) - - This impl simply proxies a plain, prototype-less Object, suitable - for JSON-ing. - - Design note: Storage has a bit of an odd iteration-related - interface as does not (AFAIK) specify specific behavior regarding - modification during traversal. Because of that, this class does - some seemingly unnecessary things with its #keys member, deleting - and recreating it whenever a property index might be invalidated. - */ - class KVVfsStorage { - #map = Object.create(null); - #keys = null; - #size = 0; - - constructor(){ - this.clear(); - } - - #getKeys(){ - return this.#keys ??= Object.keys(this.#map); - } - - key(n){ - if(n < 0 || n >= this.#size) return null; - return this.#getKeys()[n]; - } - - getItem(k){ - return this.#map[k] ?? null; - } - - setItem(k,v){ - if( !(k in this.#map) ){ - ++this.#size; - this.#keys = null; - } - this.#map[k] = ''+v; - } - - removeItem(k){ - if( k in this.#map ){ - delete this.#map[k]; - --this.#size; - this.#keys = null; - } - } - - clear(){ - this.#map = Object.create(null); - this.#keys = null; - this.#size = 0; - } - - get length() { - return this.#size; - } - }/*KVVfsStorage*/; - - /** True if v is the name of one of the special persistant Storage - objects. */ - const kvvfsIsPersistentName = (v)=>'local'===v || 'session'===v; - - /** - Keys in kvvfs have a prefix of "kvvfs-NAME-", where NAME is the - db name. This key is redundant in JS but it's how kvvfs works (it - saves each key to a separate file, so needs a distinct namespace - per data source name). We retain this prefix in 'local' and - 'session' storage for backwards compatibility and so that they - can co-exist with client data in their storage, but we elide them - from "v2" storage, where they're superfluous. - */ - const kvvfsKeyPrefix = (v)=>kvvfsIsPersistentName(v) ? 'kvvfs-'+v+'-' : ''; - - /** - Throws if storage name n (JS string) is not valid for use as a - storage name. Much of this goes back to kvvfs having a fixed - buffer size for its keys, and the storage name needing to be - encoded in the keys for local/session storage. - - The second argument must only be true when called from xOpen() - - it makes names with a "-journal" suffix legal. - */ - const validateStorageName = function(n,mayBeJournal=false){ - if( kvvfsIsPersistentName(n) ) return; - const len = (new Blob([n])).size/*byte length*/; - if( !len ) toss3(capi.SQLITE_MISUSE, "Empty name is not permitted."); - let maxLen = cache.keySize - 1; - if( cache.rxJournalSuffix.test(n) ){ - if( !mayBeJournal ){ - toss3(capi.SQLITE_MISUSE, - "Storage names may not have a '-journal' suffix."); - } - }else if( ['-wal','-shm'].filter(v=>n.endsWith(v)).length ){ - toss3(capi.SQLITE_MISUSE, - "Storage names may not have a -wal or -shm suffix."); - }else{ - maxLen -= 8 /* so we have space for a matching "-journal" suffix */; - } - if( len > maxLen ){ - toss3(capi.SQLITE_RANGE, "Storage name is too long. Limit =", maxLen); - } - let i; - for( i = 0; i < len; ++i ){ - const ch = n.codePointAt(i); - if( ch<32 ){ - toss3(capi.SQLITE_RANGE, - "Illegal character ("+ch+"d) in storage name:",n); - } - } - }; - - /** - Create a new instance of the objects which go into - cache.storagePool, with a refcount of 1. If passed a Storage-like - object as its second argument, it is used for the storage, - otherwise it creates a new KVVfsStorage object. - */ - const newStorageObj = (name,storage=undefined)=>Object.assign(Object.create(null),{ - /** - JS string value of this KVVfsFile::$zClass. i.e. the storage's - name. - */ - jzClass: name, - /** - Refcount. This keeps dbs and journals pointing to the same - storage for the life of both and enables kvvfs to behave more - like a conventional filesystem (a stepping stone towards - downstream API goals). Managed by xOpen() and xClose(). - */ - refc: 1, - /** - If true, this storage will be removed by xClose() or - sqlite3_js_kvvfs_unlink() when refc reaches 0. The others will - persist when refc==0, to give the illusion of real back-end - storage. Managed by xOpen() and sqlite3_js_kvvfs_reserve(). By - default this is false but the delete-on-close=1 flag can be - used to set this to true. - */ - deleteAtRefc0: false, - /** - The backing store. Must implement the Storage interface. - */ - storage: storage || new KVVfsStorage, - /** - The storage prefix used for kvvfs keys. It is - "kvvfs-STORAGENAME-" for local/session storage and an empty - string for other storage. local/session storage must use the - long form (A) for backwards compatibility and (B) so that kvvfs - can coexist with non-db client data in those backends. Neither - (A) nor (B) are concerns for KVVfsStorage objects. - - This prefix mirrors the one generated by os_kv.c's - kvrecordMakeKey() and must stay in sync with that one. - */ - keyPrefix: kvvfsKeyPrefix(name), - /** - KVVfsFile instances currently using this storage. Managed by - xOpen() and xClose(). - */ - files: [], - /** - If set, it's an array of objects with various event - callbacks. See sqlite3_js_kvvfs_listen(). When there are no - listeners, this member is set to undefined (instead of an empty - array) to allow us to more easily optimize out calls to - notifyListeners() for the common case of no listeners. - */ - listeners: undefined - }); - - /** - Public interface for kvvfs v2. The capi.sqlite3_js_kvvfs_...() - routines remain in place for v1. Some members of this class proxy - to those functions but use different default argument values in - some cases. - */ - const kvvfs = sqlite3.kvvfs = Object.create(null); - if( sqlite3.__isUnderTest ){ - /* For inspection via the dev tools console. */ - kvvfs.log = Object.assign(Object.create(null),{ - xOpen: false, - xClose: false, - xWrite: false, - xRead: false, - xSync: false, - xAccess: false, - xFileControl: false, - xRcrdRead: false, - xRcrdWrite: false, - xRcrdDelete: false, - }); - } - - /** - Deletes the cache.storagePool entries for store (a - cache.storagePool entry) and its db/journal counterpart. - */ - const deleteStorage = function(store){ - const other = cache.rxJournalSuffix.test(store.jzClass) - ? store.jzClass.replace(cache.rxJournalSuffix,'') - : store.jzClass+'-journal'; - kvvfs?.log?.xClose - && debug("cleaning up storage handles [", store.jzClass, other,"]",store); - delete cache.storagePool[store.jzClass]; - delete cache.storagePool[other]; - if( !sqlite3.__isUnderTest ){ - /* In test runs, leave these for inspection. If we delete them here, - any prior dumps of them emitted via the console get cleared out - because the console shows live objects instead of call-time - static dumps. */ - delete store.storage; - delete store.refc; - } - }; - - /** - Add both store.jzClass and store.jzClass+"-journal" - to cache,storagePool. - */ - const installStorageAndJournal = (store)=> - cache.storagePool[store.jzClass] = - cache.storagePool[store.jzClass+'-journal'] = store; - - /** - The public name of the current thread's transient storage - object. A storage object with this name gets preinstalled. - */ - const nameOfThisThreadStorage = '.'; - - /** - Map of JS-stringified KVVfsFile::zClass names to - reference-counted Storage objects. These objects are created in - xOpen(). Their refcount is decremented in xClose(), and the - record is destroyed if the refcount reaches 0. We refcount so - that concurrent active xOpen()s on a given name, and within a - given thread, use the same storage object. - */ - cache.storagePool = Object.assign(Object.create(null),{ - /* Start off with mappings for well-known names. */ - [nameOfThisThreadStorage]: newStorageObj(nameOfThisThreadStorage) - }); - - if( globalThis.Storage ){ - /* If available, install local/session storage. */ - if( globalThis.localStorage instanceof globalThis.Storage ){ - cache.storagePool.local = newStorageObj('local', globalThis.localStorage); - } - if( globalThis.sessionStorage instanceof globalThis.Storage ){ - cache.storagePool.session = newStorageObj('session', globalThis.sessionStorage); - } - } - - cache.builtinStorageNames = Object.keys(cache.storagePool); - - const isBuiltinName = (n)=>cache.builtinStorageNames.indexOf(n)>-1; - - /* Add "-journal" twins for each cache.storagePool entry... */ - for(const k of Object.keys(cache.storagePool)){ - /* Journals in kvvfs are are stored as individual records within - their Storage-ish object, named "{storage.keyPrefix}jrnl". We - always map the db and its journal to the same Storage - object. */ - const orig = cache.storagePool[k]; - cache.storagePool[k+'-journal'] = orig; - } - - cache.setError = (e=undefined, dfltErrCode=capi.SQLITE_ERROR)=>{ - if( e ){ - cache.lastError = e; - return (e.resultCode | 0) || dfltErrCode; - } - delete cache.lastError; - return 0; - }; - - cache.popError = ()=>{ - const e = cache.lastError; - delete cache.lastError; - return e; - }; - - /** Exception handler for notifyListeners(). */ - const catchForNotify = (e)=>{ - warn("kvvfs.listener handler threw:",e); - }; - - const kvvfsDecode = wasm.exports.sqlite3__wasm_kvvfs_decode; - const kvvfsEncode = wasm.exports.sqlite3__wasm_kvvfs_encode; - - /** - Listener events and their argument(s) (via the callback(ev) - ev.data member): - - 'open': number of opened handles on this storage. - - 'close': number of opened handles on this storage. - - 'write': key, value - - 'delete': key - - 'sync': true if it's from xSync(), false if it's from - xFileControl(). - - For efficiency's sake, all calls to this function should - be in the form: - - store.listeners && notifyListeners(...); - - Failing to do so will trigger an exceptin in this function (which - will be ignored but may produce a console warning). - */ - const notifyListeners = async function(eventName,store,...args){ - try{ - //cache.rxPageNoSuffix ??= /(\d+)$/; - if( store.keyPrefix && args[0] ){ - args[0] = args[0].replace(store.keyPrefix,''); - } - let u8enc, z0, z1, wcache; - for(const ear of store.listeners){ - const ev = Object.create(null); - ev.storageName = store.jzClass; - ev.type = eventName; - const decodePages = ear.decodePages; - const f = ear.events[eventName]; - if( f ){ - if( !ear.includeJournal && args[0]==='jrnl' ){ - continue; - } - if( 'write'===eventName && ear.decodePages && +args[0]>0 ){ - /* Decode pages to Uint8Array, caching the result in - wcache in case we have more listeners. */ - ev.data = [args[0]]; - if( wcache?.[args[0]] ){ - ev.data[1] = wcache[args[0]]; - continue; - } - u8enc ??= new TextEncoder('utf-8'); - z0 ??= cache.memBuffer(10); - z1 ??= cache.memBuffer(11); - const u = u8enc.encode(args[1]); - const heap = wasm.heap8u(); - heap.set(u, Number(z0)); - heap[wasm.ptr.addn(z0, u.length)] = 0; - const rc = kvvfsDecode(z0, z1, cache.buffer.n); - if( rc>0 ){ - wcache ??= Object.create(null); - wcache[args[0]] - = ev.data[1] - = heap.slice(Number(z1), wasm.ptr.addn(z1,rc)); - }else{ - continue; - } - }else{ - ev.data = args.length - ? ((args.length===1) ? args[0] : args) - : undefined; - } - try{f(ev)?.catch?.(catchForNotify)} - catch(e){ - warn("notifyListeners [",store.jzClass,"]",eventName,e); - } - } - } - }catch(e){ - catchForNotify(e); - } - }/*notifyListeners()*/; - - /** - Returns the storage object mapped to the given string zClass - (C-string pointer or JS string). - */ - const storageForZClass = (zClass)=> - 'string'===typeof zClass - ? cache.storagePool[zClass] - : cache.storagePool[wasm.cstrToJs(zClass)]; - - - const kvvfsMakeKey = wasm.exports.sqlite3__wasm_kvvfsMakeKey; - /** - Returns a C string from kvvfsMakeKey() OR returns zKey. In the - former case the memory is static, so must be copied before a - second call. zKey MUST be a pointer passed to a VFS/file method, - to allow us to avoid an alloc and/or an snprintf(). It requires - C-string arguments for zClass and zKey. zClass may be NULL but - zKey may not. - */ - const zKeyForStorage = (store, zClass, zKey)=>{ - //debug("zKeyForStorage(",store, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey)); - return (zClass && store.keyPrefix) ? kvvfsMakeKey(zClass, zKey) : zKey; - }; - - const jsKeyForStorage = (store,zClass,zKey)=> - wasm.cstrToJs(zKeyForStorage(store, zClass, zKey)); - - const storageGetDbSize = (store)=>+store.storage.getItem(store.keyPrefix + "sz"); - - /** - sqlite3_file pointers => objects, each of which has: - - .file = KVVfsFile instance - - .jzClass = JS-string form of f.$zClass - - .storage = Storage object. It is shared between a db and its - journal. - */ - const pFileHandles = new Map(); - - /** - Original WASM functions for methods we partially override. - */ - const originalMethods = { - vfs: Object.create(null), - ioDb: Object.create(null), - ioJrnl: Object.create(null) - }; - - /** Returns the appropriate originalMethods[X] instance for the - given a KVVfsFile instance. */ - const originalIoMethods = (kvvfsFile)=> - originalMethods[kvvfsFile.$isJournal ? 'ioJrnl' : 'ioDb']; - - const pVfs = new capi.sqlite3_vfs(kvvfsMethods.$pVfs); - const pIoDb = new capi.sqlite3_io_methods(kvvfsMethods.$pIoDb); - const pIoJrnl = new capi.sqlite3_io_methods(kvvfsMethods.$pIoJrnl); - const recordHandler = - Object.create(null)/** helper for some vfs - routines. Populated later. */; - const kvvfsInternal = Object.assign(Object.create(null),{ - pFileHandles, - cache, - storageForZClass, - KVVfsStorage, - /** - BUG: changing to a page size other than the default, - then vacuuming, corrupts the db. As a workaround, - until this is resolved, we forcibly disable - (pragma page_size=...) changes. - */ - disablePageSizeChange: true - }); - if( kvvfs.log ){ - // this is a test build - kvvfs.internal = kvvfsInternal; - } - - /** - Implementations for members of the object referred to by - sqlite3__wasm_kvvfs_methods(). We swap out some native - implementations with these so that we can use JS Storage for - their backing store. - */ - const methodOverrides = { - - /** - sqlite3_kvvfs_methods's member methods. These perform the - fetching, setting, and removal of storage keys on behalf of - kvvfs. In the native impl these write each db page to a - separate file. This impl stores each db page as a single - record in a Storage object which is mapped to zClass. - - A db's size is stored in a record named kvvfs[-storagename]-sz - and the journal is stored in kvvfs[-storagename]-jrnl. The - [-storagename] part is a remnant of the native impl (so that - it has unique filenames per db) and is only used for - localStorage and sessionStorage. We elide that part (to save - space) from other storage objects but retain it on those two - to avoid invalidating pre-version-2 session/localStorage dbs. - - The interface docs for these methods are in src/os_kv.c's - kvrecordRead(), kvrecordWrite(), and kvrecordDelete(). - */ - recordHandler: { - xRcrdRead: (zClass, zKey, zBuf, nBuf)=>{ - try{ - const jzClass = wasm.cstrToJs(zClass); - const store = storageForZClass(jzClass); - if( !store ) return -1; - const jXKey = jsKeyForStorage(store, zClass, zKey); - kvvfs?.log?.xRcrdRead && warn("xRcrdRead", jzClass, jXKey, nBuf, store ); - const jV = store.storage.getItem(jXKey); - if(null===jV) return -1; - const nV = jV.length /* We are relying 100% on v being - ** ASCII so that jV.length is equal - ** to the C-string's byte length. */; - if( 0 ){ - debug("xRcrdRead", jXKey, store, jV); - } - if(nBuf<=0) return nV; - else if(1===nBuf){ - wasm.poke(zBuf, 0); - return nV; - } - if( nBuf+1{ - try { - const store = storageForZClass(zClass); - const jxKey = jsKeyForStorage(store, zClass, zKey); - const jData = wasm.cstrToJs(zData); - kvvfs?.log?.xRcrdWrite && warn("xRcrdWrite",jxKey, store); - store.storage.setItem(jxKey, jData); - store.listeners && notifyListeners('write', store, jxKey, jData); - return 0; - }catch(e){ - error("kvrecordWrite()",e); - return cache.setError(e, capi.SQLITE_IOERR); - } - }, - - xRcrdDelete: (zClass, zKey)=>{ - try { - const store = storageForZClass(zClass); - const jxKey = jsKeyForStorage(store, zClass, zKey); - kvvfs?.log?.xRcrdDelete && warn("xRcrdDelete",jxKey, store); - store.storage.removeItem(jxKey); - store.listeners && notifyListeners('delete', store, jxKey); - return 0; - }catch(e){ - error("kvrecordDelete()",e); - return cache.setError(e, capi.SQLITE_IOERR); - } - } - }/*recordHandler*/, - - /** - Override certain operations of the underlying sqlite3_vfs and - the two sqlite3_io_methods instances so that we can tie - Storage objects to db names. - */ - vfs:{ - /* sqlite3_kvvfs_methods::pVfs's methods */ - xOpen: function(pProtoVfs,zName,pProtoFile,flags,pOutFlags){ - cache.popError(); - let zToFree /* alloc()'d memory for temp db name */; - try{ - if( !zName ){ - zToFree = wasm.allocCString(""+pProtoFile+"." - +(Math.random() * 100000 | 0)); - zName = zToFree; - } - const jzClass = wasm.cstrToJs(zName); - kvvfs?.log?.xOpen && debug("xOpen",jzClass,"flags =",flags); - validateStorageName(jzClass, true); - if( (flags & (capi.SQLITE_OPEN_MAIN_DB - | capi.SQLITE_OPEN_TEMP_DB - | capi.SQLITE_OPEN_TRANSIENT_DB)) - && cache.rxJournalSuffix.test(jzClass) ){ - toss3(capi.SQLITE_ERROR, - "DB files may not have a '-journal' suffix."); - } - let s = storageForZClass(jzClass); - if( !s && !(flags & capi.SQLITE_OPEN_CREATE) ){ - toss3(capi.SQLITE_ERROR, "Storage not found:", jzClass); - } - const rc = originalMethods.vfs.xOpen(pProtoVfs, zName, pProtoFile, - flags, pOutFlags); - if( rc ) return rc; - let deleteAt0 = !!(capi.SQLITE_OPEN_DELETEONCLOSE & flags); - if(wasm.isPtr(arguments[1]/*original zName*/)){ - if(capi.sqlite3_uri_boolean(zName, "delete-on-close", 0)){ - deleteAt0 = true; - } - } - const f = new KVVfsFile(pProtoFile); - util.assert(f.$zClass, "Missing f.$zClass"); - f.addOnDispose(zToFree); - zToFree = undefined; - //debug("xOpen", jzClass, s); - if( s ){ - ++s.refc; - //no if( true===deleteAt0 ) s.deleteAtRefc0 = true; - s.files.push(f); - wasm.poke32(pOutFlags, flags); - }else{ - wasm.poke32(pOutFlags, flags | capi.SQLITE_OPEN_CREATE); - util.assert( !f.$isJournal, "Opening a journal before its db? "+jzClass ); - /* Map both zName and zName-journal to the same storage. */ - const nm = jzClass.replace(cache.rxJournalSuffix,''); - s = newStorageObj(nm); - installStorageAndJournal(s); - s.files.push(f); - s.deleteAtRefc0 = deleteAt0; - kvvfs?.log?.xOpen - && debug("xOpen installed storage handle [",nm, nm+"-journal","]", s); - } - pFileHandles.set(pProtoFile, {store: s, file: f, jzClass}); - s.listeners && notifyListeners('open', s, s.files.length); - return 0; - }catch(e){ - warn("xOpen:",e); - return cache.setError(e); - }finally{ - zToFree && wasm.dealloc(zToFree); - } - }/*xOpen()*/, - - xDelete: function(pVfs, zName, iSyncFlag){ - cache.popError(); - try{ - const jzName = wasm.cstrToJs(zName); - if( cache.rxJournalSuffix.test(jzName) ){ - recordHandler.xRcrdDelete(zName, cache.zKeyJrnl); - }/* - else: historically not done, but maybe otherwise delete - all db pages from storageForZClass(zName)? - */ - return 0; - }catch(e){ - warn("xDelete",e); - return cache.setError(e); - } - }, - - xAccess: function(pProtoVfs, zPath, flags, pResOut){ - cache.popError(); - try{ - const s = storageForZClass(zPath); - const jzPath = s?.jzClass || wasm.cstrToJs(zPath); - if( kvvfs?.log?.xAccess ){ - debug("xAccess",jzPath,"flags =", - flags,"*pResOut =",wasm.peek32(pResOut), - "store =",s); - } - if( !s ){ - // From the API docs: - /** The xAccess method returns [SQLITE_OK] on success or some - ** non-zero error code if there is an I/O error or if the name of - ** the file given in the second argument is illegal. - */ - // However, returning non-0 from here is fatal, so we don't do that. - try{validateStorageName(jzPath)} - catch(e){ - //warn("xAccess is ignoring name validation failure:",e); - wasm.poke32(pResOut, 0); - return 0; - } - } - if( s ){ - const key = s.keyPrefix+ - (cache.rxJournalSuffix.test(jzPath) ? "jrnl" : "1"); - const res = s.storage.getItem(key) ? 0 : 1; - /* This res value looks completely backwards to me, and - is the opposite of the native kvvfs's impl, but it's - working, whereas reimplementing the native one - faithfully does not. Read the lib-level code of where - this is invoked, my expectation is that we set res to 0 - for not-exists. */ - //warn("access res",jzPath,res); - wasm.poke32(pResOut, res); - }else{ - wasm.poke32(pResOut, 0); - } - return 0; - }catch(e){ - error('xAccess',e); - return cache.setError(e); - } - }, - - xRandomness: function(pVfs, nOut, pOut){ - const heap = wasm.heap8u(); - let i = 0; - const npOut = Number(pOut); - for(; i < nOut; ++i) heap[npOut + i] = (Math.random()*255000) & 0xFF; - return nOut; - }, - - xGetLastError: function(pVfs,nOut,pOut){ - const e = cache.popError(); - debug('xGetLastError',e); - if(e){ - const scope = wasm.scopedAllocPush(); - try{ - const [cMsg, n] = wasm.scopedAllocCString(e.message, true); - wasm.cstrncpy(pOut, cMsg, nOut); - if(n > nOut) wasm.poke8(wasm.ptr.add(pOut,nOut,-1), 0); - debug("set xGetLastError",e.message); - return (e.resultCode | 0) || capi.SQLITE_IOERR; - }catch(e){ - return capi.SQLITE_NOMEM; - }finally{ - wasm.scopedAllocPop(scope); - } - } - return 0; - } - - }/*.vfs*/, - - /** - kvvfs has separate sqlite3_api_methods impls for some of the - methods depending on whether it's a db or journal file. Some - of the methods use shared impls but others are specific to - either db or journal files. - */ - ioDb:{ - /* sqlite3_kvvfs_methods::pIoDb's methods */ - xClose: function(pFile){ - cache.popError(); - try{ - const h = pFileHandles.get(pFile); - kvvfs?.log?.xClose && debug("xClose", pFile, h); - if( h ){ - pFileHandles.delete(pFile); - const s = h.store;//storageForZClass(h.jzClass); - s.files = s.files.filter((v)=>v!==h.file); - if( --s.refc<=0 && s.deleteAtRefc0 ){ - deleteStorage(s); - } - originalMethods.ioDb/*same for journals*/.xClose(pFile); - h.file.dispose(); - s.listeners && notifyListeners('close', s, s.files.length); - }else{ - /* Can happen if xOpen fails */ - } - return 0; - }catch(e){ - error("xClose",e); - return cache.setError(e); - } - }, - - xFileControl: function(pFile, opId, pArg){ - cache.popError(); - try{ - const h = pFileHandles.get(pFile); - util.assert(h, "Missing KVVfsFile handle"); - kvvfs?.log?.xFileControl && debug("xFileControl",h,'op =',opId); - if( opId===capi.SQLITE_FCNTL_PRAGMA - && kvvfsInternal.disablePageSizeChange ){ - /* pArg== length-3 (char**) */ - //const argv = wasm.cArgvToJs(3, pArg); // the easy way - const zName = wasm.peekPtr(wasm.ptr.add(pArg, wasm.ptr.size)); - if( "page_size"===wasm.cstrToJs(zName) ){ - kvvfs?.log?.xFileControl - && debug("xFileControl pragma",wasm.cstrToJs(zName)); - const zVal = wasm.peekPtr(wasm.ptr.add(pArg, 2*wasm.ptr.size)); - if( zVal ){ - /* Without this, pragma page_size=N; followed by a - vacuum breaks the db. With this, it continues - working but does not actually change the page - size. */ - kvvfs?.log?.xFileControl - && warn("xFileControl pragma", h, - "NOT setting page size to", wasm.cstrToJs(zVal)); - h.file.$szPage = -1; - return 0/*corrupts: capi.SQLITE_NOTFOUND*/; - }else if( h.file.$szPage>0 ){ - kvvfs?.log?.xFileControl && - warn("xFileControl", h, "getting page size",h.file.$szPage); - wasm.pokePtr(pArg, wasm.allocCString(""+h.file.$szPage) - /* memory now owned by the library */); - return 0;//capi.SQLITE_NOTFOUND; - } - } - } - const rc = originalMethods.ioDb.xFileControl(pFile, opId, pArg); - if( 0==rc && capi.SQLITE_FCNTL_SYNC===opId ){ - h.store.listeners && notifyListeners('sync', h.store, false); - } - return rc; - }catch(e){ - error("xFileControl",e); - return cache.setError(e); - } - }, - - xSync: function(pFile,flags){ - cache.popError(); - try{ - const h = pFileHandles.get(pFile); - kvvfs?.log?.xSync && debug("xSync", h); - util.assert(h, "Missing KVVfsFile handle"); - const rc = originalMethods.ioDb.xSync(pFile, flags); - if( 0==rc && h.store.listeners ) notifyListeners('sync', h.store, true); - return rc; - }catch(e){ - error("xSync",e); - return cache.setError(e); - } - }, - - - }/*.ioDb*/, - - ioJrnl:{ - /* sqlite3_kvvfs_methods::pIoJrnl's methods. Those set to true - are copied as-is from the ioDb objects. Others are specific - to journal files. */ - xClose: true, - }/*.ioJrnl*/ - }/*methodOverrides*/; - - - try { - util.assert( cache.buffer.n>1024*129, "Heap buffer is not large enough" - /* Native is SQLITE_KVOS_SZ is 133073 as of this writing */ ); - for(const e of Object.entries(methodOverrides.recordHandler)){ - // Overwrite kvvfsMethods's callbacks - const k = e[0], f = e[1]; - recordHandler[k] = f; - if( 0 ){ - // bug: this should work - kvvfsMethods.installMethod(k, f); - }else{ - kvvfsMethods[kvvfsMethods.memberKey(k)] = - wasm.installFunction(kvvfsMethods.memberSignature(k), f); - } - } - for(const e of Object.entries(methodOverrides.vfs)){ - // Overwrite some pVfs entries and stash the original impls - const k = e[0], f = e[1], km = pVfs.memberKey(k), - member = pVfs.structInfo.members[k] - || util.toss("Missing pVfs.structInfo[",k,"]"); - originalMethods.vfs[k] = wasm.functionEntry(pVfs[km]); - pVfs[km] = wasm.installFunction(member.signature, f); - } - for(const e of Object.entries(methodOverrides.ioDb)){ - // Similar treatment for pVfs.$pIoDb a.k.a. pIoDb... - const k = e[0], f = e[1], km = pIoDb.memberKey(k); - originalMethods.ioDb[k] = wasm.functionEntry(pIoDb[km]) - || util.toss("Missing native pIoDb[",km,"]"); - pIoDb[km] = wasm.installFunction(pIoDb.memberSignature(k), f); - } - for(const e of Object.entries(methodOverrides.ioJrnl)){ - // Similar treatment for pVfs.$pIoJrnl a.k.a. pIoJrnl... - const k = e[0], f = e[1], km = pIoJrnl.memberKey(k); - originalMethods.ioJrnl[k] = wasm.functionEntry(pIoJrnl[km]) - || util.toss("Missing native pIoJrnl[",km,"]"); - if( true===f ){ - /* use pIoDb's copy */ - pIoJrnl[km] = pIoDb[km] || util.toss("Missing copied pIoDb[",km,"]"); - }else{ - pIoJrnl[km] = wasm.installFunction(pIoJrnl.memberSignature(k), f); - } - } - }finally{ - kvvfsMethods.dispose(); - pVfs.dispose(); - pIoDb.dispose(); - pIoJrnl.dispose(); - } - - /* - That gets all of the low-level bits out of the way. What follows - are the public API additions. - */ - - /** - Clears all storage used by the kvvfs DB backend, deleting any - DB(s) stored there. - - Its argument must be the name of a kvvfs storage object: - - - 'session' - - 'local' - - '' - see below. - - A transient kvvfs storage object name. - - In the first two cases, only sessionStorage resp. localStorage is - cleared. An empty string resolves to both 'local' and 'session' - storage. - - Returns the number of entries cleared. - - As of kvvfs version 2: - - This API is available in Worker threads but does not have access - to localStorage or sessionStorage in them. Prior versions did not - include this API in Worker threads. - - Differences in this function in version 2: - - - It accepts an arbitrary storage name. In v1 this was a silent - no-op for any names other than ('local','session',''). - - - It throws if a db currently has the storage opened UNLESS the - storage object is localStorage or sessionStorage. That version 1 - did not throw for this case was due to an architectural - limitation which has since been overcome, but removal of - JsStorageDb.prototype.clearStorage() would be a backwards compatibility - break, so this function permits wiping the storage for those two - cases even if they are opened. Use with care. - */ - const sqlite3_js_kvvfs_clear = function callee(which){ - if( ''===which ){ - return callee('local') + callee('session'); - } - const store = storageForZClass(which); - if( !store ) return 0; - if( store.files.length ){ - if( globalThis.localStorage===store.storage - || globalThis.sessionStorage===store.storage ){ - /* backwards compatibility: allow these to be cleared - while opened. */ - }else{ - /* Interestingly, kvvfs recovers just fine when the storage is - wiped, so long as the db is not in use and its schema is - recreated before it's used, but client apps should not have - to be faced with that eventuality mid-query (where it - _will_ cause failures). Therefore we disallow it when - storage handles are opened. Kvvfs version 1 could not - detect this case - see the if() block above. - */ - toss3(capi.SQLITE_ACCESS, - "Cannot clear in-use database storage."); - } - } - const s = store.storage; - const toRm = [] /* keys to remove */; - let i, n = s.length; - //debug("kvvfs_clear",store,s); - for( i = 0; i < n; ++i ){ - const k = s.key(i); - //debug("kvvfs_clear ?",k); - if(!store.keyPrefix || k.startsWith(store.keyPrefix)) toRm.push(k); - } - toRm.forEach((kk)=>s.removeItem(kk)); - //alertFilesToReload(store); - return toRm.length; - }; - - /** - This routine estimates the approximate amount of - storage used by the given kvvfs back-end. - - Its arguments are as documented for sqlite3_js_kvvfs_clear(), - only the operation this performs is different. - - The returned value is twice the "length" value of every matching - key and value, noting that JavaScript stores each character in 2 - bytes. - - The returned size is not authoritative from the perspective of - how much data can fit into localStorage and sessionStorage, as - the precise algorithms for determining those limits are - unspecified and may include per-entry overhead invisible to - clients. - */ - const sqlite3_js_kvvfs_size = function callee(which){ - if( ''===which ){ - return callee('local') + callee('session'); - } - const store = storageForZClass(which); - if( !store ) return 0; - const s = store.storage; - let i, sz = 0; - for(i = 0; i < s.length; ++i){ - const k = s.key(i); - if(!store.keyPrefix || k.startsWith(store.keyPrefix)){ - sz += k.length; - sz += s.getItem(k).length; - } - } - return sz * 2 /* because JS uses 2-byte char encoding */; - }; - - /** - Exports a kvvfs storage object to an object, optionally - JSON-friendly. - - Usages: - - thisfunc(storageName); - thisfunc(options); - - In the latter case, the options object must be an object with - the following properties: - - - "name" (string) required. The storage to export. - - - "decodePages" (bool=false). If true, the .pages result property - holdes Uint8Array objects holding the raw binary-format db - pages. The default is to use kvvfs-encoded string pages - (JSON-friendly). - - - "includeJournal" (bool=false). If true and the db has a current - journal, it is exported as well. (Kvvfs journals are stored as a - single record within the db's storage object.) - - The returned object is structured as follows... - - - "name": the name of the storage. This is 'local' or 'session' - for localStorage resp. sessionStorage, and an arbitrary name for - transient storage. This propery may be changed before passing - this object to sqlite3_js_kvvfs_import() in order to - import into a different storage object. - - - "timestamp": the time this function was called, in Unix - epoch milliseconds. - - - "size": the unencoded db size. - - - "journal": if options.includeJournal is true and this db has a - journal, it is stored as a string here, otherwise this property - is not set. - - - "pages": An array holding the raw encoded db pages in their - proper order. - - Throws if this db is not opened. - - The encoding of the underlying database is not part of this - interface - it is simply passed on as-is. Interested parties are - directed to src/os_kv.c in the SQLite source tree, with the - caveat that that code also does not offer a public interface. - i.e. the encoding is a private implementation detail of kvvfs. - The format may be changed in the future but kvvfs will continue - to support the current form. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_export = function callee(...args){ - let opt; - if( 1===args.length && 'object'===typeof args[0] ){ - opt = args[0]; - }else if(args.length){ - opt = Object.assign(Object.create(null),{ - name: args[0], - //decodePages: true - }); - } - const store = opt ? storageForZClass(opt.name) : null; - if( !store ){ - toss3(capi.SQLITE_NOTFOUND, - "There is no kvvfs storage named",opt?.name); - } - //debug("store to export=",store); - const s = store.storage; - const rc = Object.assign(Object.create(null),{ - name: store.jzClass, - timestamp: Date.now(), - pages: [] - }); - const pages = Object.create(null); - let xpages; - const keyPrefix = store.keyPrefix; - const rxTail = keyPrefix - ? /^kvvfs-[^-]+-(\w+)/ /* X... part of kvvfs-NAME-X... */ - : undefined; - let i = 0, n = s.length; - for( ; i < n; ++i ){ - const k = s.key(i); - if( !keyPrefix || k.startsWith(keyPrefix) ){ - let kk = (keyPrefix ? rxTail.exec(k) : undefined)?.[1] ?? k; - switch( kk ){ - case 'jrnl': - if( opt.includeJournal ) rc.journal = s.getItem(k); - break; - case 'sz': - rc.size = +s.getItem(k); - break; - default: - kk = +kk /* coerce to number */; - if( !util.isInt32(kk) || kk<=0 ){ - toss3(capi.SQLITE_RANGE, "Malformed kvvfs key: "+k); - } - if( opt.decodePages ){ - const spg = s.getItem(k), - n = spg.length, - z = cache.memBuffer(0), - zDec = cache.memBuffer(1), - heap = wasm.heap8u()/* MUST be inited last*/; - let i = 0; - for( ; i < n; ++i ){ - heap[wasm.ptr.add(z, i)] = spg.codePointAt(i) & 0xff; - } - heap[wasm.ptr.add(z, i)] = 0; - //debug("Decoding",i,"page bytes"); - const nDec = kvvfsDecode( - z, zDec, cache.buffer.n - ); - //debug("Decoded",nDec,"page bytes"); - pages[kk] = heap.slice(Number(zDec), wasm.ptr.addn(zDec, nDec)); - }else{ - pages[kk] = s.getItem(k); - } - break; - } - } - } - if( opt.decodePages ) cache.memBufferFree(1); - /* Now sort the page numbers and move them into an array. In JS - property keys are always strings, so we have to coerce them to - numbers so we can get them sorted properly for the array. */ - Object.keys(pages).map((v)=>+v).sort().forEach( - (v)=>rc.pages.push(pages[v]) - ); - return rc; - }/* sqlite3_js_kvvfs_export */; - - /** - The counterpart of sqlite3_js_kvvfs_export(). Its - argument must be the result of that function() or - a compatible one. - - This either replaces the contents of an existing transient - storage object or installs one named exp.name, setting - the storage's db contents to that of the exp object. - - Throws on error. Error conditions include: - - - The given storage object is currently opened by any db. - Performing this page-by-page import would invoke undefined - behavior on them. - - - Malformed input object. - - If it throws after starting the import then it clears the storage - before returning, to avoid leaving the db in an undefined - state. It may throw for any of the above-listed conditions before - reaching that step, in which case the db is not modified. If - exp.name refers to a new storage name then if it throws, the name - does not get installed. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_import = function(exp, overwrite=false){ - if( !exp?.timestamp - || !exp.name - || undefined===exp.size - || !Array.isArray(exp.pages) ){ - toss3(capi.SQLITE_MISUSE, "Malformed export object."); - }else if( !exp.size - || (exp.size !== (exp.size | 0)) - //|| (exp.size % cache.fixedPageSize) - || exp.size>=0x7fffffff ){ - toss3(capi.SQLITE_RANGE, "Invalid db size: "+exp.size); - } - - validateStorageName(exp.name); - let store = storageForZClass(exp.name); - const isNew = !store; - if( store ){ - if( !overwrite ){ - //warn("Storage exists:",arguments,store); - toss3(capi.SQLITE_ACCESS, - "Storage '"+exp.name+"' already exists and", - "overwrite was not specified."); - }else if( !store.files || !store.jzClass ){ - toss3(capi.SQLITE_ERROR, - "Internal storage object", exp.name,"seems to be malformed."); - }else if( store.files.length ){ - toss3(capi.SQLITE_IOERR_ACCESS, - "Cannot import db storage while it is in use."); - } - sqlite3_js_kvvfs_clear(exp.name); - }else{ - store = newStorageObj(exp.name); - //warn("Installing new storage:",store); - } - //debug("Importing store",store.poolEntry.files.length, store); - //debug("object to import:",exp); - const keyPrefix = kvvfsKeyPrefix(exp.name); - let zEnc; - try{ - /* Force the native KVVfsFile instances to re-read the db - and page size. */; - const s = store.storage; - s.setItem(keyPrefix+'sz', exp.size); - if( exp.journal ) s.setItem(keyPrefix+'jrnl', exp.journal); - if( exp.pages[0] instanceof Uint8Array ){ - /* raw binary pages */ - //debug("pages",exp.pages); - exp.pages.forEach((u,ndx)=>{ - const n = u.length; - if( 0 && cache.fixedPageSize !== n ){ - util.toss3(capi.SQLITE_RANGE,"Unexpected page size:", n); - } - zEnc ??= cache.memBuffer(1); - const zBin = cache.memBuffer(0), - heap = wasm.heap8u()/*MUST be inited last*/; - /* Copy u to the heap and encode the heap copy via C. This - is _presumably_ faster than porting the encoding algo to - JS. */ - heap.set(u, Number(zBin)); - heap[wasm.ptr.addn(zBin,n)] = 0; - const rc = kvvfsEncode(zBin, n, zEnc); - util.assert( rc < cache.buffer.n, - "Impossibly long output - possibly smashed the heap" ); - util.assert( 0===wasm.peek8(wasm.ptr.add(zEnc,rc)), - "Expecting NUL-terminated encoded output" ); - const jenc = wasm.cstrToJs(zEnc); - //debug("(un)encoded page:",u,jenc); - s.setItem(keyPrefix+(ndx+1), jenc); - }); - }else if( exp.pages[0] ){ - /* kvvfs-encoded pages */ - exp.pages.forEach((v,ndx)=>s.setItem(keyPrefix+(ndx+1), v)); - } - if( isNew ) installStorageAndJournal(store); - }catch{ - if( !isNew ){ - try{sqlite3_js_kvvfs_clear(exp.name);}catch(ee){/*ignored*/} - } - }finally{ - if( zEnc ) cache.memBufferFree(1); - } - return this; - }; - - /** - If no kvvfs storage exists with the given name, one is - installed. If one exists, its reference count is increased so - that it won't be freed by the closing of a database or journal - file. - - Throws if the name is not valid for a new storage object. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_reserve = function(name){ - let store = storageForZClass(name); - if( store ){ - ++store.refc; - return; - } - validateStorageName(name); - installStorageAndJournal(newStorageObj(name)); - }; - - /** - Conditionally "unlinks" a kvvfs storage object, reducing its - reference count by 1. - - This is a no-op if name ends in "-journal" or refers to a - built-in storage object. - - It will not lower the refcount below the number of - currently-opened db/journal files for the storage (so that it - cannot delete it out from under them). - - If the refcount reaches 0 then the storage object is - removed. - - Returns true if it reduces the refcount, else false. A result of - true does not necessarily mean that the storage unit was removed, - just that its refcount was lowered. Similarly, a result of false - does not mean that the storage is removed - it may still have - opened handles. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_unlink = function(name){ - const store = storageForZClass(name); - if( !store - || kvvfsIsPersistentName(store.jzClass) - || isBuiltinName(store.jzClass) - || cache.rxJournalSuffix.test(name) ) return false; - if( store.refc > store.files.length || 0===store.files.length ){ - if( --store.refc<=0 ){ - /* Ignoring deleteAtRefc0 for an explicit unlink */ - deleteStorage(store); - } - return true; - } - return false; - }; - - /** - Adds an event listener to a kvvfs storage object. The idea is - that this can be used to asynchronously back up one kvvfs storage - object to another or another channel entirely. (The caveat in the - latter case is that kvvfs's format is not readily consumable by - downstream code.) - - Its argument must be an object with the following properties: - - - storage: the name of the kvvfs storage object. - - - reserve [=false]: if true, sqlite3_js_kvvfs_reserve() is used - to ensure that the storage exists if it does not already. - If this is false and the storage does not exist then an - exception is thrown. - - - events: an object which may have any of the following - callback function properties: open, close, write, delete. - - - decodePages [=false]: if true, write events will receive each - db page write in the form of a Uint8Array holding the raw binary - db page. The default is to emit the kvvfs-format page because it - requires no extra work, we already have it in hand, and it's - often smaller. It's not great for interchange, though. - - - includeJournal [=false]: if true, writes and deletes of - "jrnl" records are included. If false, no events are sent - for journal updates. - - Passing the same object to sqlite3_js_kvvfs_unlisten() will - remove the listener. - - Each one of the events callbacks will be called asynchronously - when the given storage performs those operations. They may be - asynchronous functions but are not required to be (the events are - fired async either way, but making the event callbacks async may - be advantageous when multiple listeners are involved). All - exceptions, including those via Promises, are ignored but may (or - may not) trigger warning output on the console. - - Each callback gets passed a single object with the following - properties: - - .type = the same as the name of the callback - - .storageName = the name of the storage object - - .data = callback-dependent: - - - 'open' and 'close' get an integer, the number of - currently-opened handles on the storage. - - - 'write' gets a length-two array holding the key and value which - were written. The key is always a string, even if it's a db page - number. For db-page records, the value's type depends on - opt.decodePages. All others, including the journal, are strings. - (The journal, being a kvvfs-specific format, is delivered in - that same JSON-friendly format.) More details below. - - - 'delete' gets the string-type key of the deleted record. - - - 'sync' gets a boolean value: true if it was triggered by db - file's xSync(), false if it was triggered by xFileControl(). The - latter triggers before the xSync() and also triggers if the DB - has PRAGMA SYNCHRONOUS=OFF (in which case xSync() is not - triggered). - - The key/value arguments to 'write', and key argument to 'delete', - are in one of the following forms: - - - 'sz' = the unencoded db size as a string. This specific key is - key is never deleted, so is only ever passed to 'write' events. - - - 'jrnl' = the current db journal as a kvvfs-encoded string. This - journal format is not useful anywhere except in the kvvfs - internals. These events are not fired if opt.includeJournal is - false. - - - '[1-9][0-9]*' (a db page number) = Its type depends on - opt.decodePages. These may be written and deleted in arbitrary - order. - - Design note: JS has StorageEvents but only in the main thread, - which is why the listeners are not based on that. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_listen = function(opt){ - if( !opt || 'object'!==typeof opt ){ - toss3(capi.SQLITE_MISUSE, "Expecting a listener object."); - } - let store = storageForZClass(opt.storage); - if( !store ){ - if( opt.storage && opt.reserve ){ - sqlite3_js_kvvfs_reserve(opt.storage); - store = storageForZClass(opt.storage); - util.assert(store, - "Unexpectedly cannot fetch reserved storage " - +opt.storage); - }else{ - toss3(capi.SQLITE_NOTFOUND,"No such storage:",opt.storage); - } - } - if( opt.events ){ - (store.listeners ??= []).push(opt); - } - }; - - /** - Removes the kvvfs event listeners for the given options - object. It must be passed the same object instance which was - passed to sqlite3_js_kvvfs_listen(). - - This has no side effects if opt is invalid or is not a match for - any listeners. - - Return true if it unregisters its argument, else false. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_unlisten = function(opt){ - const store = storageForZClass(opt?.storage); - if( store?.listeners && opt.events ){ - const n = store.listeners.length; - store.listeners = store.listeners.filter((v)=>v!==opt); - const rc = n>store.listeners.length; - if( !store.listeners.length ){ - // to speed up downstream checks for listeners - store.listeners = undefined; - } - return rc; - } - return false; - }; - - sqlite3.kvvfs.reserve = sqlite3_js_kvvfs_reserve; - sqlite3.kvvfs.import = sqlite3_js_kvvfs_import; - sqlite3.kvvfs.export = sqlite3_js_kvvfs_export; - sqlite3.kvvfs.unlink = sqlite3_js_kvvfs_unlink; - sqlite3.kvvfs.listen = sqlite3_js_kvvfs_listen; - sqlite3.kvvfs.unlisten = sqlite3_js_kvvfs_unlisten; - sqlite3.kvvfs.exists = (name)=>!!storageForZClass(name); - sqlite3.kvvfs.estimateSize = sqlite3_js_kvvfs_size; - sqlite3.kvvfs.clear = sqlite3_js_kvvfs_clear; - - - if( globalThis.Storage ){ - /** - Prior to version 2, kvvfs was only available in the main - thread. We retain that for the v1 APIs, exposing them only in - the main UI thread. As of version 2, kvvfs is available in all - threads but only via its v2 interface (sqlite3.kvvfs). - - These versions have a default argument value of "" which the v2 - versions lack. - */ - capi.sqlite3_js_kvvfs_size = (which="")=>sqlite3_js_kvvfs_size(which); - capi.sqlite3_js_kvvfs_clear = (which="")=>sqlite3_js_kvvfs_clear(which); - } - - if(sqlite3.oo1?.DB){ - /** - Functionally equivalent to DB(storageName,'c','kvvfs') except - that it throws if the given storage name is not one of 'local' - or 'session'. - - As of version 3.46, the argument may optionally be an options - object in the form: - - { - filename: 'session'|'local', - ... etc. (all options supported by the DB ctor) - } - - noting that the 'vfs' option supported by main DB - constructor is ignored here: the vfs is always 'kvvfs'. - */ - const DB = sqlite3.oo1.DB; - sqlite3.oo1.JsStorageDb = function( - storageName = sqlite3.oo1.JsStorageDb.defaultStorageName - ){ - const opt = DB.dbCtorHelper.normalizeArgs(...arguments); - opt.vfs = 'kvvfs'; - if( 0 ){ - // Current tests rely on these, but that's arguably a bug - if( opt.flags ) opt.flags = 'cw'+opt.flags; - else opt.flags = 'cw'; - } - switch( opt.filename ){ - /* sqlite3_open(), in these builds, recognizes the names - below and performs some magic which we want to bypass - here for sanity's sake. */ - case ":sessionStorage:": opt.filename = 'session'; break; - case ":localStorage:": opt.filename = 'local'; break; - } - const m = /(file:(\/\/)?)([^?]+)/.exec(opt.filename); - validateStorageName( m ? m[3] : opt.filename); - DB.dbCtorHelper.call(this, opt); - }; - sqlite3.oo1.JsStorageDb.defaultStorageName - = cache.storagePool.session ? 'session' : nameOfThisThreadStorage; - const jdb = sqlite3.oo1.JsStorageDb; - jdb.prototype = Object.create(DB.prototype); - jdb.clearStorage = sqlite3_js_kvvfs_clear; - /** - DEPRECATED: the inherited method of this name (as opposed to - the "static" class method) is deprecated with version 2 of - kvvfs. This function will, for backwards comaptibility, - continue to work with localStorage and sessionStorage, but will - throw for all other storage because they are opened. Version 1 - was not capable of recognizing that the storage was opened so - permitted wiping it out at any time, but that was arguably a - bug. - - Clears this database instance's storage or throws if this - instance has been closed. Returns the number of - database pages which were cleaned up. - */ - jdb.prototype.clearStorage = function(){ - return jdb.clearStorage(this.affirmOpen().dbFilename(), true); - }; - /** Equivalent to sqlite3_js_kvvfs_size(). */ - jdb.storageSize = sqlite3_js_kvvfs_size; - /** - Returns the _approximate_ number of bytes this database takes - up in its storage or throws if this instance has been closed. - */ - jdb.prototype.storageSize = function(){ - return jdb.storageSize(this.affirmOpen().dbFilename(), true); - }; - }/*sqlite3.oo1.JsStorageDb*/ - - if( sqlite3.__isUnderTest && sqlite3.vtab ){ - /** - An eponymous vtab for inspecting the kvvfs state. This is only - intended for use in testing and development, not part of the - public API. - */ - const cols = Object.assign(Object.create(null),{ - rowid: {type: 'INTEGER'}, - name: {type: 'TEXT'}, - nRef: {type: 'INTEGER'}, - nOpen: {type: 'INTEGER'}, - isTransient: {type: 'INTEGER'}, - dbSize: {type: 'INTEGER'} - }); - Object.keys(cols).forEach((v,i)=>cols[v].colId = i); - - const VT = sqlite3.vtab; - const ProtoCursor = Object.assign(Object.create(null),{ - row: function(){ - return cache.storagePool[this.names[this.rowid]]; - } - }); - Object.assign(Object.create(ProtoCursor),{ - rowid: 0, - names: Object.keys(cache.storagePool) - .filter(v=>!cache.rxJournalSuffix.test(v)) - }); - const cursorState = function(cursor, reset){ - const o = (cursor instanceof capi.sqlite3_vtab_cursor) - ? cursor - : VT.xCursor.get(cursor); - if( reset || !o.vTabState ){ - o.vTabState = Object.assign(Object.create(ProtoCursor),{ - rowid: 0, - names: Object.keys(cache.storagePool) - .filter(v=>!cache.rxJournalSuffix.test(v)) - }); - } - return o.vTabState; - }; - - const dbg = 1 ? ()=>{} : (...args)=>debug("vtab",...args); - - const theModule = function f(){ - return f.mod ??= new sqlite3.capi.sqlite3_module().setupModule({ - catchExceptions: true, - methods: { - xConnect: function(pDb, pAux, argc, argv, ppVtab, pzErr){ - dbg("xConnect"); - try{ - const xcol = []; - Object.keys(cols).forEach((k)=>{ - xcol.push(k+" "+cols[k].type); - }); - const rc = capi.sqlite3_declare_vtab( - pDb, "CREATE TABLE ignored("+xcol.join(',')+")" - ); - if(0===rc){ - const t = VT.xVtab.create(ppVtab); - util.assert( - (t === VT.xVtab.get(wasm.peekPtr(ppVtab))), - "output pointer check failed" - ); - } - return rc; - }catch(e){ - return VT.xError('xConnect', e, capi.SQLITE_ERROR); - } - }, - xCreate: wasm.ptr.null, // eponymous only - //xCreate: true, // copy xConnect, i.e. also eponymous only - xDisconnect: function(pVtab){ - dbg("xDisconnect",...arguments); - VT.xVtab.dispose(pVtab); - return 0; - }, - xOpen: function(pVtab, ppCursor){ - dbg("xOpen",...arguments); - VT.xCursor.create(ppCursor); - return 0; - }, - xClose: function(pCursor){ - dbg("xClose",...arguments); - const c = VT.xCursor.unget(pCursor); - delete c.vTabState; - c.dispose(); - return 0; - }, - xNext: function(pCursor){ - dbg("xNext",...arguments); - const c = VT.xCursor.get(pCursor); - ++cursorState(c).rowid; - return 0; - }, - xColumn: function(pCursor, pCtx, iCol){ - dbg("xColumn",...arguments); - //const c = VT.xCursor.get(pCursor); - const st = cursorState(pCursor); - const store = st.row(); - util.assert(store, "Unexpected xColumn call"); - switch(iCol){ - case cols.rowid.colId: - capi.sqlite3_result_int(pCtx, st.rowid); - break; - case cols.name.colId: - capi.sqlite3_result_text(pCtx, store.jzClass, -1, capi.SQLITE_TRANSIENT); - break; - case cols.nRef.colId: - capi.sqlite3_result_int(pCtx, store.refc); - break; - case cols.nOpen.colId: - capi.sqlite3_result_int(pCtx, store.files.length); - break; - case cols.isTransient.colId: - capi.sqlite3_result_int(pCtx, !!store.deleteAtRefc0); - break; - case cols.dbSize.colId: - capi.sqlite3_result_int(pCtx, storageGetDbSize(store)); - break; - default: - capi.sqlite3_result_error(pCtx, "Invalid column id: "+iCol); - return capi.SQLITE_RANGE; - } - return 0; - }, - xRowid: function(pCursor, ppRowid64){ - dbg("xRowid",...arguments); - const st = cursorState(pCursor); - VT.xRowid(ppRowid64, st.rowid); - return 0; - }, - xEof: function(pCursor){ - const st = cursorState(pCursor); - dbg("xEof?="+(!st.row()),...arguments); - return !st.row(); - }, - xFilter: function(pCursor, idxNum, idxCStr, - argc, argv/* [sqlite3_value* ...] */){ - dbg("xFilter",...arguments); - const st = cursorState(pCursor, true); - return 0; - }, - xBestIndex: function(pVtab, pIdxInfo){ - dbg("xBestIndex",...arguments); - //const t = VT.xVtab.get(pVtab); - const pii = new capi.sqlite3_index_info(pIdxInfo); - pii.$estimatedRows = cache.storagePool.size; - pii.$estimatedCost = 1.0; - pii.dispose(); - return 0; - } - } - })/*setupModule*/; - }/*theModule()*/; - - sqlite3.kvvfs.create_module = function(pDb, name="sqlite_kvvfs"){ - return capi.sqlite3_create_module(pDb, name, theModule(), - wasm.ptr.null); - }; - - }/* virtual table */ - - -})/*globalThis.sqlite3ApiBootstrap.initializers*/; + delete sqlite3.capi.sqlite3_kvvfs_methods; + delete sqlite3.capi.KVVfsFile; +}); /* The OPFS SAH Pool VFS parts are elided from builds targeting node.js. diff --git a/src/bin/sqlite3-opfs-async-proxy.js b/src/bin/sqlite3-opfs-async-proxy.js index e09bbbd..d136eab 100644 --- a/src/bin/sqlite3-opfs-async-proxy.js +++ b/src/bin/sqlite3-opfs-async-proxy.js @@ -62,7 +62,7 @@ if( !vfsName ){ VFS or both the "opfs" and "opfs-wl" VFSes. */ const workerId = (Math.random() * 10000000) | 0; -const isWebLocker = 'opfs-wl'===urlParams.get('vfs'); +const isWebLocker = 'opfs-wl'===vfsName; const wPost = (type,...args)=>postMessage({type, payload:args}); const installAsyncProxy = function(){ const toss = function(...args){throw new Error(args.join(' '))}; diff --git a/src/bin/sqlite3.mjs b/src/bin/sqlite3.mjs index 4f4fa6c..a8780af 100644 --- a/src/bin/sqlite3.mjs +++ b/src/bin/sqlite3.mjs @@ -27,9 +27,9 @@ /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.0" +** SQLITE_VERSION_NUMBER 3054000 +** SQLITE_SOURCE_ID "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3" ** ** Emscripten SDK: 5.0.5 */ @@ -92,7 +92,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR /** This file was preprocessed using: - ./c-pp -o ./bld/pre-js.esm.js -Dtarget:es6-module -DModule.instantiateWasm api/pre-js.c-pp.js + ./c-pp -o ./bld/pre-js.esm.js -Dtarget:es6-module -Dsqlite3.wasm.base64=./jswasm/sqlite3.wasm -DModule.instantiateWasm api/pre-js.c-pp.js */ (function(Module){ const sIMS = @@ -154,12 +154,17 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR It's disabled in the (unsupported/untested) node builds because node does not do fetch(). */ - Module['instantiateWasm'] = function callee(imports,onSuccess){ + Module['instantiateWasm'] = function callee(imports, onSuccess){ if( this.emscriptenInstantiateWasm instanceof Function ){ /* See [tag:locateFile]. Same story here */ return this.emscriptenInstantiateWasm(imports, onSuccess); } const sims = this; + const finalThen = (arg)=>{ + arg.imports = imports; + sims.instantiateWasm = arg; /* used by sqlite3-api-prologue.c-pp.js */ + onSuccess(arg.instance, arg.module); + }; const uri = Module.locateFile( sims.wasmFilename, ( ('undefined'===typeof scriptDirectory/*var defined by Emscripten glue*/) @@ -167,11 +172,6 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR ); sims.debugModule("instantiateWasm() uri =", uri, "sIMS =",this); const wfetch = ()=>fetch(uri, {credentials: 'same-origin'}); - const finalThen = (arg)=>{ - arg.imports = imports; - sims.instantiateWasm = arg /* used by sqlite3-api-prologue.c-pp.js */; - onSuccess(arg.instance, arg.module); - }; const loadWasm = WebAssembly.instantiateStreaming ? async ()=> WebAssembly @@ -4099,11 +4099,11 @@ var _sqlite3_status64, _sqlite3_db_status, _sqlite3_vfs_find, _sqlite3_initialize, - _sqlite3_malloc, - _sqlite3_free, _sqlite3_vfs_register, _sqlite3_vfs_unregister, + _sqlite3_malloc, _sqlite3_malloc64, + _sqlite3_free, _sqlite3_realloc, _sqlite3_realloc64, _sqlite3_value_text, @@ -4126,6 +4126,11 @@ var _sqlite3_status64, _sqlite3_column_type, _sqlite3_errmsg, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4363,11 +4368,11 @@ function assignWasmExports(wasmExports) { _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; - _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; - _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; @@ -4390,6 +4395,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4822,9 +4832,9 @@ Module.runSQLite3PostLoadInit = async function( /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.0" +** SQLITE_VERSION_NUMBER 3054000 +** SQLITE_SOURCE_ID "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3" ** ** Emscripten SDK: 5.0.5 */ @@ -5601,7 +5611,11 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5621,7 +5635,8 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -7069,7 +7084,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.53.4", "libVersionNumber": 3053004, "sourceId": "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","downloadVersion": 3530400,"scm":{ "sha3-256": "bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","branch": "branch-3.53","tags": "release version-3.53.4","datetime": "2026-07-24T19:02:57.525Z"}}; + sqlite3.version = {"libVersion": "3.54.0", "libVersionNumber": 3054000, "sourceId": "2026-10-09 15:46:58 be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3","downloadVersion": 3540000,"scm":{ "sha3-256": "be8d059e9a49089ab2dce5ed26dd87aaf598fdc5fbe0b107c0dd758464bcd5e3","branch": "trunk","tags": "release major-release version-3.54.0","datetime": "2026-10-09T15:46:58.543Z"}}; }); /** 2022-07-08 @@ -9641,7 +9656,7 @@ globalThis.WhWasmUtilInstaller ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js - by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; globalThis.Jaccwabyt = @@ -9953,8 +9968,8 @@ function StructBinderFactory(config){ and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ const ii = getInstanceHandle(obj, false); - if( !ii ) return; - rmInstanceHandle(obj); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; if( !m && !(m = ii.p) ){ console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); return; @@ -9981,6 +9996,7 @@ function StructBinderFactory(config){ m,'threw. NOT propagating it.',e); } } + rmInstanceHandle(obj); delete obj.ondispose; if(ctor.debugFlags.__flags.dealloc){ log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), @@ -10906,6 +10922,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Please keep these sorted by function name! ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written bindings to permit more flexible inputs. */ ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], @@ -11613,6 +11634,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -11664,6 +11686,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -12817,8 +12840,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __doesNotOwnHandle = new Set(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -13300,7 +13323,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -13316,6 +13340,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); if( !__doesNotOwnHandle.delete(this) ){ capi.sqlite3_close_v2(pDb); } - if(this.onclose && (this.onclose.after instanceof Function)){ + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -13975,8 +14050,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -14400,6 +14478,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -14416,6 +14499,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -14633,14 +14742,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -14652,7 +14763,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -14667,69 +14798,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rc cache.storagePool[store.jzClass] = @@ -16732,6 +16836,35 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const pFileHandles = new Map(); + /** + Map of filename to lock objects with this structure: + + {.lockType: int, .nShared: int} + + Used by xLock(), xUnlock(), and xCheckReservedLock(). Modelled + after the "same-process, same-file, different-db-handle" locking + in os_unix.c. + */ + const mapPathToLocks = new Map(); + + /** + Main xUnlock() impl for kvvfs, also used by xClose(). Expects an + xOpen()-created file handle object and the second argument to + xUnlock(). It returns void. + */ + const unlockFile = function(fh, lockType){ + if(fh.lockType<=lockType) return; + const lk = mapPathToLocks.get(fh.jzClass); + if(fh.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + mapPathToLocks.delete(fh.jzClass); + } + fh.lockType = lockType; + }; + /** Original WASM functions for methods we partially override. */ @@ -16816,29 +16949,25 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ else if(1===nBuf){ wasm.poke(zBuf, 0); return nV; - } - if( nBuf+1 nV + 1 ){ + nBuf = nV + 1; } if( 0 ){ debug("xRcrdRead", nBuf, zClass, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey), nV, jV, store); } - const zV = cache.memBuffer(0); - //if( !zV ) return -3 /*OOM*/; + const nCopy = nV0, }/*.vfs*/, @@ -17056,6 +17199,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ kvvfs?.log?.xClose && debug("xClose", pFile, h); if( h ){ pFileHandles.delete(pFile); + unlockFile(h, capi.SQLITE_LOCK_NONE); const s = h.store;//storageForZClass(h.jzClass); s.files = s.files.filter((v)=>v!==h.file); if( --s.refc<=0 && s.deleteAtRefc0 ){ @@ -17134,6 +17278,82 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } }, + xLock: function(pFile, iLock){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + if( capi.SQLITE_LOCK_NONE!==iLock ){ + /* Tells the impl to re-read its size. */ + originalMethods.ioDb.xLock(pFile, iLock); + } + /** + This impl is based off of the one in the opfs-sahpool VFS + impl which, in turn, is based off of the impl in + os_unix.c. + */ + if(h.lockType>=iLock) return 0; + let lk = mapPathToLocks.get(h.jzClass); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + mapPathToLocks.set(h.jzClass, lk); + } + if(h.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || iLock>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(iLock===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = iLock; + }else if(iLock===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(h.lockType===capi.SQLITE_LOCK_RESERVED){ + h.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = iLock; + } + h.lockType = iLock; + return 0; + }catch(e){ + error("xLock", e); + return cache.setError(e); + } + }, + + xUnlock: function(pFile, iLock){ + cache.popError(); + try{ + if( capi.SQLITE_LOCK_NONE===iLock ){ + /* Tells the impl to re-read its size on the next op. */ + originalMethods.ioDb.xUnlock(pFile, iLock); + } + const h = pFileHandles.get(pFile); + unlockFile(h, iLock); + return 0; + }catch(e){ + error("xUnlock", e); + return cache.setError(e); + } + }, + + xCheckReservedLock: function(pFile, pOut){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + const lk = mapPathToLocks.get(h.jzClass); + wasm.poke32(pOut, + (!!lk && lk.lockType>capi.SQLITE_LOCK_SHARED) + ? 1 : 0) + return 0; + }catch(e){ + error("xCheckReservedLock", e); + return cache.setError(e); + } + }, + }/*.ioDb*/, @@ -17142,6 +17362,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ are copied as-is from the ioDb objects. Others are specific to journal files. */ xClose: true, + xLock: true, + xUnlock: true, + xCheckReservedLock: true, }/*.ioJrnl*/ }/*methodOverrides*/; @@ -18371,11 +18594,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way, the resolved value of the returned Promise is the number of bytes written to the target file. - It very specifically requires the input to be an SQLite3 - database and throws if that's not the case. It does so in - order to prevent this function from taking on a larger scope - than it is specifically intended to. i.e. we do not want it to - become a convenience for importing arbitrary files into OPFS. + It very specifically requires the input to be an SQLite3 database + and throws if that's not the case. It does so in order to + prevent this function from taking on a larger scope than it is + specifically intended to. i.e. we do not want it to become a + convenience for importing arbitrary files into OPFS. Caveat: as + of 3.54 in SEE builds, the "is this a db?" check is necessarily + lax to account for SEE-encrypted databases not having a legible + header. In such builds, only the db size is relevant for the + check. This routine rewrites the database header bytes in the output file (not the input array) to force disabling of WAL mode. @@ -18857,6 +19084,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ so would need to pass it to the async proxy. That would make it inordinately expensive considering that it's just a hint. + + See: forum:a2f573b00cda1372 */ wasm.poke(pOut, 0, 'i32'); return 0; @@ -19298,7 +19527,7 @@ const initS11n = function(){ //| capi.SQLITE_OPEN_DELETEONCLOSE | capi.SQLITE_OPEN_MAIN_DB; const pOut = wasm.scopedAlloc(8); - const dbFile = "/sanity/check/file"+randomFilename(8); + const dbFile = "/sanity/check/file"+opfsUtil.randomFilename(8); const zDbFile = wasm.scopedAllocCString(dbFile); let rc; state.s11n.serialize("This is รค string."); @@ -19387,7 +19616,7 @@ const initS11n = function(){ state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); opfsVfs.initS11n(); - delete opfsVfs.initS11n; + opfsVfs.initS11n = null; if(options.sanityChecks){ warn("Running sanity checks because of opfs-sanity-check URL arg..."); sanityCheck(); @@ -19653,6 +19882,9 @@ globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ - Also because of that, it does not require the SharedArrayBuffer, so can function without the COOP/COEP HTTP response headers. + - Also because of that, this one is much faster and the performance + gap increases as the job sizes increase. + - It can hypothetically support Safari 16.4+, whereas the "opfs" VFS requires v17 due to a subworker/storage bug in 16.x which makes it incompatible with that VFS. @@ -19757,7 +19989,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Logging verbosity 3+ == everything, 2 == warnings+errors, 1 == errors only. */ verbosity: 2, - forceReinitIfPreviouslyFailed: false + forceReinitIfPreviouslyFailed: false, + preserveOnInitFailure: false }); /** Logging routines, from most to least serious. */ @@ -19794,7 +20027,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xCheckReservedLock'); pool.storeErr(); - wasm.poke32(pOut, 1); + const file = pool.getOFileForS3File(pFile); + wasm.poke32( + pOut, + pool.hasReservedLock(file.path) ? 1 : 0 + /* As forum:b2fbb61642 elaborates on why we cannot simply + check file.lockType>=capi.SQLITE_LOCK_RESERVED + here. Summary: xOpen() has long allowed multiple handles to + the same filename and we need to check if any of them have + a lock to avoid a specific corruption case which that forum + thread demonstrates. */ + ); return 0; }, xClose: function(pFile){ @@ -19804,6 +20047,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(file) { try{ pool.log(`xClose ${file.path}`); + pool.unlockFile(file, capi.SQLITE_LOCK_NONE); pool.mapS3FileToOFile(pFile, false); file.sah.flush(); if(file.flags & capi.SQLITE_OPEN_DELETEONCLOSE){ @@ -19835,8 +20079,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xLock ${lockType}`); pool.storeErr(); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; - return 0; + return pool.lockFile(file, lockType); }, xRead: function(pFile,pDest,n,offset64){ const pool = getPoolForPFile(pFile); @@ -19890,7 +20133,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xUnlock'); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; + pool.unlockFile(file, lockType); return 0; }, xWrite: function(pFile,pSrc,n,offset64){ @@ -19991,6 +20234,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ? pool.getPath(zName) : getRandomName(); let sah = pool.getSAHForPath(path); + if(sah && (flags & capi.SQLITE_OPEN_CREATE) + && (flags & capi.SQLITE_OPEN_EXCLUSIVE)){ + toss('file already exists:', path); + } if(!sah && (flags & capi.SQLITE_OPEN_CREATE)) { // File not found so try to create it. if(pool.getFileCount() < pool.getCapacity()) { @@ -20057,7 +20304,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Inherit certain VFS members from the default VFS, if available. */ opfsVfs.$xRandomness = dVfs.$xRandomness; - opfsVfs.$xSleep = dVfs.$xSleep; dVfs.dispose(); } if(!opfsVfs.$xRandomness && !vfsMethods.xRandomness){ @@ -20070,9 +20316,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return i; }; } - if(!opfsVfs.$xSleep && !vfsMethods.xSleep){ - vfsMethods.xSleep = (pVfs,ms)=>0; - } + /** + This VFS's xSleep() must be a no-op. In this environment, + only db handles within the same thread can ever come into + contention, and that contention cannot be resolved if + one of the handles sleeps in that same thread. + See also: forum:3f0794c5d8 + */ + vfsMethods.xSleep = (pVfs,ms)=>0; sqlite3.vfs.installVfs({ vfs: {struct: opfsVfs, methods: vfsMethods} }); @@ -20080,8 +20331,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; /** - Class for managing OPFS-related state for the - OPFS SharedAccessHandle Pool sqlite3_vfs. + Class for managing OPFS-related state for the OPFS + SharedAccessHandle Pool sqlite3_vfs. This class is + internal-use-only, never exposed to the client. OpfsSAHPoolUtil + is the public-facing part. */ class OpfsSAHPool { /* OPFS dir in which VFS metadata is stored. */ @@ -20103,7 +20356,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Set of currently-unused SAHs. */ #availableSAH = new Set(); /* Maps (sqlite3_file*) to xOpen's file objects. */ - #mapS3FileToOFile_ = new Map(); + #mapS3FileToOFile = new Map(); + /* Maps client-side file names to the lock state of the files + opened via this pool: {nShared, lockType}, modelled after + os_unix.c:unixInodeInfo. */ + #mapPathToLock = new Map(); /* Maps SAH to an abstract File Object which contains various metadata about that handle. */ @@ -20119,6 +20376,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Logging verbosity. See optionDefaults.verbosity. #verbosity; + /** + Options are documented in installOpfsSAHPoolVfs(). + */ constructor(options = Object.create(null)){ this.#verbosity = options.verbosity ?? optionDefaults.verbosity; this.vfsName = options.name || optionDefaults.name; @@ -20145,6 +20405,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ warn(...args){this.#logImpl(1, ...args)}; error(...args){this.#logImpl(0, ...args)}; + /* Design note: at the time this method was added, the developer + was unaware that getter syntax was an option: get vfs(){...} */ getVfs(){return this.#cVfs} /* Current pool capacity. */ @@ -20179,22 +20441,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } /** - Reduce capacity by n, but can only reduce up to the limit - of currently-available SAHs. Returns a Promise which resolves - to the number of slots really removed. + Reduce capacity by n, but can only reduce up to the limit of + currently-available SAHs. Returns a Promise which resolves to + the number of slots really removed. Throws if removal of an + OPFS filesystem entry fails for any reason, in which case the + VFS itself is left in a well-defined state, possibly partially + reduced in capacity compared to before this call, but the file + which was unable to be removed is in an undefined state. It may + be orphaned and/or later recycled. + + As of 3.54, throws if n is an invalid value. Prior to that + an invalid value could cause it to remove all entries. */ async reduceCapacity(n){ + if(!Number.isSafeInteger(n) || n < 0){ + toss('Invalid capacity reduction:', n); + } let nRm = 0; for(const ah of Array.from(this.#availableSAH)){ if(nRm === n || this.getFileCount() === this.getCapacity()){ break; } const name = this.#mapSAHToName.get(ah); - //this.#unmapFileObject(ah); ah.close(); - await this.#dhOpaque.removeEntry(name); this.#mapSAHToName.delete(ah); this.#availableSAH.delete(ah); + await this.#dhOpaque.removeEntry(name); ++nRm; } return nRm; @@ -20210,6 +20482,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ this.#mapSAHToName.clear(); this.#mapFilenameToSAH.clear(); this.#availableSAH.clear(); + this.#mapS3FileToOFile.clear(); + this.#mapPathToLock.clear(); } /** @@ -20219,8 +20493,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ throws, this.$error will contain the corresponding Error object. - If it throws, it releases any SAHs which it may have - acquired before the exception was thrown, leaving the VFS in a + If it throws, it waits for every pending acquisition to settle, + then releases all SAHs it acquired, leaving the VFS in a well-defined but unusable state. If clearFiles is true, the client-stored state of each file is @@ -20234,27 +20508,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ files.push([name,h]); } } - return Promise.all(files.map(async([name,h])=>{ - try{ - const ah = await h.createSyncAccessHandle() - this.#mapSAHToName.set(ah, name); - if(clearFiles){ - ah.truncate(HEADER_OFFSET_DATA); - this.setAssociatedPath(ah, '', 0); + const results = await Promise.allSettled(files.map(async([name,h])=>{ + const ah = await h.createSyncAccessHandle() + this.#mapSAHToName.set(ah, name); + if(clearFiles){ + ah.truncate(HEADER_OFFSET_DATA); + this.setAssociatedPath(ah, '', 0); + }else{ + const path = this.getAssociatedPath(ah); + if(path){ + this.#mapFilenameToSAH.set(path, ah); }else{ - const path = this.getAssociatedPath(ah); - if(path){ - this.#mapFilenameToSAH.set(path, ah); - }else{ - this.#availableSAH.add(ah); - } + this.#availableSAH.add(ah); } - }catch(e){ - this.storeErr(e); - this.releaseAccessHandles(); - throw e; } })); + const failure = results.find((r)=>'rejected'===r.status) + /* If any failures are found then clean up and re-throw the + first one. We "could" record them all but we can only throw + one of them (or an exception wrapping all of them, which + seems unnecessary). */; + if( failure ){ + this.storeErr(failure.reason); + this.releaseAccessHandles(); + throw failure.reason; + } } /** @@ -20461,7 +20739,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ xOpen file object. */ getOFileForS3File(pFile){ - return this.#mapS3FileToOFile_.get(pFile); + return this.#mapS3FileToOFile.get(pFile); } /** Maps or unmaps (if file is falsy) the given (sqlite3_file*) @@ -20469,10 +20747,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ mapS3FileToOFile(pFile,file){ if(file){ - this.#mapS3FileToOFile_.set(pFile, file); + this.#mapS3FileToOFile.set(pFile, file); setPoolForPFile(pFile, this); }else{ - this.#mapS3FileToOFile_.delete(pFile); + this.#mapS3FileToOFile.delete(pFile); setPoolForPFile(pFile, false); } } @@ -20530,7 +20808,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return true; } - /** "Pauses" this VFS by unregistering it from SQLite and relinquishing all open SAHs, leaving the associated files @@ -20552,7 +20829,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ @see unpauseVfs() */ pauseVfs(){ - if(this.#mapS3FileToOFile_.size>0){ + if(this.#mapS3FileToOFile.size>0){ sqlite3.SQLite3Error.toss( capi.SQLITE_MISUSE, "Cannot pause VFS", this.vfsName,"because it has opened files." @@ -20623,7 +20900,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ util.affirmDbHeader(chunk); checkedHeader = true; } - sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + const n = sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + if( n!==chunk.byteLength ){ + toss("Expected to write "+chunk.byteLength+ + "bytes but wrote"+n+"."); + } nWrote += chunk.byteLength; } if( nWrote < 512 || 0!==nWrote % 512 ){ @@ -20631,7 +20912,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if( !checkedHeader ){ const header = new Uint8Array(20); - sah.read( header, {at: 0} ); + sah.read( header, {at: HEADER_OFFSET_DATA} ); util.affirmDbHeader( header ); } sah.write(new Uint8Array([1,1]), { @@ -20649,24 +20930,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ importDb(name, bytes){ if( bytes instanceof ArrayBuffer ) bytes = new Uint8Array(bytes); else if( bytes instanceof Function ) return this.importDbChunked(name, bytes); + util.affirmIsDb(bytes); const sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss("No available handles to import to."); const n = bytes.byteLength; - if(n<512 || n%512!=0){ - toss("Byte array size is invalid for an SQLite db."); - } - const header = "SQLite format 3"; - for(let i = 0; i < header.length; ++i){ - if( header.charCodeAt(i) !== bytes[i] ){ - toss("Input does not contain an SQLite database header."); - } - } const nWrote = sah.write(bytes, {at: HEADER_OFFSET_DATA}); if(nWrote != n){ this.setAssociatedPath(sah, '', 0); toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); }else{ + sah.truncate(HEADER_OFFSET_DATA + n + /* Ensure no trailing junk when overwriting an + existing file with a shorter one. */); sah.write(new Uint8Array([1,1]), {at: HEADER_OFFSET_DATA+18} /* force db out of WAL mode */); this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); @@ -20674,8 +20950,72 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return nWrote; } - }/*class OpfsSAHPool*/; + /** + Returns true if any (sqlite3_file*) currently opened by this + pool using the given client-provided file name (as distinct from + its opaque name) holds a RESERVED or greater lock, else false. + */ + hasReservedLock(filename){ + const lk = this.#mapPathToLock.get(filename); + return !!lk && lk.lockType>capi.SQLITE_LOCK_SHARED; + } + /** + Implements xLock() for the given xOpen-generated file object. + This pool holds its SAHs exclusively, so its xOpen() represent + the only connections to a given file. The locks are held + separately from their file object in the same thread the same + way in which os_unix.c:unixLock() distinguishes multiple + connections of a single process which share an inode: a lock + which conflicts with another connection's lock fails with + SQLITE_BUSY, and a failed attempt to get from RESERVED to + EXCLUSIVE leaves a PENDING lock, which admits no new SHARED + locks. + */ + lockFile(file, lockType){ + if(file.lockType>=lockType) return 0; + let lk = this.#mapPathToLock.get(file.path); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + this.#mapPathToLock.set(file.path, lk); + } + if(file.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || lockType>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(lockType===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = lockType; + }else if(lockType===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(file.lockType===capi.SQLITE_LOCK_RESERVED){ + file.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = lockType; + } + file.lockType = lockType; + return 0; + } + + /** Implements xUnlock() for the given xOpen file object. */ + unlockFile(file, lockType){ + if(file.lockType<=lockType) return; + const lk = this.#mapPathToLock.get(file.path); + if(file.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + this.#mapPathToLock.delete(file.path); + } + file.lockType = lockType; + } + + }/*class OpfsSAHPool*/; /** A OpfsSAHPoolUtil instance is exposed to clients in order to @@ -20829,9 +21169,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ option is truthy _and_ the previous attempt to initialize this VFS with the same `name` failed, the VFS will attempt to initialize a second time instead of returning the cached - failure. See discussion at: + failure. See discussion at + - `preserveOnInitFailure`: (default=`false`) If truthy, + initialization failure unregisters and disposes of the VFS and + releases acquired handles without also deleting its storage. This + does not undo changes already made during initialization, + including `clearOnInit`. Otherwise, initialization failure + invokes this.removeVfs(), which attempts to delete the + pool. Retrying a cached initialization failure requires + `forceReinitIfPreviouslyFailed`. See discussion at + . + Peculiarities of this VFS vis a vis other SQLite VFSes: @@ -20868,16 +21218,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - byteArray exportFile(name) - Synchronously reads the contents of the given file into a Uint8Array - and returns it. This will throw if the given name is not currently - in active use or on I/O error. Note that the given name is _not_ - visible directly in OPFS (or, if it is, it's not from this VFS). + Synchronously reads the contents of the given file into a + Uint8Array and returns it. This will throw if the given name is + not currently in active use or on I/O error. Because of how this + VFS maps names to storage, the given name is _not_ visible + directly in OPFS (or, if it is, it's not from this VFS). - number getCapacity() - Returns the number of files currently contained - in the SAH pool. The default capacity is only large enough for one - or two databases and their associated temp files. + Returns the number of files currently contained in the SAH + pool. The default capacity is only large enough for one or two + databases and their associated temp files. - number getFileCount() @@ -20894,11 +21245,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Imports the contents of an SQLite database, provided as a byte array or ArrayBuffer, under the given name, overwriting any existing content. Throws if the pool has no available file slots, - on I/O error, or if the input does not appear to be a - database. In the latter case, only a cursory examination is made. + on I/O error, or if the input does not appear to be a database. + In the latter case, only a cursory examination is made to + determine whether the input is a db (and only in non-SEE builds, + as we cannot distinguish encrypted DBs from garbage input). + Results are undefined if the given db name refers to an opened - db. Note that this routine is _only_ for importing database - files, not arbitrary files, the reason being that this VFS will + db. This routine is _only_ for importing database files, not + arbitrary files, the reason being that this VFS will automatically clean up any non-database files so importing them is pointless. @@ -20913,7 +21267,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way is the size of the resulting database. On success this routine rewrites the database header bytes in the - output file (not the input array) to force disabling of WAL mode. + output file (not the input array) to force disabling of WAL mode, + (A) for historical reasons and (B) getting WAL to work in this + build requires doing a (pragma locking_mode=exclusive) on the db + before using it. On a write error, the handle is removed from the pool and made available for re-use. @@ -21029,6 +21386,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return (initPromises[vfsName] = Promise.reject(new Error("Missing required OPFS APIs."))); } + /** + An interal detail of OpfsSAHPool, called only by initPromises(). + + Unregisters and disposes of OpfsSAHPool thePool, releasing all + of its SAHs without deleting its files. Used when + initialization fails and the preserveOnInitFailure option is + set. This is a no-op if thePool.getVfs().pointer is falsy. Returns the + undefined value. + */ + const unregisterVfs = (thePool)=>{ + const cVfs = thePool.getVfs(); + if( cVfs?.pointer ){ + capi.sqlite3_vfs_unregister(cVfs.pointer); + cVfs.dispose(); + thePool.releaseAccessHandles(); + } + }; + /** Maintenance reminder: the order of ASYNC ops in this function is significant. We need to have them all chained at the very @@ -21066,7 +21441,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ thePool.log("VFS initialized."); return poolUtil; }).catch(async (e)=>{ - await thePool.removeVfs().catch(()=>{}); + if( options.preserveOnInitFailure ){ + unregisterVfs(thePool); + }else{ + await thePool.removeVfs().catch(()=>{}); + } throw e; }); }).catch((err)=>{ diff --git a/src/bin/sqlite3.wasm b/src/bin/sqlite3.wasm index 2ea991b7bc2ad85a684f012a793985b0c5b9a721..bcedcae86ef88b8334a161b052d4a39bbb4e8ec5 100644 GIT binary patch delta 362760 zcmb@v2bdH^`UhOqX=W$(&dkC_wr2ockfb7DxRc(KV8(RDb4jbP#9bD{xzLL!BA^0I zGUMrq0TjhM^-P$vhZ(~uDuy#+IM4G?zTdBU!ix9&pYMB~Z-Jfe>Z-Tidh`2M^>FJ2 z`@Qtyelam_)-)-EknfqNFN@X13=coj8>@MqShioEG9kvAZ1R?!d3rD1^X7`NaxR`r zPj-woyt(K$Hl#Z6O6%yj8K$L%QCt({?0ONT~tc-qhoERX;?yNnwAXVMrhL1bVD;uOB4KqCJ~a|WC&2r zaw&zUM+}kPOP7|wXv}U!Ng!aMA7X}UG)roF+_I!D00h@U0tmngUDq)w!RWeO!8SJG zv1Uq%8L<*e*Dak(LO;pw8t0I;wbHhE!Jpnz4;yiPkS?9xy$xZd)4CoG>sELKP!U!X zQyYfmKN9+lXKEo`kA@_u0#HEM)CXcYnv7^x1!0GbP(+#$X@xCmnjurzqkwZ%Lr?UV zv2rV7hCmi!$vv<_(=vj^XqwcLLf9a7%!(y}q-NS_TLMY2M3-8alxfcFyKmKCEo6X> zCJ3wvQxl=kU_j=|%upm0il93#Oifl{s04Pp4q6$Qb3eO={Lx0^8jmEX1Q_O!h^XV0 zkWow9N4NZU!`&yFprI*rQ4!KYY9?uh46|xTMAuBiFhW(4s;Y<@o?!<)5;4q>1-TG4 zQB4b%CzCqXqGL@`gv^j8l8`Q-9fe>3*`Y)GS~iif{HC(n?xv}W?iJ{S77XA|2+a1E zm+k2RC~!8gd;zf{*G(*l%oG)Sh42Z<(si)kAbSlBa$@OaWlDyybX{Su1E4PAnht0X zTy(}CGSMoFr)3#%(<2l((~@x+mbwv04TQi$9|{$Oh{6;Kr7V!DQi#g1Fd!hLn=QM6 z&eAeP6gU_lZ8{V-!etZ?O*1SL3`94R%!C{W8w=`wXvorqeOOciiV3Bti8@$_1^Pf@ z2xTvDU6V&fFpWVi!b$~n$b@Dp^dMnqhBRpgW;e?<5y6ip_DmaEByxDIECVb<3xi}9 zcwh=cv;3bTwVpIVC9GDHVNz27d_3YnMj?zKAy9ClRz!p~h`nV{rMPkni>ZKImdC-2 zkkLbr8(~OUeE)D9d@*nXZem7I#44|{fUp(E0-*Z_go)O|&{Ae9qIp2q3`2^rQUEo| zA$;~r}i7O0O#AZCfZMMQSXMZFwkS-16YDk_{k!;!Gn54vrH(Z`7NFye7c!o^w{ zFhdyeaw)o5m71Yj-MV#y5W`G&1LN_`Iub6iv$!#3ch1_TpRqhT(fZTQgWDxd(+*DwhrCG3{z zpPuOEK@O!Jf=P;qqoK*BG)$?F$>B0wEkaR{+lH;|4&|tRmNZ~^tkbdSb-EVSqc&QCABX^S!}Khjk`yW9PgGh1DB9K4dnzjh zdDHOp7)no6+6LW~NW)AFs|*vSh-ASK3u<81h3mrc9+noTO;SGsTnAx}t;QVy{&;xit3V^w7Y8CJ;Fegx8a5xgx%`!{ED;$3UjA+z|OBty$!!i<& zYjNm>9>FlvfPXOcOe8Sv0_G_KlENd0NPLJ=*cA(fEU&>p%mB_5n3Xl)h9(F z_~}{SGa+St=){8(^$A;?l&Gyu?00gXhD6VV&?p3n`kvtK9`IFQ7#uimpp!AUv}95y z5_>?U8XA(i-VlqSL$6pb^b*M!j3cI!cwclDjp-U1BgXAeSvXb(&;luv`_X#PRDSiTjzyWvL;z7~Siv1S*J9yfLJ zADhLcvN-+Bwq}56Zt~9BM=X=Y^?@)m#d29B*n}BVXHT2nGaBd3RCzOrjy>~vbcu)xanA&*!ZhvMZ-IO-F)uM zW^t!1azmvz?%ln;Nm1hoStNYWy$P$B zJZqBpMphQck$=$EJZ&7FO+Qo2({_J0bKIHD6K2ew-Y(A9x)sJv0I%Abyz!H#PsFHM z;zF&+pg?HGPn|JdEYynR$+w={-aJbz(TZ#enkUYfJ$`DlSgI9SAGCveV)^bc0+z1O zusDBtCR4qVS9vW_@;Y+{xD{A~KwFePnw`G<9@p7uAb zsz9Cmus=4p&EPtq7x(?@p+d50!iCXQ<#Cmtz{m@orWKBv8D;`k=e zb0YZnsQ+TO%6%Ryk>srQapNJPkh`{7?c(tgNeU09)3m(c*L1I~{CjB?XEwJtjhlUr zn(#&c=FT;u zFVTx84SoSq*FI@R8$3>%xLfb)+s>ppyZ0AOQzuVp7WbFNW9*D3tg3nXtjRN`iwAtS z#u@XVURziN)GwH!Yp;j&qTMVwwzKvXkLX2{HUXX*_)nWLakkR1J8Ej=nz4Y9*fZf2ye&{Za`rrEHMXspHy-*ej(~mPv7K zYM(r?@+@t$XSR!-C7Mm1#W(||6Yb3t#ZUfeJ*xGe^=kk09^L(=Jq&H0 z;jil99D2S{w8b+(hp98hO>8=2_VfvgE%S{c>Dt@IO;E^PY!v+`$T@9td()&DGp0a{ zclGF2z1S!UNgJ3;PaZs8;t#B^>VAn)lq||!KC)QpH`RB~tTKwSjdo@2SNn_VYeuax zx`rZ%;Kb!dF?5?@7}?`=8g>=r5R!!n^p6Z{?|@7`LrL-)}8rGi8GX2beS=eTxkME;@RT(S%`VrI&tzD zXNc#D^e;4zYi}PnVUl?3R}TUu7Vr8?vXuwDXVm0PLSY=Vc4{*bW7P6NkyM4pc_9ZT z+x=}>M}FnYT)o`kXLHr^YyY5JW$iac!Q>UjFfMCrp3pA7^=Ia)tf)y$?(-vQ3`VaT)rY|(B{I7dw{4aZ2+Qp{-eb0Jlky+4!(uiVsz1ZyT zkLlH26HEM~de!TfnN_Rh7twAZ3enQi&A#FavzvNih%3z=>MGWB*1k~mwrS$3e2c%c zSDAjbS)(5NJ$hU68vo$l73TEjv&FTzs?yg2J-2t-pWZv9|Jkg;bvOUg-j=@3?2&J` z{EfK3Dd-oO*sM(2&A{^O-oWw}|Eu2hkkI5Fl@)iGMFpNUV|Lqw=E)Pq-~5C2sFC;i zC+$%$@AuEyqfS2Hui7IkAN23pqfUPaP{;P|=FA44Hk$<&HZ`4%y@RIa>9eObwakLS ze%Md!S+nmWMMCF0K$ejeibu_&`UC^fu3U|H%s*|<9Gr!>XPtb)zj{wcKIuP*mZ$yq z(DIDGYtJ6?S-(d^t$fZuu%S+W9t8MJLuF{@MPl zFRI&$`WEq$S=8xZ;?^?|8MM!s0;BLUrl=@`*HyOVmEf*GTbz6+&SWn;tisXH_duJ@xSa7*53-Q%bKQ5 zp3aVM`_+AW=>IUYplyXerf(c^*y(-i<-7jezPb8srj<{Zuc|OqQhZHCsE`d`Tj4*{ zw@$mR!hff4jl9MGv2Qh)Td`NYx4t4QdzI}hlfsqJoyO?R@=5K}(2t>ataq(DwY#-{ z>NkgpRPSD*L(Yzxsv7WyaOUwZ>ZGHTk^pg7J4_i}AX#)p)~r)A%&~S^D$z z7wK)rMdm{D($Hn0rJ-e^1&&3wUe~#^nb;jq# zAC5l~e>t`$zBzth^s)F8@sDC3$5tj*B`!@|mUuO`H1>Gx)7WRR&tw0N{Sez3J3szx z{JHqc@gL&f$NwFlpIDpNk@z~X(@Xr6I6wJ)^54lHlK)BmnEY>YXY!}y&&gfM5AFBu z5A65sdG`7CeEUB8zvZ{5UbnxsSC+3TUtPYY{POZE%3mvgy?kr=8|817e^dT*`L6QL z)cfThly5Kpu>7O)kIOGkElw>-U6r~iby4d6)WfOAQm>`{lD;c_&U|@+yii^w7s`u0 zxkxUSOXMZ;LvyLM%=*au)cnl+!u-nIVSa6XY<_3{%lyIo(fqHu%baJOZ_T$Zur9PN z$#iBO%zT#lOXi-;y37ZeD=V(g%&S;nJ)8M3b3^9Q%o~|EGZ$IgGf!t0S{GZ3ti{$6 z>r(3y>oRM(-$*ICzFH&}nRZnV}}H(57Z zw^-|~4c2Ye?bb%?4(m>9lXaK%7wfOq-PS$Uz1H8XPpogOZ>{gFe_7vK^UBUIn_qT8 z*@a~b$}TEfSaxyQqO!$hOUss(Eid!SR+OzOTV1xM?DDcJ%C0QCs_g2rYs#)IyUr`S zsqEIW^<}r0tw~&&xHfTJ;!la|6E`IOoVYP@Q{v{tEs6Ds4T;+lw{ z@t4G36L%->N!*+GTjIXN1BnL{4<$Ay9!@-xcr@{N;)%qQiKh}zC!R?>n|Lm6lgzHn{LF&P;>@R+PZOUdK2Lm+_%iX|#LtOciFwKS$%~VV zl8cjym#;UZ1=n z`RC+K$(z08t;r3^+mm-B?@Vq=-j%#R`B3ta~R)U~O#sXwKzPu-CEbLz&_ zy43R2y{Si1kER|^J(+qs^-Su8)RxqXsqgKVQZJ`oNxhnSH}ziX{nQ7k?Wqq_AEiD? zeU|zn^=0a-)Q?_jXX>Za&#BJz`RV!T3)4%|m!>aEFH0{^uSs8?z9M~P`l|HR>1)z= zr|(JMoBmt+zV!X+2htCwA4+ddKb(Ff{b>5J^yBF#(od$JN+*m(#DL zUroQ3em%W4{bu^D^xNrwq~A%uo8FdwFa3V{gY<{#kJ2BfKS}>H{fFB#8#8xg?#wK! zSYENRBBpK7Bk%t(U{M7s;tyq_N#U-&({hD-*BfO!qau2|l%6Bp$kE1d_tPh&y+<-X_s#TEF|yF><>e0SOXc)Au`1t6gGzR3~xX#chS9iaU0{p%tNjcRmq zH2Vj?#{q-Tc=Q2-wS|U%;Q`s`Dx#`2XpX(gzvFieS;P&T-f&0{+I*z0@#iNE9C-z<$>c*`TucUWOdhN9dpp$@=kyLK_j%KPy5dt zbfUN8PAe;Q^cq35L{5%qi-SzOvF$H2BXA?#SW8yM1k}=z(F$m$yXF}aov~K?;4B#) zeHv!~JeP`q@Meg%RcgcC8w#D=Po64t|3HtrpL~#X!w?j0xHepkY0&PGV1Rpp8sK&s zqj9q^xDkiNWz_9_#-t33D5q%94sv%Yh)}p3cHvbkr+r(x8;g_TN=*|yT_1pxEjjet zF7qpJy{lAvn_^p5s1-{hYylUG~6A93p`XU5Y|&5toCnn+92>3A`Uof-wK?Guw899 zfxFNEu3M{7x&q@6LzDlRyLTf0M2^HbH1%y9)z_s8jFsBlMlY*r!|mUKw3xV$j@8i4 z9v9pLEC0&IT)30Vrhj_8F?%#HWj|(9)H8nDY)by|UT{jPS=cz68%BzGF)_`t0rvv(Tg}K-Q0xHFV0;wBE9tya)Rw5K- z7xyvs#0@mC7fAoPYB(~k@k(`!X^``E?k8RWc2|VA23LM~Mwscy9*UG!ps>3I&iXinj z8O26L|E>VDM$|FrBcqujaX=UQu&j0@x$@&sz0wQKl^s2WyHQTbg?b4MJn1hgT&*={ zla|VOfldO!h~^qC(X8c!+%2NTm2KH-Tn=l=X7trFH-;*Fb7aL{pJ#F!$4UF!j3W_i zaE%aW@Nm6-q$3e}Y5fHk8eKi`qG-3(V`HJ%5E8P#kU5<*LdLQh6tuQcWP8BamEj*k zn`{OC#qckMe+m36_g9Q;>sg+SIC?e_i_ie4Vqt#7Vj+H1#H^^>FB|pyjQT_KhHMW= z#V*+jZVeb2*Bmtv7Jp=1cMKS5lkBvCK-@m+v1|>Ewlx^*u0i-`v}CPlqi|~G@K<9e ze$F|e#=#%hf}E@Yp3*6Ir2pxt-d1_ch-!2FiqXe-{}(tc6tS4$X#Iqim5rVPUjTk$ z0l30Lb9dn<)Vd*>t)=FPQ9zS8lfN*uq%xKRmgZm*8Q?{-z^4CiNYXf*l~5|@R?W5gv?+XQHd+YqHWqI9nLet-sK7m5DS@vhYlZRaO>> ziZYyD3)hq0Wt=D))jSX*+@7m+x9oZ+(F$qM<|@KkU=@f<%9goG#Vj|};-1qAtivsM zC}Cg~-AV9>BEJ{S)ifS_QLfIZxzMSblXcwwPC}7gQ6^8|tm6Q<%fXoI{~d6sY82q` z%Ye{VfDW}z50Dcg;)+ol=H$qNTJN};Y;Dx3ZR~v@yzXk?_TPl5fxPh+GLOO4E( zldD??>xIkn8|ATH4X*1N^^gLW_*8;6O031itDOu^%18E7-(1trPnlQN@>#aQ*7-7BSf$7w) zgVK6Ah!^Z5V;0jL7^D`-#@a@yNY$u&KwqCbr%`r5N=+;o13@tfl%OUjG8A=8 z$Q>~&qN9e_(lD!-0R(DsqQJ9J2auXZ>CVaGyrh!qd7PVeX0RoU ziM93?JhI1RbFnlm!fpb)moC(Uf~g{OT-Q1f#~2b1x>lqpo@T>72ZkgPtBgX3dLJOh zb}LU{U7!QF?v!(hV#8aZ|A z0;nwx22gZlN3PCmG>!$c8;xuoodiXw1i+Hvu? zQ%>=QrUZhPw@{!%45?rU&KAwqNf05x3rg_Muk<~yfA(Aa{Fef$E+)FLhhvU_UUnPR77wYp;ub$*Bd{=WY#UZA zPHtlxkOE&KaD}KG05B{sw1YyU5XH6qdsW21#kUz4Z-2#66`tLNu~}W&Ir>$-NN_GM z%T78yXxQyO3OXa)s}@PuuutFsw&fChD%{I1(_IjO{ec*)Q=@VcN_)YA8Yf0ZK}Gf9 z=u+c&wI@R2Iws&iK1^Uq=gL2fywNkgX%39gNaZ4(ur)gPlO1&FedG8=a-^2-!9$Tz7a%GJ;uPtpVM3&GC~lY z_v<;s0~*FzK^L~-HrdKY`B7YXty9Mct$-446-o)V6$wshI5A!w$R<9(HJDE)x_(Zs zmh>nRo_rxViMeS5K#mq_9)LlbVH@FkoTxI8(lLlePG*u3OwL0bR9pmQ%>?FHgHk{Z6o)3k_p5~{Iu?8Y$T(LK z6jK{cJ@hT_9<&ZlkMu?`98r&O9SjSekp%UJ6A9C;4ITyE{-wGh(#R{)@?#vYuF>j< z20S3GSam9(M}eTC|1ac-+9+eLQ*Z8$-EP3JWD+C*XqelyNXf0Uw7I85AYA zPhlb1IyPZ?rGUy}GtHra%qZWNl>nXc-#Ml#auW4Zz{8yE%VTTh34V`bE5|R3u~Hi#*Tp$^^k(YiN%#G3+77~y^xwX2QUV7Bj&F;c0Uhu zyDMJQXxUXok0~5hYoA0AdR#&+3%V2r3q0~U7|rEC#J%Q1<#Y%J%LG<% zeaa8gd1eg~9=D8_SxYHcLI|d^a>^be6;vulGaqPb!QdgV@n1V`5AWLy!VtzOq~dz$ z5;HnUonUxd6!jp8#8L}(0Wl{;PKU?^ac$oJ(Mtt3TX1*~iXzhIIM~sGV}p+OQ1a?w z078BPVK1XN)PV63ZL}IYA9;Ns)Vo$)oD4j$NJty<9aw>NQ(zIaQ4IN^DPgx_6n^QW znEo_M7zqSoC)FUdCy5Z?%X}sc6*?*)Q?^PQ4iU^9;)(pv1hUcXe}FjB$z6dk6C*?J zUh1|O!Hx%&Lyhy0klI7Fet7=)7L)=8gJg^_2=4)e<%1Wlb9W_~XYEQ-%~6R6dLzCC z8JN%F=Z9V57?ck^qLc}kS)+mqCZF@++TcQID3Mp3o2y-rt#MyC8y0g45vys8E-1k1 z?DQ@G$))>XcnZ=UHwA%5SZ}$hDejCzQGdjvhgP45JoKL1wJC0Dc1tep{^ccWs+*jR zQniN((pbq2vc*0XpEu$2G|UeB1vkR^-MPq2HY~)#JU$0NIvqZOjcKXj~q|rGk~I@WW#`?rg6LIghk#ikRUO?T6l-vGSHLaKnZ)SY5-W- zn8GlmRUEd?9n=Q1LS_IMQYR-pCD(n3Hi-Pg9}g=PhhZum*4!dmx|3n1-`%mM5+xGM&U^|C0go66 zxPwL_-lZ)aLgnf&jzTZo8c;FKQ{2W7+L?r|NrBoogZ1yemrez%LT01U2w{g+0+Cgk zP+@p*vhMzh*-C9Yf1)b7pM-+M?DZ8g2m6Su_ISt_?ivK@=7mgALb!m%k#2w1ZK~nv z6M>PFD8)GmBz2&3G{>xCLw-^uJ&>tEQG|MGq}Ly!;r3U5=&7v3YMio~08R~xE2)}n zg7E-2k0L7MC6-O+7g`C$Nnn|<%qdsS%BE@50;bOyO}z{}Z=Hi;LhT8dP?<;u)yLJ$ zVdBbN5>HT|v#_cF&wr@V!aVlq=*U-6m>sfm0n^mt>eDxL1hodZT=qVq4V4x8XFI2F z=r{pyI1T4r3}#T}ijYPdMi{ACS=@Al8?sNQ1;-FPIDY+!@spJ!Q9hJXiLpUm*+L;u zcREco8HQzIh2n%Z=4kK+iq^RlR*GwK5G9C~tV#WjwV}-T?J2!$5ld5wTrnDj*+Ecx z5WkTcF@tGuB>{Rczn&N-NR}mQUL#fQ}O<0w6J#ea0hgq z6NYXiu{%+vRiHTyA4r2Z^YPt&slo6Yz>0!o!@$^pX5~XpQw8-Hh^4@D3Ff|PH9&~Mc^n6$>SiAa zI8bv`cJ0MfZ`K zFPr+viT-;{j~pvgC3_abL+T<$OQ5XJ^|Z0*N;1RbiT|2)vs_3c;yQ0?Z$}(;K`I*!|!tND0XvKk$Tt+X;2#-RHQ2 zomJPtfdny7KB3Mil(uZ5(Ni>jj|1T-YOKeMT?nFsAQX9+!oW`83P=FF?Y})Xw^t0; zm_piTptLgv_Ffy#eyS|M@LqE}JI&U(1bn}3{891<|Kaf++K%=9!4vivw05J;Vr4dl z<1Ko-yX7{$CD_`GQY#?XEJ70DC?D@wziH)!du92l4t9=X#A+0bt!ba;H#P4sPxCKt zzH#q86*>oq3^9z6UiLUzZWV{2iHsRv9gPlQKW)8zyua{_8xy{!cK)Ix1r3cq?95(! zDeLM!w_YE~$VG5_5_t#1P$L@M3;hDJ1LP9_k7xGvF2KH_vQm;W|LRDE);Ld|g1AB@ z3Fr{;146VfIC7Gj!XaZnFzK*mv<&zmr&_E<`ze|hXM+S51t0!KsWRXlh=hgXx?`M* zk*J43EpOK@y){}7fyWa7<&uK(r#&ePWU;+iHR(8cyFYEx;Gw5ed$BVMBNDA5s9z2k z$L`VS;Q-cH3Ae@QngIO=Cmo}0SnQWiJ`4;#ZSo*F)xTu&0PXF?{sWVTqv_|#2WX%3 zW*>iQONDBv^si`1YIi;3-`X$@i$^dn6qzELyn-}i0IYgM zRlf4Q5$ThgjK4*Il%7XY8LUALw$Sg~v}9^jYTw=IUp{RQ?Ym8z9-j7zl(YO>X7r8i zz{U*73OskL@wd%rD$h62=`*lI>zJ8+G<=*l^V*u17vo49`X*aBh~5wgp<3y_yx8Bb zwVyX1U$x+&Jff{Fh+;T$s8S#Vj1?U;@mKHJ=|%Ij!kg~JYhvD$MY!`UN$jGGy-@p0@T!9>Djx_8_tdCbWkj=Cs^P{yL}4Sz>* z6>SigEBxczj;URuj?UPRWe_&IxWSc@CiH6cA8xCc=lbupRmf5Pzfr9IqhC4eba{q< zHh!Pyzc#B!k1JM4yCY}O2ty9tjo}vjj`3Hx#XiqZweMFx2Rb8;0(tdp2sqfg{FBR`ThYvct zz6a(DFwxzuFPKO~)Hwkca;&chplN4!k3V?{LP2{5PqS=&!C!WE)v$RIH62HzugG8l zmV3>YnteXv5k+a$^2ir#flk7{Wze@ltA!nY@9bRdLdAJy;(^lk!ph**fl~cBi*irn z+kL#A^zu`3S}!1^d_bUL?&m*7M*v|%taY&K?Jb(kD?rq^4~kBe&6Q`xT$9# zU!KI!Ol%uyQ&dg@hp0jG&(6Ncb-^I4FRJ{)j&w{hPaj*-=FV0boMxU1?zI*1%np`bfqO zr}Q(9zyX!#lz>Qq9Xjc5e%62Sk5#ELbR%6a>EU8LE)=N+N4efPePaiM{hl$FYa zrb$@&k3Y>n#RmxUZx}Y|Udx^kDJqUbqk+vb(0eADf@MVeVPX&=PZFrpBFBB@T0l@+ zFfryQU^z%)d;YSHZu=FfhYYSr=zi40MFX-L#bgmUgJ14XOC&)5_ZyCUyQ6+sXQ2Ip z+K=jP%)T4@knW<0`_MD&c;UC`SdDu`z+eG;xEG=Ae1G3LeJK=8bB0hvR?j)fY_Q^U;N56`A@0yBEMY|;ZwwiJDa}w?h>pARU$hts4;t~6 znQ9DE0gs^YE`iyacUa$luo-1>C9Gi)$YXRk;x$OA9T*G^)33_-^X46MYOIhp8+|Bx zlXbZ{qOZy>O7c!nYSxgswz-?*8{(zu$ssCtf9?(x~JB#$!^2&|n$- zz&#p5B_1m~9f#TI0C4#LCZr-i1xttqObB;;HCC+#2YSxk*CEmG<@i)`k6hYzc_41AQZL+~ZPe_E{=7w1)ia7IZjZec zw)aqO09+CFZFq)LApV@iL*+96FZjLO|6=i}$lwlL;>eAD%aY$YcgS3DvM`;!AK@)CqbqU5GN^oEbGK?H2z>$>9c@<`v$>s;dkTb&tttLH z45vHri9j<2>y)(>Mo4|QYY_wR;7}bw+C1aL{Z*)Sd1RETg-XXJkWuy`zsawcWxnS- z_`TNO8`Ur%P?$T?A4yD^`?bKXgpL3XdpJPT{RkSS(K7HBeKgl@4boC#m>(PreLzxy zA-hKa-(YljloP=_G>}8=KvC0>neqcA{~?+`e8r%{9#VElS7AZ)qEL`NY|f_-8u@)c zG*G!9d^W1B)y;Q4f8bDjS1az3#@r;`Yc9so6lN9~o`4SjmI8-k1u(i(63McN9{XvQL3mfCQ)y&C`|D%#z5a!`Msv62d#Phd zcfRi*w7N3W$p@VNfgg!zCpMK&@h7eB_nQ@b@D@s0P-;06lvrBm`CvahS;~%l6zmhy zco52~FQCaj!GCeJQ+opj&=9OG3|yyZ0gsC*;%mC^i2=xIPr}&#;(pj|b!g4L26jXN zQ-wnfhaV1KQzh5?&1-tg8~nv<=E-mU_~i#j0UlbKVWrhS@$&ufTKXlI*CQ6*aJeIY z@4s;QG2ZQ}-0jK(r5)Y!Z>jh9thpKw^)EHBWzGDkL7S9KfM_tN8!oSN}2>ByN=HkgfGG`n|kw-bYUxglgLPC}K5P{j4{8qBb~iGf+j z8|{4j!(K4CA$KP#YCO@0ZT+l+&n@`m3j{0Bp2hu6(UPse=O<{-K}|7{Llc9LN_X!; zCvGlp$7c_GK87k$PkcUwPkhJ2aAzN$&Dw`Y)+hVxM<&&41^&h>zl6J?s>{UR+X?G&%Fi=9P}r7 zom}h5E9Dh(wXDKVcm8x+BiG2@tK>=Ux4@B=gCg#&7IS6 z-XG7MHg!r%%j7f9Xr4G>{J61AWvBn))DwSy{IN$JC5}9D^r(?|?e37@HM+xpd(Z*< z4;`}K;C=3aL?N!QQEWJh6((GJhTFgpllE(ho0+zrZ^7aqBt#{47rLuX`9A&eRuxYa zLDLenHzFW^>@NY>SQfP?!VJ3OZ4dyV2EtD&uncKN#P5=^J4%54>@}HTUFS|f<`q|C zn+m;RM3Iy8G}fKLWZ3C&s{Lu#^u~TY!j*>HfT8*%_@e<%sE<`ms#qcpta}kZy`x!_6Puj5rcsXdJe;L z2%0+NmJgK_;Jo6=fzoz2W77z4OaW}{mfg_7(gLBgkuZTzSf71AR%>63ohcdfHlRO3 zYSjK!PLAA;_asH^W`b(aCKji28&H$5|E$HY%ByNPK%&1Wha;ogkwN&%oDB0(kTDu4vcCctw6Gzfx|Vib^kYH99ssb0?^p|l=ka*9|9yry&ZSKk}$(9;0an$Ne40U z$W|#oY`>Pz{u$Hm`buvF3sB1%5noqCC65>}g5eBeT~bu76hU!`y213ZKmP*bE|dWE zkU__oAW#GEhd2isI3j+%R0|d4S1lv~+Z;o*S_ipK5&RJC93Ig*F%J2{=jpJ;NOe4Q zgk-yf{;IPY+a$j6StW{jtBS~k1_8cNIrrGb1?*zE2)SS2RX7(_!eA)kb(uG(u_fFF z^P3lt*q^XPI2?q;xowXp7{N7Rzr_43#$++f6Qs0V8iX`Xau9?&rxi&Y!7DB(KBUxW z;}@gBonW+47|k&p%`<3&p@=wK73;{s)DPCq!QRtK@YWfy4kW{tRCHu6VlUD_P&5X* zwH>;pQA(W%ab+z^ZMeXN0U!Q~1e<#}j;GiU;g97kE;io-dpT$eJ66z7bCgXR(D*YB zKJH4+hu2B@Z{LuUDSy`uRo-<)3M=|*U1_PPi>5mJ=bN<5x0E z-Wo!Zzcs{XBjQ)UI3ZL)VS*-_mWloWb>zI~X;iXxt;E?71zmZ~B6AgM$%WmK>B?3N z2Fu1~2Vm~8*@0xSVzUa7H1}gBQbHnH8{iC_pB=!s4ObW73Ihk?yoh@oY@!FBKM+S> zan3)hHEzZxzB6zRT887L#eq2Qo*Rfp95+EbUR=c6bpI5ioB zwBl-Eb`X2=tjZwOh}R-F6Z`^a5YV9E8!*&U2CBq*Lm4PW(C@RQ^`HvSQ-Q|5w+ui9;51~R?C zPjFb;=j*X6e>EwMBRGyl>OnvrxOQ6nphAJFCs~D%fFcogQubS2Oo?}ej1^ZK%PBd? zDY+|1VlJ-4K}lY?6?#ug;uxR>l*;1AKvny}E;M(kUzhPUIG2VQ!2-UUfZCsW@GKu- zGq;?JD7Jbp%J^y-TZSgaJXw6vKd1_wY0Kd_C1;8ty`t^no+j!Lts_9OPOX)dEVPxo z4_~2ke@x;fRgI71D9E7sJ~Sh3k1$`qT*g)?!bRLC1rIJiDtKHc32W}r@`T+1PfB&uR@HX+fK>%UJs@p4Y6S3qMBvpfkr#TL)+Vm3S-cGIOxKLAVYeSn*Fa5z z0wL-kuzS@GN$GB$*ox;5cr~qUIgD<@nqy9UB#unu6)(LNvny?)#{pnNq0|+&mWM5| z%Y!N4a1?B1{RmsS4*)b50YgO#VB2qpKo^oRFbyP;yV%PY|EA%LO zB2u6!#JZG41XSoCxGdtU0@G4XrV221rP^xdH6kH;O2s_WHKs83$BS~PssjrZW`R+x z>JTlw%!uXVFmfbNr63~cs(sm*^4Hc#%;aFTEaM{3AQJiSv_TA*F9LD7u=o(zoYs;{ zf~L`y94vXU18AUXdU2qKS9OOwUI`lc3e`>KlLt`UF60qhn+o89Pr!w_Du-<~0h!6X zB7sC@3&AHTiopqGc9|=<8N9q2TMaIiQ%}_ctXVzq@Z?fFQH`-u?^S3kSs+)l|AFuR z=t82P#lXCI|4^{t;FzmV#qko|-LMHEKFEaVrr*e#mX^J7IiOKH1~`C{N(i@~0n-zN zlAMti5jL*)v}l*W-7b@N!A$WK$nn#j#mxk&T9>|oQ}Lg_waWWPXvBs>2ZoNyN?;t0 zM|By1nDd6BpW^XlrgHJ+66-4Di1yebeE=pb>9YarPi;~Hwq!3_dS>X_|-a2Y=F#VQ7)%TVJU`tzpgeV z3W~z|FxQGvUn8WZ6Fv$Op}Z6gYz&nlc%KNY%{HMdDW-@aUXX{us#>lCR~Wo*r>U%s zQ)tc~@cN30NC|XPnFD;JdI5!C6=;LsOkkV^ICx(G{{f1?e-WhKglml(q!#M`t#O^v zCC(}X3SP>l!({TA8?gFTQ&xLX*Wq)^ZOD(&oB{XluM79vU3xa^hH-=j9xmFdLO<0J zF$1tev=6}nAFyVmLzBpnA=*?1TF^cq)ZXGgSE$KM#8a!Ql42wEbM>$uW5*)ndh>Ob zU|3FG%OKFNR8ioia`ow!?A9eSsK}JKpKobCaN>bCXHq=b8y`-r_W?YrWw?b~lK^V1Zj3N@{NPB=l{aS%3j4-)AZaV-H1mP_l(g~Aw=2fGs(y0=Kv-m$;(pYsX> zgT6qPj)LM?QgI0@UK3D(*uiU^i@V$Baj<63zfuh(GvBLpJn6G=T z#UX*U)HL>`T0lUZ9PftPN(Suv@SYU&8@%Jj?NfLQMbDtnhmaGZ81%%^P*iI%5^@8j zF#QuY?TxaB+`xEYE`@@n!T;5NKWz~E%z>fCzM8%nZ>q9@GM7*QomM>z>=7_R{gpj; zK{zCGWCJ8|a1JjMcToP>Ka7G24uq&c7xty(6Co=Q%hTY90RFUmbZhv%?&^i=G$ZE& z#A%=ea(fsh-NpF{CyFYK@&X|z#;4d8wI9S0U$v2}RGWGN+|bqsh!52pl=P$2jhzhK zVNu#}tV4zGZklH$xg^8{uokXHO5v%es?G?r3R|FfKsb^WZ6$R=mCy4qxont1MS>18 z48?Q@iikZ*2ZddyKsCjOF6sf1#uu*TD?xyrDnRk*5>T`5FYrd#sG{SC7^4;9Po1Z2 zY|xItiBm<8V7B>V)Y>^eUomZ(kJ%OCq!Mr*h+PtQr^?HaL*xbMyqJeRjKoMh8uKQ_ zS#Ti!M^4CCLmfy#1)fhJQ@!v7Uus@t14RzR@d7CxQCb`Dd_?>lMg?6MF7wm)$Gn#w zM^F4mI4g|E1La0CzLo`iCjf9m$rz&DrGs&$ zd<$m5pYqo|J#_@P7dqi34ke8|FVhdFA;}IAU)gb`IaQEd5@hYAahmDtsRo_I)J zK~>{Cq6=pmpB+1AH+diyT4PwfOA$XekicFvm0d$~Zb3ksxZR+sO;cCmD`F7YU|W7~ zd}+uXTI_6KNB+X1DEb6`LzVuig_N$rG>~Uej>0+h@&XI!xQk((+)aSV+}&hB1c4wI zjK|7Mz%q>uRy!Q<>+b)A==c{03je)Ss3^EvuX@h})Tnqjw)Ri&EcSf=cKEN|z86>2?qM3a)4lXc4f{)${ zMut~;>I)s~3DyKc0w4d~do2%VKad+@9f-{}WcRdlhW!C5Xz0V$gIoD;sl$~j8o>>s zze1-{an#X(YX0aD(ta{;wzsrPV9t*P@9Ra4C-5;45kS?751M1Ox2SxE6BASd9uLwK70tW z@gm=7e}w&gx|qPg!N90B+6%C%z{$`0J!O*;$6`%>HE{JybtoG$G{9=mZqhN86`-It zy_BrNFP}wu1}~Jy#;;*P$q*+W{Z;q%_ta3HoplVzfwEsr6Y^*xJfpwiFmg}f-GJ}< zh5N?9CEV%b(t;&8IFE=}jjP0fF?_oNP)RX-iwD7I2;dzHx=>o~$*OLbUphCDKnNv` zCEw1@U`iY1es^<8V+j+{U*PKxWGmkCiM19w`5pJydN@-Kx`mLf z_yUjM8ol`~ya>GU+9$u}7~jKClxZv2Ru9`}jKDE#lyV_KSUA#ePjm5ZOK>O|w-7Xb z$7Il`nAKk$y@X6Y1?PxTE@=}i88iYZ{{EwIZ^VfNPEi9BxkDoCzOR!udIt^_;k-dR z;P4N-peBL~;P;7&D{*8Xa9l92_GWyoW84fLi=2wZJ_kPmh(Rg@-$9&;E@+{3SK?y7 zZ1MGcjLQQhg3?|RLO&%$pU^~rP-ulJLmZfB+RubkL2xF;d&}Ghm2>Fu`b~cqEf!sx0&CS!meqItKgxEn;6AUM@IS%#ZU{DPJ zK-qETB{)PtQw8`It412a5V!M9bsU3A3bbg}rF{naz*#Yva^S27g-VpTFefl!M$0S+9w>i-uXM-ReU+1{$OXAt zfDqMFMWjHGYa<6UI0trs*jm6u#Q}PLd%94l24P-NCQw-@+up)g!t;TenqWne(v z8$Q(W-7i$qQZfJ&LWjV;CML^Daxor>B%^|2>Yan(RvZ=n{*RRZpGkNrNW@pJC>Wdp zu-w3i*U-gv&BG^g@j=i}d&jtcONpR3Nw<3{Zg~Ag6%aP@mI?-_b4i7LWC`hl{41&i z6*IbT!tFxRV$wb-HnpqZ<+!67WQ@pc@Z%j5KNCC|!0%F0I}roM#3#niM50!b*8HF` z@iWj5`T2zW0Osx!iWMWsFwf*5wnSu3VFm=1FQ^$+c8@9`#vAzhZXODx3Cjz3fRy0l z6Kd>#hO&(amV?Y1E+wiki#7iboQTduqQhO{*c@Us4&5+)wZHgNg5$iPs4$OW|})oqR83_!79jp`y4T-7j~iwFqGCf&~TiY^1pv9yT|LH z*jP1N4Axf}4n_ggMA~cykKjVJ|C`5aJQZcJH-Kz~vu7N&R${A6`JOWDhAPrf?{VNp zA&>FgFx1)+1;ei4Hr&#JoKo%Yxm!ic27a%v(HQDz40|}_VZW@tSgjeB7*dFni9rT2 z;J3gRp)_t`q}`>CQg+(^g91%fn8vc)@5~>B;kh}(iSVo)qzEVd0(Hj~>Qlplwy}X- zKpRTA{erehN|8BYDkFSowi7o$5kWU5iM9gSZc4Flv)f1gbQuR-3Ya*M6BPz!4bbvA7NPrD-$~RrRJ?4gc14@$6(#29Nn-c5{{R_=B!MFHkZ2%N zfwBb36DdhZ#QrQ4r-}u-or^+uAlN*OgJ>?CLrj8i&!xx4RaoH_?vH>BRdTdx_UAAS z2u|Eg6ZWSmhF}bBmnxEz8G%E@8|lhEsB((^1>zN2dhXeT`Ash>+5xmL0S$qOiX!Z< z_|gRnTCmFY4*%q*dU&b{(*;EySOgiGN94-GUhIZ95zlJDV_T9~1t z?oAVgV;7zqHhIqC`^(JDn89EkuaoB{UNq1fqp z-{dEsu0xy?)Z`Gp1k_OlH;{-DjlG#_?%=bCqa#%S#&GHoRcblw*r2*H`(e6QC|N+? z%~*fQ_hC|0um1r0un2Z)K0(PBMG9w&OUy-f5Q;-Ss1tyq(L7)#B7T}OB4btHL zsnAYu14DF*0}{@YfvhSgadBNd7QYXgk(V-g@XD}`r7|_^WT;i+d;hZe`aERS$i+xO zN-e4sJj+JJvw4!iPN3A89mujFG`3g{=!7g%w^=Jxa?JW5F9wl13`_sRD&ls!+TbOU z&)E|Sz8SAlA#xj{-OmOk?f5TqSX)#@0X%Z`v#^8>_I)t_cpC|i)WgE+H**w3+8a zb*5vuxF^5~S@-|L*LeU+QCgnbLrn-P^@V-OTe>^((|#u$kCDKUw^ z#AKfhv7?|@BPzD25e@c&3Mwip8f=MCRP0^RSR=~+^F1^BcxZnA5Z~_3+_`h_xu>6V z&-H+5Vhk~h(17v+UOxHiTpX8AYh<`VX+c-ASy2ngbbeY-xb+(U8#fv7S6h{{AwJp} zrl30g%(3Jsjwy&ai*E^*S99yT%Rr<`9--sAJ0??ftjJVr+=-+%-qKE$P9knLk8`t` za2T@^+?Vd4FIovfN5g%YQkg6S>eweL0#O^hQof%~7sZ>shI%3O;wpbQ2Ti?f_tGwXT1|cK! z*P1d+cG6|H`Mf=vRx9nec5N>Htf7yqOE^o&vJ*`}a8CRkVIj0Hk3nK326hU{fYJx- z%e)i&rlN_pWff}!1JRy+>6QHBObV?$evgH8eVSoA3IR{#Nezx+k$-bIvL-3&cx4ho zrGjhLh5G_)GuM*Luk~=^z4|uad(dpOoa$#u9)9n(6e)7qwKaLRO6N&yx}7f=RWw_w zbpRjx#|Ni@_5ShUMTrgFT;{HI=ZN5%G7-3lN8QRT6d-0HXAzd2(z3r^hGwEay)^SE{v1z< zP~CJ2hoZ3s_e5u+P}vDUs!TE*wxb&{& zF#vazqTfl7_zFTEbAI{vKB=ad$`iCLYH-NY_JzAjJG_Q1Q2yHW-=lIWyxV6Qk6M3V z`wDqeb36XBgJWnP!H%aqWXM5O-h-CRXMq|i2~&#yAy)>f~2O9{-W2uZ0$B~#ScVFLvMoi54&5AOfFU@2#wrx7&p{(-9Jb^36ImT>8 zlPtPbsHtsb?8wVJHuR1xf>0a8@qL?!Sev*BpV;v}?j$pM0MxlC<9bFo0RlK)E{`hm zzoV5o$vhp2G31jAuBpeLr|SZ~#hddI3}U@RXq!1K_u*!|JiC@OY~Qkf3D5(WQMrSl zo(Z{w(y=UIrsSqWO+a-`1h3R0RHT6b{Hk~T6TJb!p%)H~+T?eYrlQ4BYc$a|xq{MP zEPJA1V$5k)5{0}%{A!IpQLzw_jC(?kZnNRAEtlcQVTFV#%$U-$R|?-Y42D{Kx(xu& zhs`)`)2HUNUx{g^W)TB-*fJjmvOeb5bVtToioa?{x)zRiD(5%ltupdduCHSx(%CYb z6$Sws!l5}BvrpLKr44Ef0!S(14>BoU)86ZpmOV5oXY=a~25IJDaR+b)ARenNy9Sq1 zKhRSInbh7~6*EG?V>p7l+G|QSa1djXtqA?YOm;8rU4w+yPR12LSmvwhaT#|uq``7P zN`RYiGLO_CrM(5|@KPI+H5S6dJhk!*rG=y_5sFN?UZ+W&bxNJw%3i|&%{haC<1Rab zc}@Zpp=HuJ0EDz=A!t6n!ewd6#kpiWZINE_*9|GJzCEhI-2`m$@P*J64TMeK2-~m7 z!f8YU7@CA~t6s;X6! z-?3%q(yldrpmP>714nTQ)aqS$yXQq_@8C*lkN*k?i;u(P^^rs^yUU@P9;T&fMoiOT z^Is<QOrfiiqB+|%ll)2^&fKK?pKZ7p7M8pH~WLA*%Db}y#HTU?B| zOTZv5_tt1YEbs{)!qF&%it7k3g9f8Y3h{~VJYXFRE|T_JE$#eWShX7OS_gwPNAADu zfzgJt_UXYa;5h9d#y6z%j@ZUWd zA*RW#(nNgox&liDVz85?b?HZ)|A1HW1e-+)b0++2BODx!(<;U5Fxv|Y;+u&QV1F%W z9gV1ynaSWNmw^JFejllqjKfwPyBmU{c>$ZD#vZ#TMz!8BEI+m~mWz8sT4U7=hp{Cb z)Cg~No5tdk8W|o^N6t#BvuvIpJLkoJHB}|Fc|yuVqbS(q%4=k9*;^|mU4(T)xk#rpGNn@*`ywKoo20K**NjRpWoYEF;ZENgKP|FKPF5O?SAh@AT7cVm z8VA1N%Nehf9vLX0ncSj0PWFV?w;zM!LBVyd8X_Iik{e606rEoBx0t|_xQ_sUk&)H&f281#Q{+^W&! zuHJ{3A{0VMVe@<~!Uk+W+4W_Z^9D)1E$rC{v|`S9(wQYw>gST1yd-gdaXe%dw@(H8 z!IOAqjr4dIpUkFb;o-NZoZelA6wo66x4Ts&r)hU6@l889BA zLr!h8kXEb{OkxRoM4Ae(`$OGBrnM+&aK1t#-8#c6d=RTpZPH4T+!p)rIcN--EXb~u zqaLIW$m<@pFgcnj^Q%lGgGd?=@n{9+>?afoj612kJVplz!G<)-^)CTAQ`1H~q znlp?U=HY%ey@_XfB+Dq&)dPD!J{1n2Rq6pRs8Hc4z1KQGkMLht{_B^YsP6q0Rri^7 zRo(P$DNW5;MO|?%lE$Z_>naAZPl}ycHRt7l9<#qj;ffe}casX~wo5=KUc?D@ote#FktbwR)k;97k$Ubt;MD>gkP@Ze&&@qHOvlCtT-qs<3rB0*n#*uxbW0@&mbN2LuUl&) zZ-B#AccpipgfuZWq>tMXN&G*_ctAkRf|M6^8^;XOzcr-L9pkGP)x~gi?Lsaq{9uth|#4kdjDtQRa~642!WZ^{g%fpV=}o4e_9+FfB}@)REtc zFTb<2>CUOssbBnn8#5ex7oRD(_9*vLT&CVLuXI)j0{#K|b2PkJRg9RNzpNWa+kk!D z{B~EpsB79MK8GH(mrnL@syg;|Vk+}7A?Ka}to-a85@(EnN|<4)0elcPO3^Va~1&lMDbZS-;)NbHY^Av(W7~hr`w(Y6V<4o6F$gqffj1dw3}E^K74&>RCXF? zrMNIOo=N_QwEIkrK>hEwk)%Hxil~Ty6}N8GnfT&TAwD@jCoJkuDzq;>G{(X^Gr)VD zmZw4A$cA4Uj}VIw)@2a^3WMCBH`L|SO9LZILFiA<8Sq-~>J53B zM*gsrvjX+jfJ-x)?-UtuIZ(f6q7Yu;C{92Yx(uVemV=skHxhJ-RN$j!bC5~opfN=< z2Z+B*p1X-rZU%{zR@>T3Y!sZ@oQ@Uio>cWs4(X695ic*RCdB3<_I?Sw$N9?GzA%Qs z%ORWe{ZW^Zxzgq-s1PQCPA!hj@EVB{xHjizLs=)x0uA#MVrY3?d`lfs+hVJe;gO&>l4rCoqR+zcd3-1u zTFV$4Oa06WTf~P(M@totb(s6Y6W!`%6DP~$Z{m=o?M2W>SDMFIC&<)(;58rR0h8Z8 zJAb4r^D9m(YrH7RL@Y!uXthAYzrr}_PPM&R$Mhx@?BG8IUR$PXvewI;uj3q!%4p6X zC!{=%fwFVty5n#RUd2tCvc((yqbu+A_muID;46|T&a*op?Rj&O!@xkAW6k$ryCiqx zA7INooKB2cfe}8k?_*dH_|m3y?dnc)WweEE;4t+7s~lDpO>ga-haac8_jDQU)Ys$Z z9<8V;_w~L3!C|WrP8VtNp`ywziffJzxJ_Y-9~76$={Uf=TWcDfoJZQ9jv!RK zQl(TfOR@mYONj6vQ2`Gm!v3B%#-2h|kV=Jmx!V+CU**nIX81BWs9j}A^|?IYb8*aH z{FHKU$Cty;mP9)3OWKWaD|FeX(6zc5nAKGQta6;z`Q%ZxND5`r_-oScIuwF9^JF5h zbrL6c$5#NQI_Rd+`hsbUT4Y}=UrBmfB1;(9bHr9(*?P5}@T^v;(Th-ZiiJ~dQlqTz z(vg^ZN6Q6ovRK(NC|9O%)R8BpOa;T3aXL$K`}R8=iQJ=u;pz%)8PCg(b|wPD$@tF( ztQamFcvH%8YMqH#oUx~B4MQLe)GfD^Cw&iscTYxZVNS!_1SRAK!YpN~@QW;f!&hv^ zm6|{^|B0Wu;RQ46Cn|;!$=G8Kw4}{CDr4KqX3;9NkCgGbM#R(DWq4#~rkY7jZ;%Rx zCcrYFo@`d*g&3ya%h+2_PRC1=3t+Rjy~OEA^AaZ)tNR|W&D3+pGkm0(#?cJSY67Fi z^D1P@sKTRgSz<}Dd11afEuLMo6^%h?FuqxPl1cAR6%MsVq0pj&sG~c?hIa=9*xKH+ zbfdIA?gRW1c(xgago4wpr_C_~r5lQ{#bFDTIrHA>TuT-4sw|E?9p8ZMQX9E4@zQX{ znEiQiUVe&WE5w{rCpup|J2Pu86!X?zEQVz?nMX-xEXPOjyx*Qw)!E4U-!^#1$U5^` zW-!8?ld^?)PP_9p1yZFTQE17lxg8Lo5&=jG>@v_JlB{yXMlj3#=0n;xmX-X6TDPRd zx!|T!&Z?f%Xy08ixbCogOhTo=DI>`rADbyYE+kUd8%zn+MYg!g%V>qAiC0E~c|*l2 z%lR?30<}C1w2dU~g`y~aO>TrLEKRsv0~So4OeiGoh;n`eu&s=nob&&!y8n>!xXCH3 zUfTB188jH@sn1G4X{(mUt*Kvk|NcYp6y5RD7C+r5)BRXnss7(W%_=wnhQYfXjVVzo z9W;gf0t|{d>yu6Dw}pu0wsi$ywtuj#@^~x$yn|RXM~FF#Qw|qvxR|<{PyPaURVHFn)mFNKb=F-w9%aB~K$H@=$D< z;u?7DKsAZk6ydc|W}W(5a{nGnfXk}BG~5xD>DPeGDc3dcy8-S>L4iah`?|)cWaYvx zEyHS8hpk(WUhR*9D>Ai)lE6%%8BbF!xCj!^n7)UKGIYv9M7)9!5zN*XvMg#*E|nMp ziz4jv5DNZdMT(L$pH8C>&d#(<|0PJo%u_N;11d^A$=p*V)(_BsH%?S-a2%JB+*VV= zpz*}Bx9eb}V)mR2SsEgV!*MTzrF!oyaHM=BUF&#R4OQg8X67sNGcqM2)a*t& z!mjB+Y;zWW*i$tX;1gtQtcTRn0N0gG;;nE9WcWaLZhbNad53C}#YL#KY^+TlRr;eUZ#)+hHl4T$myS{_DUDa^7hIQv!o^aB zjQ~3Bc0F#KswP<&N9?vV22YEGwU!e?%S*QeC3s#a>6$Njc{=Nz$XrIY%*p+%I6oj? zNh`fhwDp{*IkO5gn$MK3Yi0wdX)2{=)r}6$S|MgqiX+0Pt~eo z?z=EaOL}cjl0siL!lYBw+O|gm(e~ZJY2sQuv9mwH;lX-BY)Lc4eY@@n5X5&>jR6BQ z_99%$C}uGDTrG2erE`XS3)le((P@2OD(MRAgelHW;7U=>x3XX z2wF>nI=+ekk6s0=H$rS^r3DYTgVqw_P=d%9lPL&!-&|GFBWdL{8I-2A)*K4(F6p6Y zC18q>k_<6ftYjR+XS^g}iceW3K%bBk<^otFFyikP<|Pp61CaYXnfkW6ljaw8dQlJsp)@kVS6hbTxTXe>uBPmZ z;=3@!n@P7}PVN_KO!r`c#`2M;IwaYd1jyQXo_NqeVUVDXqTwtplluImz__OoC%G;F z0zv3}H)Tz8`hL<+TPXngXd9>EG8wmXKS2zdGaPQ>8-p#?vRuTPbLo1cU1hj7SP+#m zYEnjdk_E-Y5(ZQTD_jSDC|S2|Msjgue7XC9;FN`y>d@>po*em5mTJVp_)bgr9e71l z5_HP)0thsT#lnrx;rwR)mJb^HS#$$Zr|4@S)hEqJEvh;`ux9}7R!SfP5hO0lnE*I?g_t= zhLkD`EMrQul=}h5tc~wXI7r`WE|p5eVzmQ)VD>=m^){nYm~+FYBljyLf1n^9UXnU- zA$hgI!qkt-H((_z4tbRMR@;H9#ddfNt%1b#Ww?8WG#h``-I2zV9R;)-Jefy1YmOSe zAy%bKJozU%(cvk^AsSDyv{C*qH$xB@b<58(_A=_wY zDK&HM_^b=XhzcC<%M)o)*-Tz!B_?GY5+z7M2-?UuSE1a#dFQaUDES;u9b3+LJqQMy z(%|(&2|kY25LPSg+!K#bXJ;@F18`#^yA!S9)AC%i2tdNs9?=0e(6P7)u(3k;6VMbjohf z3Pa=aAdRqnhhmv?7Sn{E&W@{q(>2Cu8Se!4y)Cd+B4gx++kN=(}48ps4lySP)qDFxFi=WBHD)jZOYMbY$reDve2Ka7h z6)j+!NMlM1F+2C@`zVRS!8bvM40VW=0_p~@Wgd_7f&#}qv5qA*?xZ3;-<1()P1ZGZv9U&7Q_ zkqFSU&=9w0G;)lS(jk-k9^gV!SISofq+EPA5uua^qnt&Mx;JB_kh;d07F35JH^l$Z(7#nworC}0yugxsE-$`g4#C4 zI2>I{{ZpPmuv1FZhRighKUHvTRU((1{=m0@LR1#+E;#Z8nBPlJjLQ93R>}6Q;6P!D zcjO6cDLSMgxj@L8_5S~2gP`zjR6q`ZRUnYVvdZX5lk&Ycj&iUX zX-vdl7S;-Co6 zbSU7z&`|w?kcGXMleRgzJm#dz*hy=1`xVsNm`S#eIEPnWEbQO|9di|$tL#*S61-Zy z$~VhWfp$E))_7JXK3rS3q7Jv#=KWp*3)HQA$6IR~(t9u%-7BnjZ|&Lv>0Jbi?$&2_ zM^9?x8-!lgWH85c8`JKN@254;3&}qP)kZ;8<1;1fdzuLPcZWx^ema83*cymSht;is z^+(Upj@4#CIPv2AteKNBx3na9wRaOat3-JVL%_t(c|=Ym#VM2vj&0pU0>Dk_(dFWG z8g}z_N|{vn&R1MsEGzqFB;Lc0-{cz{aa1c}jcBIEunlVRSek0NqhhT5sEpN70Gkj5 zP*KlbNyGF7`xdI?H0ozr*2UsXS@n5X_!X(K}&CbCwMDk9s&HN z@+Ll)QZm~sWb=D#?TVr|tOF?%M1GYB1?egBtMRG#`tn%Cc66LX}*Za~w8 z3p6NR3|;7{jGc-_!ic4|I}(nbG=3%v-1bfWgh@kZo~W;FYZ^|N)XT57wSCd~gh`Dv zPt=XZSu*vx!1rGIPCH#6%6D80x;%c?i8PIp6*uQqDSFoC8m@k)8P^#tpoDrP`&%PR zI_&^Aatw&19Jip2ptOoDhv*kggQ(Qt>OQE%oiS6#KPlX$Q4WL zahg`wB_U_nMs0(A#!FD}zQs!rf*CIWuwbC%CCZX;{KG$d?3}y)anIzJ)3@)Mr9$R zGbP6CcsR|iuO}@Y`MPmP$T&@pY8f-w-3(%8K z;??ALkZPnv1S~;+RvCU=m|Tg0x!W3*Q8;(9%3|CZltvFnbxiB&;nzfYbftChLc@}R zNv~IIq3)D4kOh_=c-{L2);c&6i zsPt>H{h&JyOoYXX@ltrm7+3?u%kWF=F~S|rs+U{9YiSkwDnBeAI{`bgJ~oY}?tv&o zQ%Ha8*8-Opbm46YGOe-Pg8UTc2hJ@u-~Y_0B*o5!XI^YpdTo}ow3ndZtXH0MU+r>? znldu&B3mf0Y~hd>YpSiU$~9!-RSIz3LEvlhsjERLVI*x!avXP4>coJQbq`}(_e7dP zpC0O?^6Nfm(k;`Gxt*%XYbGAS<`v=IdHJ5&X3Qq3LZ=cIJ*Sy-fLUWx4#hD_lgoP2 z(OA|EwWL|^xQm-mpcTCD-kv1Cmb+uEiHlXYH0+m^5pPNs;i*Q$W6gP(7CGzCSTaboH*TTPZ zd*GiHzt;c0SerYc!}mS0wK0F8H%7rw^ zM$KUBQsWuHx*sfZN~Q|e*wM*-$dxfhP&O7WX5({wN|Qhsock@8V9+R4Uv#b9?fRr7 zS%V}!YKn+_i8if6NNnZE?Ua7WL>82rtiDL4Gb6VB=q*lcqI#7sLF__&I}N33 zomi9V6akQ1&0(|^-tnxL}92dH0fJU?@r}* z?G5q5zck^;B=J@??0cN&qmok6Vb*U`NRr+P@ouf-C?dUEwRKYe^^e&!b|^1=#^r`hIau@9R=(h@1F5@Mm8@ozmV83-o`n%v)E+$bfOlP*+TFkzq2*k9 zKJa{bKrjG6Wq5t|5a?Mn@n&p&m4p_$dPQnY)kj(G>1u~I%tMnswE_%4 zKF)hpdL)H8Ucnm7Bd&ZG<~cDKW-qiF+Y$0UEoOhSmA`kD5(lzDwi0sS7}aTm7+Uze zlMS?sLf_6dw9{)=HgJVURAfKw-q}WVIx#91S991wbzm-Oi^A!hZTRF8Y&HI~c?C9S zP&@?)v`Fbf#?vZz_FbE%x}&G^$hVk%#Y|6DhyQf8y(+wFB@gQ_7AjwTxmNk5Rl2k) z>=WDGJKT$~LP_%e#lL(e=<1R)gLt{0GoELFnv@kc!>6ickSfpb_}|^6Vdbxj{}w)p zZAdixmat(L8~M}gsls(j-jCo0tNh*mhZEa{4#nc{<(y@ZdgFJnfH!cfjH29<)7#vA zq<%m+Y$T8>o)@m|VyBket>j1+-xrb%tj7;e%)`7b-mXXuT}B8zpNop!{Cmu)=ZCiP zzW7?!Lr-Z6f0dV@{c4939*P?p$9MVQFkv_zKHRtgL%HYauyO-y-9Sgpvr(Mx2m%%> zx%i&YxhuNJqWWS#e=t)OyC+X?&M1xyhj+CNJAYw<9KXNRIQ|pncD0fARk*jSjqdUf zpV>ckgW_Mg}}p(QI`TPvuTLHH_$Pt%EPRAs-LUHjogAhW;*DcZKS9x-$QUFr&K-tj;!cb5jyS zBgv+sP}xXdeFQU%kEk@I+{vv;v|rLR8t^*+xwGXGZK6~|Gb3nD-$fS_I4xOo7?ryR zg^Li_J75xWg55>*B$Fq&=@l`55ZntgRU4o#39M;$fA#WYe^=l1Gn;vB%Jd zZW04d#<@S8pc=hO&8kb)EJlpuAim35>(q5QudgU!vJiEq1N13V29UAoMbt`xIx)X) z4AG{P>(Ufq#H9y`Fg=sMULtC^6C|UIOgc6p4O`a^pKFq<@z+7+D?){;vVyuL0I0ydJkO;_=Fb=BUUWpwZv@nN(Wmm%3>5?ASprYs3aeW&-Cso0#|E~>22`?;hvt>!HUe9@yaDj zRS_Urnf?;|PiH}O@|jljbU^1+AhTs(I?Lqw;&4Q78$A4Fm`4Pdpmc}^XgNV77Z*Hr z!J9w2Ld<1xxSRGx0)i;H^v!rb=ncgky^cZfwxdBS`T~jI7hURwWfo6JnT31@B7eWc zbSO{J{`;@M7RARSe1tGY<+|e-QMyzrKS&GIgJbMLoW5#_p+SZuQyVyxnQE5BHBC{m zTKH2twlOQWtN(RwxT%jFW)FoveHr&%VT-;t*_MU2zHsS>!ot3`IGVRC9M#W;w~~&Z zm(HSbD-DvFF!hJ6HBH@)L%6FSXLvsn_TSL@S01%WUaVJKGF_(S3{EVBOSlN)$HE00 z+8}yAufKH*Pi<%;((gli>P0-Ncc^T2d-vP)w?WN+=K}g2MLEI|{cQ)U3%B*Rp%%g_ ze(kctsfB#Aa>EhjMoLD?@2nO2yA^BW!66hsf%A#Df`WeZ=C$D%RzL1MDejeieIopB zfbHD>DT8xxslZ5lCPHBxlH;{2^y%>O0P9njRfwMnYX{hAoo+^9rLlNL6yFlgFWY5; z;Fhg6yoHJ3N_W3P{CN0vs~yX@SGU^cy&rdH7~*r)ja0W%_#`JM)v6oA#EKotf?Qd# zBbsTI6JX#JT^1EK4BsEfV*MlhX&~y2#291p1&W^ycMP<#EZ{rbiXTds0t8~zR6Pkp z2H8*SUt#7T8_@Wi&n|vGTsO!DM#~-vPY$x-rIlX$hz<{mUkHsGS-(Cn(usGTz!XX4 zfgrf8T^eEQjjV64m)0#5EFcxruUWh*9JP@R8@2wDu3O%h8MR`0+C3`{q9qUEp^fbD zZm(E{gO7=GD^|p-uCVykub2Dnb;A zKuxnk=V3M}LO0!Wm~A!i1BRvAJd3kufe_5IT#zpp!0uHb13( z!mT50pgkR)8(~u#z(Tg>ejNsnv>gU7uCFxEk`b0bzGD12>>eu%1C0RBwB*V2^5hzR z9nPh#eI8yKX#-krCY@3=&{FOU4HQS&(7N}Z1O#FHDBHLTHH>m(!F17Vy!>AH{U}J` z^YHm7`;Dri*Ae2y^Y<2-a(r(%b~IYqec{iet>4(MyP}Ws6i5@_FMlImk&zk-$Cmk% z5KT1IxBd{{ikF5rM%$*aq<&*;uhP@_J9s9gfn&$mp7uakK_O0iFuXg)dJlM7`Vh)2 zXznv)+3S6El)(Xg4;*VdZun3=K4kI{zA{8B{B#9AYLl+cm==aJ#@ghOsEu&=+Y7Bx zo~2^BKp7$SNPXZ;caCq#Lc;%FpSQ6MsHC??t$%xoZi_s|^BE>@Y}@o*fWb<4IjJ8D z@^sE?dVv+3dl4?)*e=~_p%f52p&1>0L>XEMuGrng( zwL8Nz-@{saZ5cjK?NLms3R;G++a|WLy&8_+#3r#m4{Tyr+8tr~INN9|=Vcy^EXB{u z^C)j=YBnhs3R0_=mQn(e@GG|>5Gnmy$w>qy9vf$qd#Z&)M>jlBM)ZoCLpQa^_-Iob3^(nynGNlHfoG$#e86W* zg!8VOS$}&o{Ax4nxxt;{z+5kv^K!vr{)MoaZ4Ep8$7bjt?}tH~+w$myhVb#`5DlM| z@wTl#e?HzWvX?{M_idPc9mag$#*8@%1ms_QA1F&!ideg_Q+94+d?7J)zk5IaA*#H_ ztHT-Jw+f`W@cVZBP)?Vi!LVpAuh{5nZ>3ApD?u-ZyT-GywY{HnOT}Jc#ss^t?!0S7 zK^tsgXJEk0-@<-x^FrS(ZEu?rj^cw5v!WJciK75jIwP6>v8C;`!P5o}@`oB?C}Ncj z;)}wTTfr`-hM#W*X}ldS+6tyHFRa)KG`KiyvbAj$ozf6yY;7Cs^UAGl>*&;m@cPy^ z!rl#Cw&Bqa!j{|EhINp!O$*jo=ox;qjrGjGcH$qxS=-p@c1h?r(Jr@F!jg$LJeqe? zcyFRTX&2nKII#l^5cb*DX4t#8ow2R$XyunP7C5;g)MJ;R1YE+hOR1@Y1%E!-9*Np+ z3inU3w{3B_Zadqk6XMCu(u|F-+Rk?Ay2?+Nhnc>GM$5B>_?3`sZ-eZOaMV(G*SN)eII~4tEKoQU;fjN{~$>U*NclQ>G?d^ zZ5rJhTN$0H!{W4&5K_rHj}h0Z-bT+LSeUz`4ckO*1*WWRDt$}Z$=IZe-70mGG}-Os zIvqR`R_|y-dsA~wBu7KKlMe%WCx45{ZM>5WX7c;(WV>~4YpB4yq^*+R9={oG+sTGN zgD>r5ql(KpT}DHbgzdSronZeC7w&9B`d-fyAVGXv`sq#&S-W}o+Y39}hyy-^epp3+ z7WL{AUr$V~)TJen6MuyMmQN%j+<5)e6&Y6{OC*JU25Uxux#Ma=jxC>YO}PK`2ey~} zCEWG{YwdmmiC8iVP~j47Foxg9SB3X~U|V;SA|o}(RbZUkFpww0HoG81o(>1>f;4_Q z9J`AhGGL7t4@x!PE;tMY2;~y-DBtc5-|T{x{_ikhSJ2_JeA4#1Y7KR0E)0gxd(tJP zA9-Fo4Jj$_pQP3R+Vps~m(uguBH9m)$UpM1Z>p-vYo|x?8i0dxDHO+n%m@xHt;vK* zxj|Bdte&uPSL-#9WU;+f&x00)R;K5g#=ij@K{qd-9|({^Il3S??%F?bjEqcYSC`cE_)CJ12YdcJ}`G zC{$scsl<1LKkts7b7%N+cN;o_V+_SMG`6~Ua}eHV`&Q;i;kC(I*nbqPix-8R_praz z;|7Xw1AVav%FbP(-<~$4|LlC?K?j8M)vB}1Y6CbSA6J%#gZIQ^bayy&Pup(b)%jNP zsbmLeU{~{CtK}yGdf6-V%t=b&^F3{R_j?FOtn>4MEjWj-4wLt?KfoQA>}7pMzGp&Z zf5%%umot(0mCV7&Afln3v=Jg+Mp8|DSg7CI_O&O&PxiKf8y&{$v1wGK3HODH;`=Ys zk(09@RUBt5#Y@9q_O=PlAHRtsMdtUB;hnv0c=tK)>o<1ykz`HtZ7IonM}=Yg*nqyT zVL#Nz|D&@vm?8I6_XgtU2%2!nKG+h=!rXmq-|>gR^HJ;ApbpSWU77?8PT3(kD}L01 z@L_+)v8}|0I!wPA89Z=bY?Z~~@O@zeOT+Aat-F00{<5!aT3eEr_qB;VpETb(j{ZPD zsgty-)-%%b&)H${{+3Kmedq3z1$pE=RHLChA<&cIn}fa8wd5sG92Td0J|W-7fc{dqolfr6i0eQMs$0H|hE3Da*!Q-;_G&Hn30HonK-urYK!nxgo9$~59D!jK=MaqknR{Masy zL)7Z}Zj*?~;xoc$KenH5awZA6QEC>Kiru*dF9`Bkxt~j@QS=9*_>8Dn&;59}F#9Lg ztIt_^PHP&GCl!uWb5CDXY|#CK!hJunQ8qiQrkNcSnhvz>(KL2H5CMHkXgd%cab8$> zp!F_Y6!r0mu`W-BXAZQ%(d>)D*9Y1rC_)<_WCt~?E(&nM*BUN7$fof4%LiFMVguhC zgsO9D*!W=Eby!ffw-;uil@tUMOf13C2HngKE5)xlUKyk=<15F^-rze{#R-|;$4>!f@tNXw84gns(8yNMIisyEs>mdsoP&I73)OKDsB&k%AtF_wp$Vm2si!IwkTe~t6;Us2JuhB zmp`?E_SdlCA@Ho3VaG#Y$oqs}9AbxbRV#(4(s$AxAJt2T*e^$}o9|WWgc)R)Y>?us z7GKSk4Y|U6es`#i>+Pc)D~88=J+T<^UT<37Y@sQ0w1CzdNt%kjuk< zW_@i%nDR5*xt|0@TH{t7%I|suuN$w|ogA+F8Me#U=Y?l!SzNOkdz%VU)%cn)<}lk8 z{i=GH?b*A-1mIq*n2VlVd~103Fq;~EvMg-+bDJ}GYH=#Ek0lbLbt8{gT%RE^qL+!@ z5%melPpx;8R!k$fEX0SysQwlPA8vaLoyX#%ITX8cOB2?AJNBi7KY_H(+$kvnc<_ZV z|8VQm^Rg(}Ko)=5u8Qvhmx?3RSk03eg zZ|;)uh*~b`r@AB$e1!Kp0p3R^C$^o~j24kz0(8;Q$*L>EX}^F>7Kb~3VFy;vcZe!& z0o?ZTe3>)&Qkkp{0H#k~wIeJhRJRJjOSvz^!jbc_h#{vvV+em${sy8JA1qdC@y}rR zY9nm)b`T8?WLD+UlyJ7yZ;mzfr?g4Do8TmmxAv1^z)9teukc8zlLUmO#6$X?RxA!k zfi!-a{k-yEBw8rQ${w5g$h{-RovIU`tP1x|v+-TYmP&gQy2>|&ic*?xqqW9Kak8$k=$J$5aXkK<*W!T=@#T$u!jJyPHl6q^X^CmNh>*1QG623nTP7%65aYrXOW{ZbzVSR@4f_(@0?^P`G+}hpRozj`eqQeK+KXH;x?K z>E%$EVS{>H3#f}18+haR?TY7JuZ68=VA!@j7ydZIHmx2C5)-P~w_Hzg9K_@Eo)+lD z{ez4~6rdLm(1Aeu)GR3^!{-E^^BYURBMd*^xSY~L%?A&J~Ht&jPa@rz0 zM;PtG>ET}kjLXA2zqWmfnQ_JStHMr4+lYn>QKXWUuZKS#ZN1B@UgvEDn|PEdFLUJV zo?P}g7vdw6*Io~|9&P=*wFjdP<>g-S0*3b1(U{V&goVGgZdF7D&=)#u)C=O*qaxeY z3RTNO4|Ri-hnS1~-LGkeF3LSEL7VcNR+G1MLxZXN_F(E5%zN2m(L@H}nmdRCa*`#> zwh<9~(pv$)-rn`lNMi+1c@5YrbkSrb`!uw?^@)-hj!Bs2(KIVl<4BdTU?T*nNouX} zk5#}?TsPNhyw)rKD%+^ifIy~o!=z|0@qm6zny>hL#pT+Ym80F^C}F^FtjCV9O-}9c z)Q~ah5z9>(12;?gXPdS5=Waz}uPCh42sj)_#ybEdDS|{2da0b@7*AWFLkJe;`2j)Yt6vrQz{^uuAhYx6reE&ihdCZlhBJ_=3j&JMtI^z( z@-WoB!`x$SSl7d1s`Vpy4+Y`JmZx4+QuehSjaK3iY&80&t`O#J>+s<@& zSJqraRJMELZ=z!O$4uL1N6x!~%xI0yl4>8s2?nWvVgorbPShe$8u0%?43I-A;p;FPLbAy3PYG5?#J4I(aIFf z!VGD69|U)<4erOYhyX$bY}J|JPIc%%Ejgz;FUqqAMIqoUYp`6)6kJ?YTARf_#xm8n zFilx{Equmj>RpS6u67F#o?^%LCrE62r95{@rpvK-PYZWB-y|G#s%=<(D-E)<((qNp zw(oVP)oWaL`Iy~!&GQPmv1tvY^t!Nx+RA$2vn)1JBYus;g3(A^^5u3! z{HC{8p!^rVY=}zjvZMhl1l`z(rCyG%G_ef}mws~FDtD5mfCW=p=~v3tcBfhYx(9VL z{NgmLv^GvhiD0GEO-;BoNn_Vol2cB-dnw0PY7b`c0w$sUQ@uVAeZsBBY{^j)6I{c>z zoU5-F+f&@YxxM6!BuEi=LfI4rJnQ9bQfYX(RBrOreuBg-u+v>#xtZBRUZ5`9Qh6t!uDOC$Q>xF3zK;?YVKi)`|+v5WashsAl@QrF?SacZ3%O3Fv0&=~O zT!^~Q`jF$EKBo- zXW4dqTyYjk<6~jfS=K#TaZ~vGEPQ@fgk5Lb8B;OEgbtc5O5o{Dt)z15SBc>@q^Xza zb+hu!7ruvDGNq+SlSS8f9yhA4mGkW034_kI!ClUK0>bx_50onFlbrWN_~F@P5%Kw_ zvu)FzNiV8nz5qLG1S+wLDwy8*Cv+DvagfVXspt7lUyTdTA7b$V&u=IdZpGwU_UM4h7hCHIp{=s^qu3>y6Z zo@4uWXOeI^A$dQBIRiIeU3^J+^BntGUmDBGQGOH?&<#8%^r%$9pU<%YgK=K6mhl-X zIT{^tok&kE7hzvha;;BAZ5Pb3VU_2UP!4hu4t3*z7&B=|CIi5eo^URGJ_j;CKlGSu z1NoRR*M@G7m4?w)W{C>(Ph87EY?gJs63pd@N0vo8w2JdZ^?E1YqjU51NqY`~j$b~q^5?qhD1b4-xH zB`9jMcu_&TALN#R_Zl=nFExZ>o1e(@<#Q=S_XY7n|Mgy_R(>M^o}~xbY&}rpJl!#YsBSgv^3N zC27>bpF_jN(B4YweOwquUyKRxK-lqO+Xm0nsTbRZKVHd0T9_?)B`zefDP&Tb^PIy? zKaQPhDV!^KDsyFyRZ_yC1Q+!;Nh0J*gD(LudqBTRiEu+1gbr+POQysjxD7nXQ&UTIidh?2)2!y<@}W*F=cofcoh9gV3V5*X`-ARQ$u zp2M7m?&s@4m_?L4|8)){;%J3aeIq}Se(j~vemgmqBq3lP$->ulqfZZqGG?0=2LmqJI_sCeM~3k{HpIZAinmVRu$ z4S)#WpKpWu10)a!1XzrRLQcODP4nVYh=p&$m`iP7-CZM+JFgAhKV%n1_{`hTwiKFuwk@ z2zWQ8Cuzsmg+s2gA&}8&R}opdvSu^H@i}4PRW@kUyi*MlVrkgYny?!;J;F1e6xpO{;@MTs+7@1`kN` z)J%(i9qziu26S^K7x{Hd9!%L>`0yI*UVU;ojRcD*`E1?SS3l0dp;GH2rjluEK6&_K z={~h)us6+z*;4QXVxj@(XKLuWtc=-4kTzwmjMcA|I$k4!mCsKshZFvaZLHxTS5er~ zvA2&AWdN2;8e29vC{BH?_riSQb4c}ub%XU7Cd@%E6_*!%7K)u%bn%e*3nX}B@etIp zWScPjS{u-`Lz5Z3Ww*Txw9n&lX;5 zyKF3(f)(Qj!EzmDA;l}z6&VJ5QCxRfw>>0`SzuFoyzo2(1Ot|^@`wsYF~*04Qy0J; zuLz$kur0?w`-+(V*i@|Nl6urNwWAH z&5DqauJbkAc7shWE&ezk|4GF%*a#CEZnS-D(QQAu5jD6x3f9x8ew3Yi?8&O{!%9c5ks-W3VYw6i*^KwMf0XG-$BRAUfu! zyk?ZmP;HP((}bK?f^Ertk4eHUWMHFHEI^hTFN;_Pd2BU3#rY}RHllje2OT6Eqt&AI@cvZ>jLlSwqAWQ zHZtEF|1-REvyG{LM#M5T47kNM-%?|mkYlrE zGBCax)o4<6^ZY_F#%GBe&gDz|g3<$BhcC3^^eA`XKw0OOrQ6QA#qh1&68ha{BZzrV zy^YO^4`a18kd;*A4Rde9VqJZHc;q%4xWSoC#qT>KkX{Jko!J!D@?7E+-4- zd~O*Yy2EbX?0oYedf7CAq$R#SUzDCCgkxB|)UW5_le8Z%`x)O9Zn)F>M9fJ>)c)*9+Uok3&13<-#6U9PngXfgJd>E^3 zSGR;c?y`*{oOb_v7vaN4!aaA{{7D41am>x;uP>qy7<$wRD_y>)9czq3O@w{j(0%<& zFX~)F$hy`KaLm8kx;5P-X9Yh0nc?ocLC~4u)w>BqV9*b|$G$h@7Pk)C2PKH6f98+;WeNX}JZz9e5AGVleNcd+f*2qxXc}7Td!2IEcTQtHNj}7ID!|662E?C{LvLTBI!gJfC<$z%XD4#FIw1Ti5(21T)4!x;^TuQXyl7R_j^gTxikFu zUYp3Ti|-{HdQo`cUQ%Z64F9>8rCSvG-)B8WEy|0tV!^eF!zr^HcN2oS635)COJ2;$ za>b_P7>h;W;QQ!xQMl$ltMpoZKKB_LyYCg2V0hYx4{g4BpIu0!>iz5jTNKW_-^O*K zt=fQQ?6bWnJbS-Q9RDG@+_Z`#dkgvjci_#y2%z1WcY_<-O2RQ}mD?r-T|@Esu-j75 zXvuBicVu3Xhro;5jyx)9TbSRjufE$3;rXRDaP)grHDDR?#Y@d?8A1EOw;BcQcJ#pzj&|cNmA1q&@GwyY1(eL`iSr+@{>6@6-1`8j z(cF0d0hmyFgH3`wEiBHdNB>eRzEz)w4;JFtkY%Lo@Cqs3Gm_dKw}xani(T8}hG#I{ z<2D~K$pOqBH?GOos+f!$d24WT%Emn(C){t7d|!AlX|T~m5vF#*=^g3D_Qhf0gEnv@ zA_b1zOCkWTc(;f>KOxs&FI%8c4z*Ci7Z2L_>eHNnnsou2T}HZ>{E+yV+7zJUVLqk# zY%bN(U6g*!`A4cP@(fIfKHPcR2ClpOVr;Gl(-l>Tq`#(}n%wx1&x9O4rhNF@L*VVx zVfjP06Iq+Rmf7U3*#DFoqz&7%=%@DD{wS4?ku$HsGorkL486)>#{{{mQxB+E$_o~R z3zpf?;=S<2I$p_?L_u} z^?SsIO#HJI2a2#*r+BzWE3mPsAKX}xJ zRb%Fd84Q%MeEt(*0rFh{s!RTKRB}7}bC_WvS#_SXfO4H@1mG&Z@FR_p9lq2Ds<~GH zE~zRSmbBS4o+ziGORwbaH4IW&0E_iS3qf{xRe5uIcZD5ga_zC&6LKF59MPEE2o$j` zaw9|pcbn(=iUpDGK`tl_x8N^6B&7Q?g&z5?)d45yQWRG~uCrKha7p-a@x!PYD(O_I z)NNsd_+Ga~IC?p$F^`1B%WXoH2&O~|2vVWx=aVhBZ>dYJB)H58?90Ql z$C>Q%@Wtacwi`ElY=<$KY>CYxl|m`+TmIcP-t1Fc!#-eKPt;&drzrd5L^;^?`lXsl zd{w1LHmp`AH!NBjF8{l28nrD8&$0cp+rlS2b*aowC#4He`)1X>q4NrB9h==r-taPq z`DDqL-V$VGa;0R|#RcU&rMO$*Za8QK@rPAQ9ofMvmWW*wP}72Wq}zd?I(_ zQ5o)2H(=ep#CFPVkEAQP(3~5q{RHi1Yj$}MCG*4U3<9mW@hRJ(MIx7SV3YEHl1%=| zQ`R?{e^>a!Q#Pi&;wrzjhZ{AxQlL)YJ^xCFYtlA9Jo1$7)@8{(`OFca871@Y4kMnn zkzmYzPuqlu)tURWooz3M!Oz$bK6ZJ=rjL5U9T%b%9lQ$XT0B9(t6^cGc+QO$^+}_> zOKyAP8PXzd+w@rmU7Z`viOz}6MiV?MIy3s;V~*MT4Crs~)1p(OQ=(b=a&kmnu_7IUeZjxa?KAt-KCyq>$M%t}wh!$Cd*9x(ckLZJ zC3@T5vN!DwZ}YmnX0O^S_Oh+2+DrDLy-1wXgsxB~XKmCyqtPUqvysAm@xPj7{_lsX{k}ZqZ%uC=#FmRms zwBALFR+qfw#@>EhR24YPsy@&SUa2(qr7n2}zdne4C6cBt8RA`{soOMNNmPliZfMy1 zdFx!B_j+fyM-S&VrJpD*C(i;~A?lKcG^Fr@=dEWn@AYue^WeaKVafAkW$zVUe4ahb z=S#~Fi>X^_+f-k(Y;4ye4fPK}3J`#b>tsMCeyt%nI(}vSvF61DUxT6G-$i?COOIqq zmM|GMHz+=Z3s+!8NJEvtfL*(S8Q)5RH80|8W4LLhbsPRsE`F5|KVq7YqXSS{Vf-5J zY)(qa>gx;f1>||~eE4Xk9oi@5WK@-ak+6)6LC#U$H#Hpd0?IlGcrRFGTb2s;^rJL# zQkQ)0ENeeZUcf0(S^P#*AK0p%9O`xLS>`{(XkX8fu#bDZG&l5p(faj#lw#a~CVsQ2 zWsajllLj*$nUmBAOg=cqQ6i_ULs@F zt<*60fRbL5w0Qv8+v_Kth zizDniX$*zZ@nP{Q8(e*_sdSvip`_}#)TXaVzjR_gCT$BWPY3C6>E%jmkx$e<`PTjM z?f1X&`vt#`r2riCd}I6luXSId(c!Shic~@2bhOA{{*{EEHnSEshjo?yW1;P3>p$fE zrqY+`owOr5?4}MOe}6+vgD=R7JaTZW1!NU~Xlb>F$= zlW^24wrzJ^!vJv~wdh<(`)PRi6`Q*KM@^-F>+uvzGCZmMfaX4KDt-LlCYsLj-%X{D z{ORyfUDR#2Pnt@r)5b!!Pn${~>X(mWuMI=6mx%YMBXE`E)Hyb(klN2LHnFVuc{sDZao(;=hw}Jb80_mrV#=88| zdqoY6OR5x=@($KaZ+yltNZl`ShAQ`<EFoKH?z0`oy{oc)Gv*zmTqpEcp;HxSKt)stT(IVI7eEP$F2(#gAUgIV=_ z;sT42DuiV!d}ZDXv#Xq;d9}XM@N~Rj2=e-b^mn3`LlYZr~A=9(_z0=bJS*0=ljWL7<<`xR<%di^wH(Ap+gpj*uarB$oySwUC| zK8H)*#M)?URuOzodR6r#-29Nvam``*o7T6u)GGb2LgqJ?`-hL;w9(aC2CJObP`xnn zM7x;qx$UF)Vc*!1>ex(ynNk1dB=!1hjRE-eqc zylulaJ{{2b1&0t&(!X>Za5uIeHMg@Z0q*4HaP`}E=%~l!)I)+aNHpb2kLnfelKv4N zEz)b26Whb#`|sF}4JZ3pmxWW`v7JVr+$`k+`6n*yQ*%6=SX#!j>C{u!A3xPtdMM=I zWs`N4EV5cWvx&_w(qm3`&~o=ve@*wV_WCjQJ`3w~67O(j3lum)bX{ zs*(JEDXu;8E_H=wHHX!_CSr#jPQvok zC&dXlk*%%^yS%GPG08(rqDY?}Q>|=Dr!*iXfy6_~%4SCnvGkOI7i|d?>u`)wK%R5M z!uM^5>gml64J|0zsn7HbS6?aOtV@mP^);+)fI8e^uccoK5Ht3FzkhXQ?>_$ui-=42 z`qz;pGxK_)7h-fSLESv=WF{?3!h#R1 z_wdCCZA?)F*#e`#lk$ z`)~5`InAX-*>wgXwE-8PhKv<~dZ8cC-q>GGbM*{9u95R5xgSmdbzEv~l*@$V80-k& zA*@b@rYqDv`C7Rvx$YDc=HX}t#@ZG+wtUl^j*0Bh)i*T3ou(qeS{l5Xxp;YF=~muT z2gsa1>0;RYW9w9PGOR6y(ADSfU_j+bfpm+2EUJl1H}e%*rV*u1h?2$Uf_qbH%zuaU z=x@h!UUr`NFGCY%+|>Rccq1V5d_#P0_5XalVZFz1%n&O@`gLy>Tk0ryfSMv-yjgHf z^*4VR+8ah#`*3c^`m3r#rzuBhMx+7#*Is=<|NmYW3Q(yE_c#A4Vsj(}uyJsV!`Dok z8u6%7yv&pA=5^tTe_OAHwB>@Z`rnkdxHho!Y{LWos^`*0xF+kOolvgMUN#Bgue`uq ziR3(gi!*q^U#By!Pj>CxBi!(b_2_+mGg&z6h9=YzX_JYl+f{C>+MknSp>(-_bzPNB z#$4stnz(eSf6c6|()`*l7hae6FQ?^;vm5PWyQp>{pPakS_;8JNp5H1@58HieT^l~| zYZr!tKD9pCk3WawK4tsc9A$YqE0Tnc|J+=F84E!2vCb~(^-8i1t3_WMs0r*k~-9AGHfR+#oS|h{^RO001sz{~+NYb}+ z?}#MHUwvk+8(-X9I?t!sktzB#VC)^(l8o&5tme|WVaaDUV9X_sPIG<0PU-&01>mnw z2pUoA8vV@)oj$kT4e3MYgwdbd@WTA&(%IohpW}$-+iV|#FVI>3_5U$;CU8;}*Z%LW z?%BF~hGt)erMp=K1w}>0or?ifT;mp#n3%*E1MxjI#^mK0yNx3fH9F{Mp>b&y1r3-{ zQApx4Ca8m3Mja93k}*LYcT6zi%K!VTd;8A9&FB5~!}Q(GueMXCPMtb+DyXoY%F0}3 zZ~ZvFN6k$x;a}U=K1KlgH)8q7ZH@U8b2qThsdt7*41RE| zq+=m9J%-AEl=Lk*r860lyUo5_Al!^BY$+vh;N0Xaa~}D2!CuGCp8gBTJ|-tPT}iu^ zl2{Z+DvHZI&2Xk97FVYWV`sBVx9+Stxv`o#U5CTa$`jn+=FBc<@{R{?YN4?9;bQSq|MtNw|XID5gALQKlUFL^pzVV=!mWXUC1 zNGH#eCYr>(lXdq2x{ei!b?lkTrSo;lLfuOISE^>G(s@db>Nqx+S$QtiVHV-1q8Puy zhj2ui8?;n+JWrj@Ou~IRoo_&q9IJCX@T}zY5fF0?TFWj_N_bb=sG77c$4oMb&Rfgb zBxF{=D!Cs`w+262EnLMU$6!%vrEU)8=1hS@gVDKC?7|4IgQl;^jZg*5RuwF2(l+#5 zy<7ic-7KE-8!=b)@DXAp@4DxZYGJz-)o?UIwPV7<*uCHY^`b#eoA>!7+mXl(lMa*A zmz>(}wfY9o_pwf@AgFEU(e7fbgbs55j3^`LX-w%a6yUYnoLKmU-p*W@OK@~S%wvU5 z!kxHScFY&?5y|DL%(-@-FPPA;a9{tg{q`5}vC~%|OWl{yWN*hb?kY9&b7AG&Fs&|6 z;e4w9vA+YN=u>G(xg#X`nX1+wBz$@Ga?Dq0*2QFG13)4;pwUdBGSZT2(5rvyAV|<3 zl3l9GUf+byNgvcp`~_J{W_}{aO)+<1X5`nOQ(vYjl|z(K{H~yyZS$A$@$qx)>MvOa zV>*7e-TY;IXw7e3<^0%Upd7QaFC5QOT?G0!jS0)4rY+2kot>j=NVWJGlb=}TOnbt% z_%4I5@h2H*{*Fr7yK0OXF@|=P#)tMbr~V8|kI-S>WHfKeoME5d7N61Bn^Z-15ILzq z4x-o_;=lVr{I{P;r&q}&?neFWN>`fy(mS7RycxY;oZjmN>$a}hl<+D?_9MLwcwlGV zPE*NyUN6*Z6auQ;+n#vARj--hH9pV}ui9ot1d7RNc5K|tY&=cG)TyKmt~ZXu{M!D3 zJu_~GA4^@hw0c#e%hahNblv9rj#+$G^Cx^gG>lpmtdDj zhw}N;car&?pQg8yH&v1&hLe>WIDO5>%>+(CoN0z$1CAj4Gb=GVWLuf`qmTm`;~3(( zXyIWxdUTh(6oNc!*6$A;AZW!u;jNNu28FMqZ)nio(;rfCR&~Yuo`x5-e3+z5=MuO1 z%uffR-P}Q{l5y~$ET}XbdmQ8za2GOG4MOZXARLseTi;VVp}Fb2-QDE=84x>>?Hrc- ze@>w@syCHrUj26*QXwS^IMSR-8v;hY&c3&kIYCC0xl=im>k>BO;Ipei_t3@#Smc=7 zdXKV9k1dWhJ+_QYH50ylhvZT%Rw;gz6Rz({W#A;2g;e&AL>-MeBRq|wzJ@+jD)-UPbD+o^{bZpb@ENJ=R1CPl8!+6 zW^an=M0>H7q|M2GIn|wXFivf@vj!Io@t6#;vCPR3kCAz=7vQ(W79o~Bb28z)zh$RP zHv7y!$xq95PmzC<`&@Ebj78sM<{OoltiI8dGAw+(@`x^>`xAA~n{0+f(;dv%u_x$3 z(zmR;Jn+Y@-3k48`-2_K9yNEn&VQWUa|g3y!M`~cGHNo0BO!k_=ua%GSJ})l_RC3T zSj|0-=&SanNoI6#bF}@#Br__wIm#}X#72Gpvm@<-Npwp8<_J4+lGy>bt-~Q5dblKw zUwuxDQghkWHa*FVj34Gkjj8v#l;#IH@+Fs^B{PRQDWxqsZ86LbjhRF2o)gXVQS9>5 zVjW7W9NgF|t=@{?GBJNj6V0gjzwK}M(E$V!-C9wPW#;Kd^AFw3)eXz<$;_Ne_89E% zV}_5Tt}?5!&|hxH7s&5%vN_;>$6I%-xPP@ESG5pr8#BDg90XK$4gEy3wM$tupKWU= zn9=pY8h~4?^6ah?%m@#stDDrX47KiGXcSk~`1`~vHAY%!Fj9H3kd@>5WV)7%J$vy4 zGj>wAD}a^XQ5nw_g+7*Do65}M25_zpwD*lSdnJFL${b*SI^OJCZB4u zC0R51)w+i3p4j7g!kPsze{dFz{oI>CuKDKhKc?z=s@@PNB&dGe;`URsFnfQB#rC8( zSsDyW9V#C>eG#RdD-Kc7o`u1Lg5+1-_I?8I5~@IVNY{<}g$rJ0f}?d3uk?i^QwP2N zfdEV5#dY@r-?!;|8e*M(!D$U}bTFp6{#yOAHg$hdBIMsxX0_MqgCR}uXjF*l2U8ig zGfE5c^)9DPh~7mScASam@EJP^V-~A3@}*w~*0#A?u0=VGL4NCD;tA=t2|> zExt<~y32{iE_i??XeJQo>uB|yZkzEVfMx%jLgnURCcBPG)h+}Yj2)T$)TpBw^)sbc z7)2TJm?A}OMWGRDd_a=+RxgfcAMuOBNal5Z8uM>Q(RGkq?5}eIJ62#}YNaZk{H+KY zpjcLmHt=vjDCA4*f?x)+OrKzrzfQl9F4Zq>+Y*a&kx{r*8+P$k~2%bB=RMa)XcB0g-m!C>d) zrwSKzX&p1{u0zel@Aqp~#sZ9_akZ-7R@7XbYA#ssV3AC%MY;XfA~WTl)++n0#V9Ae zAmzRDv8&CP{d}}(oYG0|J@%Y>iwM#D+2t%@Fr(CP-64d3uvwT+Ap|>Xj2TjF)zf!( z;h`du!vuo;KlzOOIX;VE7r$!6Eq;>{<5KlW4{O&i>mcib`fVfW30}vms$a!B59${$ z+e-c3(B$gZemusEox&Q9Cd}~QRPBbQL{qtC7ED#LeGP}3dT%`8u3xhUj5QNat!KrG zw?mxw5fj`6`3BlZe(SCWPS4e{y1u{_H#dad_BcDacZtscmL;9a=XD7t$vK|yR>&Nw z31z)}o(AxYd9fUx?E0~0zez)-ZP13LlgoQWr=U>G)BX7`)up8>mCB`pZrh+_SP;e%UGM#!dnWq>wQ5D4WEH6QE>X=5 zN>mA4D!FDiUMeK1ZiSMz7X&ILyC9#~7wFmuR0mO=`v=M$sD4ZZS| zW*>3(dO8Nc6pk*xr~1Z1F?tNKLdz$-8!rqRh^&%ct$X-T&qIwLu%jTBJ?w@7ZAQ%E zF2*3!FZ7ditqxCc{v~R@+kD3!Y6^e8fh9S-8vURT0NP>M&; zZF&)ocZ~c@K)>T{iXl4^+4bla#5|FgrgOHu4&j=sKbz@}GYh{!7QOSFxU9mfTh5s* zdb1Y-X+f8G9T3kDa82}5Pac<)uIB;qRYsW!d!?tv#=;YG>Xp26V$`AXC_tQ^L2srFL&4;b5c-WC#;y3eT=oh@P~s4K<^_-6r!yH#_F| zo=WH$86_VAHA^DsDTyGg)jRnCI-~(?BDg-xO#O)&CL6Z>BWqog3{W8{-)Z*i!x#*n zPURI6lfiMd>c?qbXduQsUGUdg97-j{b{rKKL>&WbSHN&-$H(l2zIRV5cYZre+4)Kq0W`rLtjfe`mFMoREB+Z2{&8idiTC>J5rh5DsQ=-u&ZuH zdMn=Xt)N=LCmSaFOe!;7uSR&SZ`%ikn8qYecCjxGHsjN{{LuU|oMddx5VIFM9ZBEsd49x^( z=gL_j;6F@5z6Zjb`kh>n-9%%bSUj_n2rw{+z!kjLr#tc#yFfg%qdt-j9(!ky$;T(#rw5v&i%}%CPCav}Yf~{Xyi@8p=+QdLi=L&!_y`Z7 ze31#tkz;PFIg)cQc)?$AS6w3Z7`gt6XPBGiBO!bbfE`q9&0~{H12VQPYbG)gv#)2( zxCU~hsZvl1J7}PpUes{TZg6EmCE!kzFBYJ(8&i2?HPV(`ND3K_8OUirKEly0;l&BF zxZr^zrd6E5$Ld*LAC2+Jy+1(`%Z%nO{HRf{ zP;3z6t_7(57t`h-c9uCQp5(~Bg-*{X45i+Z-mC?PPOcK(+f1@t88FJZL9irmMz)Rn zaaOD5xGIr%BNhn!B@5{J2fIV8u?wD{SON^_zS-6}guBs!%AKJIIkXxIo8$KEi>Z9Q zno?i!QIH2j9LfeGWrNh#{oDw}MxnWlc^yUVQg8znniZCiz$p`c%#x~{GR2yKQzn<1 z*UHU{51l($G14QGjsu#q*2gPT#n{Jp%DiI>FDqV|rRoA^ksiOy!Wie7IflOcS0>${ zsa$kuidYz^5olm#ywZBw@1F^n#I1hvYK(_3oT@4Nk{gs0-jbeAV6(ygB;W6O9$Co^ zq>$MsQ}wd4Rb+qw!fKEo+GN&i3Ctm67i7FTH+avYDN8(F`mo03vM(NKXV(U<^<5lt zaWE601XGunQ`$KeW7t%hOp+e;qno(dj<-m=KJ+yh17O3suA~J5lFxH0AtMu_8q>9g zAHp1Zvep6txrE9Y_Y&?mdS&_Zb{`*ZX2XqOz~yj2A(kFOC`wq)Y6;KSJ(vt$MUaM`~7IV z`%x|DkwyM@C&b3x39;zl`tBJ0r5>DpM49)8?^>j`MA#ncPEF2Xfih;@_~)d7niySN zb10+>0tKZ%xEW=SuEm%^cBpXQOS;KuA(Em{ZfBuo2BjX=dJF01TR^#s;1q`0SwGYs)7#&Spl zJ)CN3(*nuI>&4n^B!Vp|x0_G6w_Ka}w#ms1>Oc~Z)Zu5~7oT6VdepE89a`#YRA ziYo#R1Q(+SbBwps>SgrQWXYY}3x^iIy(e-ebh3vq}a3URARo<$qU)P zqZPVRNnG~Mfs>P1Plxn8 zRjY4GWd`$v`c-Gt?I62LwHbe?Q=py20i{l(^24>X1%5yHEBTWPZOma(qn3Ni3Fc6F}Z4XQ;oyy(?vQ4+V4xCO|{{ z`Hv;=|KK94(9$7j4gCvi#(CR@invjUEI*VV4yUVWgXRG#hlsjtUge*IOXt8yKxt@*Tm<=LIrlC%LeFO ze@~F7!-)5=A>oI5x&9tIW4bvj{(@aT-At>0xvrqNPY&c|``UDKj#>VUJ#kko0MFYc zyP6T^{Dl4OuEv|uvt3@BJV-Rhxv|R=3#P?r99m5wArt8;j(@A1osoUj=61se;0b%w zZe~dB7gY)z6-(NOtEz_BwnA0?ENHP#PXfrttr!gSnA5#_;sk&pK#6ju-dRVUeTwUDbC>^D8%_;;CV=90$Smn9DB zAg*3ZWK}$F$hX%;2nS=|+s*7yG#*BST!Ks`*?aAha{*oaoRW)I_|_>5T)B34X_?T% z$|(qF6v}%cp^TB&T!L7R)M4*$*h8e03RC*f5SB!jA1kExYiy#&liQc_pVXmKv~Y?8=+$~|9ww3Xd4 zeC6U*#Jpcl^6Ii@7o`mu5;n}Nyu`wWs#qeCh{H2%ieXnw0s^Aff60NTfxbo&%(~2v7gh71~9*C2Wx73A&PtM9dl+d+?RoZz)@YGwo zUP^xfLxb1qE^{#*l&KGbPnT6bE%kib)cez>AFg&YbqZOz=>ErmLJX&l#0YQeKZuoz zKdZO7a=}ag3CKYjy}c(2HAfk?86w0d%GR8ml>Vz0M@y(#pYRWFEeZh2jd zBsr<4qg^uI;>YcIdzrn*u3R5b&yd$}CY|fj<%PyZ{6vU4tiZ3r)9<{gcZBEF($hsSo zp%^b?49b7A*?mlY{3iF5KFXNF{%8fewLjg*9B0~Yw@>e5 zZsgqM|Js*vXRUp0Uvp5VT~kmheKX-ix4%3k-n|%5% zpTNRqlYL@;Gc~@+Zrz`WVp{;TMZfVm`^4H&mYG;f2$3r6L*LU&k%kc5Yvqe?`PHde z{9^WQGhWOeqDhY#6xD+t0T2CPd?O`VTsW!^9z)iQnjITpuR6dCEN*kR(l2sx9oX6P zVRL)%A@8OnPV=SH`-$bfK3Uf1lQaBJHuFhS+z$yGq}je+P+qa3WW?1Xv}JSLPCU?@ zGHgpCeTQ+U=;}pw7pWANuD3THXoe2l6jwpjfL(E7DvnBDx$o{{?LQ7QI}Q6N*s>pt zp0X%#uCkpl%jAo^bN5*eYK>+8oiMX2F4Jiu`BQz(dp6b+gRQ#WgkQbV`Y> zBr%9{gJ1ne@4)x zn3|G>q$_G#8!6)6hkr=AL5;YV-s}Fgx=h?|_RQA@UH){CTgRt_&Dz;cpKV5+bfbIj zCqvLz!>E~VBzw6yf=8ORb2d^2Xr*n0;?nR`$^9dLankRX|ou{P3zS&yW(#J!!j0G5)#zM6b6jC z>^6JFSIne?|Jp$&K=arN>lZ%AgBC`ZSZJuPaUrgg+0(UKmd8PQs5gUM{SX%*dG#DK zG=D17bhHMPwG`cpkj_=81XWZCN&pl7MM=ASju~fNBWmxTYknz> zgHz>M-TSfq#yqnVaW^iSXU-jQFh!t8OW6&!lSusI@Y8s(nLy;>SqGaR9@76zaLIjX zbY~M(I!`o8{|xXRaqV|(nbrhP#bxv(x&6rYYNc2!r?&&)6LgHRJc)IV9R7BKn3eK5>wNPJ6-fjvhH2 z&&AU{pMUX;{p=7kzBmy8iMWuig~BURYlRNWc|1*w)*x?hKI`W#?5c$3%r+;3gkAq| zcN_z2W~l^+viuU%9*PcUA)~ig{xxAIbyp@%= z0Z>x4bOk!Y6?XJ|s%QCgcIJGulezCX`~CT*aAGsZi*W!ZiB$PqOq^txllgNukLXS6 zLeS%gD#pj=>-YQYm53JwcjOU=FFGo@@HnZ>*K2Lpd~2SJ~2GW-h^cA3MzK znY>|;8DZmxQ_BM-9Ly}*vFLUnF7eqeRG2?u87xM~Ny8p$8;&p|^F#4P!IG}W2j|Cl@qCJ2nj(CXv-b_o z4X_6vfm_6|-ucZnvw+CN#}>VYyh3YlP{)!hqCbLmy*oz9SbM=+%1o!at%5NWdN1Po8$&25 zXmiylS^MCT7={MemyR?$PV=AP=fx^(T$X$q4MP=b1ijqx92R$lQipPYz2hjHABN%g zbHY((US_!eMk9y+>Qr9&etx5=xyFUc6l_7EFLhEml_R@^;E_u)9ujiEVLCrZd@x9i z==)R>-&gJJxY-0pI;88v$-YoewUcU`^8Q+(bt3xk|!lj@ct1FQwW z6hj7L0df}V5v%eA*MPYZs|tnO7<63KLEQe?o42F1CmHO0IC;x$MqQ zo=YfmulqV3g}3==Gov`3oDrK9R>7x%c=IeNl19EEkT`09S5-0JAki_J2aKOXT=n9RNAcvB zmtmhPRSVZ?{f#Rbh+sf6r9Vlrk#B;;HsSN!FpkVaN)J06R^$`TBGc;LFnm#r^cC@4 zflj0@6yyIB#eZ^5W9i2$x-+=wNvcxpfosvAQCP5cvC`k@9#dO1a&GwH{24s|EHX1@ zJ_o)@PSnEhY-QET?!r~M@iu>q8J8&J8tg&GnEjBRrDM#nVnK~@@OeQ)W(THYbjx_I z(#pyHt<1}G&hf>`Bn>}dD|Zr4D`YYLRm~$~>D<6MxwIBE#ZJo1S9EeT1Alqn*!YfHdD`_i#yhuvT7WC*4@;V(@`uw<*MHQ*{1GBLdU zp%W#*jgkz(%k3V=nIp`K=k0~ZnHgry^Y)L&nbG4PH0e_`DGBt5e{FC>dl92l(Vf&A z_ZsY{$1%-sUTH@kPl&hc?EK@I>9oISe{wvow@&w`YwqB+abXencY{atOW}8mHpxH(ZX#Ub3{NlCe?yuulrf0?z z=^~skmc4GjP8xG{)|UCsg3`Jd4;JV9jpPvoi+!`W%aubClZ?|7Of z@ZQ!j8bf>~+Z2%o5T(i9LP0yt>!@Dt6LU2lnI~D^(Xceg z2vQQ4V_uby?^5^~4Lto@W;nlV7JbY7 zC|=~imlR4HE$P$`tqjP&22Tvmf+>K*fRW)cA2+l7^IoWx8V_T9B4*+Qy8a`*sTx!K z7lZ2)xlBIhyC~Ioi(1(>z#H;67%P3LG$KEMxDY?cH+WrdJI4i`k~-dd@6{#0WvM_c zQSG%qDj{6&T@*i)ueYAZ$E9~{%gJWq05a+hcFd?nC|moK z-7EOjD7DPMoINJQTVJ)0e$UL9a?#&>xd>28ppzeti;3@ z$V#B@ojj-D+8gc5dvc?_^;9!qxVj2VL=a_FP~3H(7#+9kR5R@4#Wns>;+qw*f*u|7 zNIjQ8({1!4*!wdPCqYj^PF=QvrZ}0458Ao-CKnagI0m@6joQokHQ1P+V|n-do%Vp z)65jYqQ8HdnVEd^03Pi4L-W<$uelE+l8$O)!cU}D4%hbC1cx0c(RQl5Aq!w-4n)<| zpXIF2?eBhQCXV`q(|4&Od{8yd(-pkO1yhape`t=5KWJwyFr#+Vh)FGFA9jm+s8Jj_ zz#;B2Uq17yqVW99HZ4G{X}0$)V88TJ_N4`89IMTrEif${1kt?Ej2-zDd7JD4S!Z8h zd#taPcEz*L+s77~oy~Ra_Tz=P0&)x!onT601xMd7-UJq;s`LnqlCw)vfR6o<`7Xia z*8Ir)0SneyrNktb{HYp0u`@q^cVd^%hn|HGOQ|84egC&(XphS@<<^=D@o zHte00F4SF%H*!tm-iXOrDnEP=zj|D3$RKUUZ+_TO6R2xG(VmijDUeBCuCdN;-AD_*p@;@U<=B1l$?kA@4#Lt-> z&vUkUeMh6k=eYSs!mDNOKt||&-ZMBdkRJvnI*hn)z5l>#<(DdF9TuKq0he%cZm*H| z;@x)1Ps}b2=N4o~6$zn*AF)sW#Qadj*!vvw-Kxd+8$$Ay&oLv1G$&Z%N$=Oo$lLmc zed-*u|D1JiAU@oVIyL&;$wExlTW3AXwkOlO#MFWe^C(8sVgnE=pRcaCNOFbO-coC| zo3o>qv8XJ8?dnL4_0~_#4w-$V*aTnN(LaOfp0RiR%JuI@aJ`Nt35A~U%``}Bd`LB3Jkmj}Ff?kquI8v=wy5stW|-OM zlX(VQ2Fd5`bLX1lYaU`V3-)U}{TJARm)JvpVJ5||uxI{)3H+7us@e1?ji?(?ShW@3 zogv7Yo367<f;Gk-h z2-S=|tI6!*_0$N$5`~|*U(7nN@MQz`qB_N1dKm0M)uot=g>D_N_xC1q(r)YVBvrtc zgtDO76B0G)t*2KQ@{y3o3v&=nnsORz66sIvnHSPWpS5>hXm&`wkwgg=YrJXyb|K8P z=ITY}%%KkwO-(9Pm7r%kF3H|v7cDYB$<+C$eq&8-zTVbcWG0SGty(m@qx|qMt1fUy z!q#O^R;lZddD5VW7UGreYV)}2OEXMcB*88Id0 z5k#zBT^MT+A@v69Tt@a65&jN3J;s-7>KTQ4yZIuMuZ7XrGK%N>$i?OxC^2&Rra|4d9H}YB1c9sbX zvhT=z8RQjZl&cAH{m~Qluog92(DXQyRpF-dtJ3L6Lna<>tA|!TYv@ANnks;+rE@1Z zNbM;5^x^jzAUuP@5oX9=3+CkrY>JiaZ~oOi_L5ZQ<{naJrP9Dy@lu6Z6 zd-|p3=cCwarGbKKN`;dkH>TIw_^;W=R%!MDhmqAoPKeBkSvMh4L|n(gSL!>* zN%yS#rBtbGIz)?8;i=U4SJm`2*`spthrXKzrxu(TO~7L?F;4P-QgfYmk_Bwu*aR?9 z<;hgOnw>YaOxa+AxHEWRiDn&A815eA5aq% zCkps#WmCLCzo0u!NlaGe7py#&D)z>^p=bix)0qT=-2m@ChN$wf-QzOzAoaQBGS&r` z+L4!=F;gz(5L|MFlrh=QP5P=ho=>FZBo+n3=C3-D$p7}`X5v5wX6jXWt@8F}V)Kf< z>T+}V=+#x}-KA^9v#37)1dIvNd35b9?e@#d&5nlO9h=R#F$bsbQ4&Iw0Y>v3a_+qt z1B~f&vpHvAxPXU)jzoL2eXp4epK1p!G1E{DlwD}33l@r=u}3a3!zGQd9JB0>0?KH= z!Jf0k?3s3pfU<5Sn(dk;=9oNdfySH2UIY|x2G^Nvuol>4Gb{Ud)N3TyPFI-2XTHjG z&#m}KIKgqUU^rAIj4-S&wq@wj};es-n#<1TL}v#+}yM{Jo<`-}5k?_WUC z-cCN0{fFCOgaz91qJ6yuU9{V#uRFgG9+28fCE(g#9bas2|zGLl_vKxQLEZkQHgYO))6>Uw}gnOlSs znVn?K{v7IdiZx&1=XPtRjDOF~l~ierzSZ7TLKQIhsr=!+{m7c5rcj_pzd)n;Bu98e z&c`tULu;oKPik|c@m2n>rA#W`v42>KCiA}Cv=m>WgYCd;h{x1or(VO(%yPRu<{EP% zJ!RE3rr24I z(Qu5REQSog+cOrA8w3;wF{xO3`vR_L6g6iwug>GJ9~-AlpQN;aiRjAgD>8DBwla}t zqglSzK6{X>j_$+gszOUZo(HRb^_;M z&%4<^$E+EhLGL%RVBGutzy~TH(7XMdB4TubZbjwy{+0s~@!}Ay)?!FoI)zIswE%O^ zK}qKn7?wD|*}y5{|0j;qnK)6|*4|*oBoPuBJLLvemFt`qgtVEGAjFHL_VgT^#QcL& zu&@yO4$+ESWjj*FJ*A51hT3|7S{Fx^Q{=AEaE5cZFzGpfv7HzvV0}yuqAs*n91Y)blwrp{uLRtcp&q7NdXhj|DIn zk||#g>#_Q%byjRSXY)m!=3E}iUIoBje4`orHR~3;B);4?9WjNBWuc1%_;40MJSum7 zBw5}-g5)4yY7;yX@+h_}iaq;hjnY^YHxDM6tIKBQkz3JhozZdg;Ivgb(H(43-@09Hq573>xsBDfqNV;mAMg64r9VaEDqS-P`KlHt@qI+@$8c( z&yP9>tqs%B4YzHpIaA|c%pH+An}^w7R@wW;Rpsr5o6Oi+I;3oN@7m9~8+)b9e4?ZW zJdlRxfz`fJPuY9l&b----eZF^y6YRlyrTl?N*#9&jhUQ#=2^4}?7{brPn@#|q`$fu z3koUUeY5e#yq-*tBBQE;q0XlcNkeXtM%mYs_L(cpuryO4*hAQ_ui5n$7QhF8l1zWg z86Dif&crG^$DX{*oH~>jgDGGI!ohrEUs`5H4&ar>bUgz5OPjdW{K#-3@|m}qNu##0 zq`-O9IURP%|MXbRB{>B*@Y|2bp2kxg46yUf80*L z-CUwvJ#f1jH}pLkgk1SeDqX~6o2u-Gx0{=$mEGcqJe{yf)5;Qs%C75&n(koNSxG%I z>XV6w?l8a6K=aMtnsbhztVYEo|8ifWEZBmyf}B`LvqA9TVB`-vCkKOj=a-TkG~>O{ zPMP9?y-6*KkwsoEc*Nyany=;@Cha7(Oi%*nqeHRwza>(8#Y%H+e7>Ew3Mb!fw!F#= zt-8p)_`@o*4>rP&R+)o`edt_iQgH@F=W$U&+y zms(DhvlmINROPqQDzt$aCUb6~Zh4R&9q*oH#>Ec@vq;XP!>h|z*AKYz@pndPV+w54i;Yl_8>vyvtNcX{DJT+Hc@3^(nd9>qL{YM+tQA>zH zA$8RmcY{x`&nZg#j9k8Z;CQaCPgNzS6=8la$Km^@tJ(ym;T%ucr9(?9Qvr^xgRkKU?1UiAcX4><@x! zch5L>m2|8_N@14G(w&#A#yHGx>uPgI{4)FLYU8O_?|&~lr!KQUx!3GG`hllhm#X#~ zSy0T##QCx!K6Eeibl6w#HBEH~>yeZD3-2?#?e+oAGvtLm5DC;T6fD=riO8Ys%l}>Z zbp0Dc7=4m(vVXbHoRIe0N>hr1?XGLg#N?8y^zZD~*O*CD(2cU6^e9v_kZ2jT2+ok` z5xM*%|F#^rH?3g;fm~i=c4Ho$T+6=jdnN@k^(xi@o$24Zy4{4&@@ad>S^{(p0Ano- z+T};Z?=q$k zv+-WY`aeXZvvYrM_A25NfJ+j>6J=4s<}%K^BjeT~C5x%AU@%W>1C%ova#|o=j7)wr zKav8*SdwQbbB<;iZ!6jn6~gmjxuMzTlFGKzNXX*qIJQf<>qsqf#=PSF*c2sX6SF9A z+WCY@r7H-Ksf~mShic|nOJmGP=NiNe85MUc+rp3o-axPX4!O^sp*%I@vWmRe>jSD) zK0-tI!PYl|&(~2E&aX}sQa5mxkwa5G6S^#uD!10t3n2&1%|s7$t~V|f2c?sZ(6eMD z3UVXm&-aD!ZL_ZVvMp*j^`${n%1dt>^q}Cu03H;dc&qZnEkg2L(C$8A(oaM!iCeGZ z5Q;}bvTH~~Q-)J33XR_84qbjuy^WTNhEB^&4Xv=z>%dJ#&t&yuMH*i=YMKmF@8C@? z(k5&an8ict`>=YcDrr@^>N(J@RqrmHG1RZ0%2=hs{8o(UPoUI4$C9MW)fn%Vy9~GP zBiEc9X^>r7#X5kZGicu8%*$!EspaZrLUZ`zysIGdQ^<*UoKm2oVW}MCxp7(s;4&zV z7$@DQIRB|M5rxUi7VQyaZb6}-wDSE+Q>c_C?_E!}f{%jI6jYkKDUDnM{p#_`Y%_P6 z2aZSdVKtCDBhudxfMjRhB}Et#%;*S;;{R6zkM~{;8+d{;JDvufpavfAJwmE_=GVh& znnU#|>$d9DO)q+7ibs9QS)|$g*MRkFZ|~wtYXFaMQ&qcit@h9Ab@(fKeX|`v?;44$ zkU_=mYJ>_&`^Sh&No0n7rWOt)0XNl65zJDNUhajIN!R0?xV%OVbO~pC z6tNn~NvxUqI6a=r>?QJcD~v=|)92I`B+*WOv4=inX3g{^caNCv5#1Gm?aOuLrBf?S{C4qc|MU>C z&#%I#j0anIAbu;kqv1{ZrK}n1AGck`@K8Mg`GM?4KV$5iQ3+>AXQme1%7qJ3!c<_f z0$!vPh9yzL(xjmQ{Zw*B*0B<6|IP&fso?u??Dx;XGI&qM$(5YdP-{v61&~Kg9Im2X zkYG-Ym$;KAHEzjP->`CQ|IlW}6<q~q2V)!fVTM{wqDfGh$kiY_DJ9nRzJ+~!{?KI(lZo^Z36p3L`0k#x+O$h=S1N%KIc&> zL}`OJNd?N%XyOwj6ZyC_P9X4)2LI;|nvp;H0w;$554KY`=))0VM<4~qG~#}M+<}jz zk0|rmjGpjs5~xztoo~~P#$a6;0WoYwd!^L6JIWZjC~rvai)%#?==?j zkC`C<)4ux`~@Tuy{Xe}M6a z8wUD3kog)30dk<@D^Z+yBy~JcMzmNVyUG90kfphAP7?=z$Z{hV`*IwY)Xw`Vpv*co z>bOv~y#_DjiJzPbfksM3NVkR+7s|l^_Mb9gcYc%w)a?h$-eV<2(y}XcpgLA#IC-ST zL!t+@sWy#ymk~(9{V$g^Cl;qu>xo?BUU0Yz*oJLaGJ|TyJu6QOQGq8$iV_9MQ z;bUgZtR-=Rh&Zc}Y>BH`=Hxp!WyG(B8%=thkv*P1+?g{0KNZ7Te8DO--d|SPM;|i> z)t}1V54Q6MkA}6I73m8fM+9d%unD8``gXHV6`}{y^weC?s%|L%*p6LqMx^iS zDX;a`o5rK*T+UdCQIYORlC#;dZ-{{m3{R4-^4&!Xz7Ra@1L`Li^PcDhyJ|h=qb2r* z^=8aCObfVNyXFxgE#SBe?$q>riQV;aGmNpX=Wa{}lF4!~Z<8_i>yKk7*=j%BV20J* zROL+A*-PwQkDJ}&U)t9n$NG1(O+8^Q$Jz1PCs>wTX4{@H!|OIA6hube(_K%PG4WaU z%O}j(d93B48?&4UXW~z*;vMA|{+qr?z+N(f;Wm!_x$ir;hcRh^TZ5iwzxt#(XV$Yx z7b!;*dM8}?#h@bVyr=0PD2F$?z3GI`VN57+P=&1M&I%{5Ts!b7Gdu}j#cbQ{so|Wh zXT7J)+%f)C+8dY`&+0W|!KaF)e{XMj%Iq4iwa-6g3K?QntC!2{^S(_yZ6;4*{f?a% zgnxIY6t-^C4{1N?g*2SAK90b}|LCX9h#9r+E&0XTFA)REyGb)k|6^K7MKWi*&E%*{-VN3wnHC~+>mr*;4P_3Z ztnodI1lk*y;WPoQ4d^LmOCqjFktJ9mpWMad3=_lqE|de08hFM^u1`kEJ!Tn2&NE@( zlW*-%y;R<+f-?!^h@hGIEYu37Byvz-G%9+#zy3vfLZMF63;p-+i(GR=mouN72~;og zz!hg;OdA>cG{~S1Gr71X=rCU0T;C!L;Jh<^xT)DyRe0Huuj!1N=r7LB>>7YZK=?T& zi(Lrf9=BlVwgb^6{fP;>psKQ-`bwhWkOVV8u_IO(R)_CoE?0D+*b1`SV98UwUS*Q` zkQ}&jFewf@G_}Ta1)}F0=l0@ns?b>t6d&USmd<(xHb#ExP^+$mTD&LVXto{5w#=4L zxl?fDVtoyUZYD+Sk=M^o&K9bDC>$XnI>e;hfY_5FT~#L!VJ9Qev+5Hz{tT{PtyQew zj(o<(cXz3sfDSu{M~Y7;XR}lNn0lMrT^8R3Ky zTw!Pfjp#uJ7|8wXggK1WA&%plynLFz-UEeo~Wz_-I$R3J0PtDA=&X1w9^&eRGWx=CRm{KHWm zlzE^xi14vRXa(upWHJ;Qe(c2puDu!s&YZ_ zbCC2iobn@a7wbI2wo-wreMKBs1=nVOhp6IL>!Iqw?jfDMD!bN+pd_W>`#Nv9qvf)i zf39EpHOnqb8i{1Zw>|zVkXYqkZ1wkYJbE<%(35j}Co^)`-Xw!*bvJ zL8OLYpb7Hgr)^^-lcq4R@(e~)ex%UxGg_t6MXht6A}KvbIkjCcm?8V#sHJkGrSE}L zO&Mz_WjtGE(aGIt0Xn=Px7k~vKx56`Za2I@P@n$>&bwjhswp#B+oM~8^JR@Di zbvr>3TxoJu%uSHNvZeWtCit#~Dh47|KBWBkF_b}-la_8BL;pnZN7L3LAtryL4cv>C!S91YBfBvi4qrqP#cPJkGSp5=H&wK5aFPZ3kPBedlG@#@v~D=(X=u?(L$TIegh)TcM-9d zzif6Kz9cT8BQx9PoP{*or98@TJGW#Vg1S_ zTs#C8n{mB&A~WGWo6drdQ_rWmVTc=P3Uo?;E2glJCJA^z@>>%xcFRezAg>Jbd8P+6 zlD*^=vtuHG$Kcvm%zm|uVJsKYT%W&U)(ri0Faui+qceXfU5$2nd}`ZYHG8v>$o$P* z_#eKw?r-jk4S(Z&gZm#cL`d?MIcJ3QSlHcbeq+EP`dO59p&9f}D{8TH`m5+M;sSgM z+F}dYCpha6^i`i0XCXFmEbz8&)1c%~76fl8X>4J^&7H7a(=#LsT&=|?r5h>$N_Sxp zgl}Hp7~{m9cl{IgkuGysv3YfML4!9C?u1XGft`p5OnOU*Xt(XgxOYvS7n^Yr&Av6H z5cj^kAx=yd9+CU*6ZyUK4KlGwSF8^0X}V6Nlg33YUkCtlbid8(>9}530OEYt=y=HY!zpb;}hPRyu`;9f*KY91kVG3geZ^@LdI~!^eX4dDHw{4Pic@fU;eb58cYu zx)7rc3{M5ce~cO~W3=*f)b?V%E0@P?#jxQGJ^U6q5 z2vUj$DMe;v5Ik}`7=M2Wj4itIdF1%*c|`JW^M)uU!Mxrr(uY>jG@C+@t_Tpm>Wah| z0*{Dti-w5K5Tm09qu6_d=!gUviXai`XRlG3bs=hgMLa2YVkagjB$`S~awK{4$X<-gou6Jm5lV{}De zQ2x;{iAXnHLPk16kdA1OjtG#L$2mOhqI^aJ*18a*EgGY(2cy_anHUR`i1a~$tPVk1 zqd{7GKzd<}gGWU9(Z?{_vJj&jjZuES7*(w~m_(#kz5+-~2+|x4(j1wQJUk-G>o2D; zO(909AI7jiIV<%A>8+aq;`Fl3$M)ll<#}Fh?u;tIV~>(*SAPP9AwpC{QOqWaY)8NE zhj|a&DW=_v3PDQIAf-Ma6$~i1 z9s|a^E6LIpUHRk1G5s1m&^w=_#f#f%z>s!})Rwv06oPa`gLDaGI}DVejiP)(qP{c4 z=-3{k=oljsgc@lV=__iQbsAT`S7#o&{rdh|wBi6#GnVS|dT2w5<^7 z6Mq9_SqM@NLHb~nBQc;{D$1@KsnwPcqxpx?AkC2=kS-Q!lNhZj1Sv&hl=@;sb+^r5 z?Z+9{j|YD9vr%nIlHFhB?X|awFLdQkUHe1$%+(c%AvJZQNJ|3g)Rp7Vj%bjMND!E- z-DTt^FxG__ZP6HQeK2}=x3waDb2%WZLy*>Jkk&pRmF@;}tq|qs!dMn!l%p}q!q~pM zF*8~!()-zzY+6E)=4g=S$c!*ES}e-7*Mrd%VwASWaNVsG3Bt^1>(PMR_HSBxi>`d( zadbZx353TpQ9Q!Ts9TgDybi{u5Th%^=-b`8B0-oLZ4~L3oq%+PARQq{pYGNXiNVaM zU6fa7QnN0^Xe&m8v_*n&*wk8)zITIoBm`-V#%PViU{bR}l>fX=JaV+ubbo+}1}R5^ zFsWH8kc-s5En!BQqcNHzF__dWK3Zz(hfdiHK}yjerAQDaHCvA&BcEMJMz-k6=aHkL zc|@Ldea8lspIJ?}NN;QdWK#&z6%Eq0JqWZ+YBq}UUSV{G7#-0V9U(>^GYzwvc9E|A zR7?_rv_*rog&@66JxprWit+*}y{kiv)@Y2@Vk8K&niV3w^HM;Tg&^fI%BBnXq5 zc9Gg&1F|m6NLw^UTOQ=htR8m?Q*gjRtA$3lcSMm-|!REYoVaFJX^qb*Ym4 zr_3rXx^m-obAJe5t~W*L?duK(-zZ$osPFY|)j^9fwD9M{)C0 zz1gGEvhRb^E!u}$#2z6^S2RjjB*+JVY!vA&8Yw$Nkd9s;#a`+Eg?#CG)i+M$`()-i}Y?;tC~WPQZz^@667PfbZFNU#%A=1#*(loOl4_kHN=GzGM<0|5+inG$9ip^GqqIh5B{1%IB5& z(Y*3R6t8>%(@k*GLj%bjM{|M4PewE)NoW`4#xKMdAx7Kw7|sgN76}52 zt`+GYRhrcyNbB|>GP<=!Vqi&FA(DAea)Ciu7@H+m;ZdIRxor z1!#`Mz>=_7loxc9k){x%RE!2GMS@^T*eWlSkHlzObmjBNA<;atK8i&@*^tRQhA(nSvdvMB`V z3PJktbyp+?9c-g0TbF^+8Dexyj0WlG3lcR1wDqUFz)fKK685y|TBZ3fxj(Gdl|O&! z4-w2?A~7_fTp`jwT?5Fnun6U7ka8pl?Xgspw+N#p#AuGjXzqg%4gp$s5$Oh*J)1(1 zQZz`Z4@gCSLwawW2gajXso0_`pE2fD7^6>{ZhkCs2ta&yi}W=afi{I8UC|(20@<#+ zNx=~17w<|$gcu#$WBBVXksxqayGTEF_Vo~?ZF>;6?h=WC^j<5+-G zxwmwNARW;l9g!f&Q9LDyB;I>E*48dzf`j`g))gef0bVgbuF)#$La2S$`%X|zOg3Hk$ z|My0i|1{7fCE`3PHM}LAoMA@NU^C$~UB;cZL`p(HI?lF)IFgd6-0`%axIJ zAxK*^NLyc!Kp`o>Bci;{A-Q`nFy1J^mR*(G=(6g2oSz1MPf{XM-Jlcztr`%=*s7jgF+tZY@M1o9#M?`w5B-*+V zq%ArlZIKu|!Xu)5O#1)ogL2b?Drt=dY3&OVr81ZMQ#OwWzucEF;83h4OO<-3+O$Pi zPGxTH4-u@vL}JKlvRI^lcNPy_xkfETgOnmcNPg>VDDTlow?$VzW6Ta2qj#Hb{!?$h z2vuf8XSYaK$yl)|1nG(f>FNVgQJGP@H;VEinWQ^IjE-oG4q^OXYcTyuHx|Hei%cD6 zT&pzg?WDe1SN;^HKSVHviNtVI7?HL<49GHFxwVpvRxw5k*;FD+++IWR%AC}o*S%^}O&Pq8Ngf?C((rqO`S{z7GJAIm? zQJSMsDzO5hOcZMeh7aw&K z7p3WokN%VaTl6LE84^~A^2LkD_p&hG%R4W_1WQH!n1EVBpyp_x<|rT? zny^@ue_jkmQ;1QD#wZb>O8vIjXA4)5m#qhavr0Hybmeo#fzh0CU_}3iuv>&H#iE-+ zh^`2TBA<0dVRUGYE7EHP(iwtuM1b&BM-&Ft+U^J!k)w4XL|ZS2-iyF(Q5bHiU!?a4 zWOWGA+6$!Av$3u<3PaLEgv;c4u`Glr0}-_dR*u5hA|4UxuLRN(f;30xqd5u#8`okH zp6~pV9fT7=rD%*&6h`UwYd@yjZ#@8<_q8m(MOQwH91zVS2Sl)lEM+1rzMuvAO(8~C zG)7kxhMH!hC?9f*{2@k1G)6}hMiGp5QGPBv?79%6EgGXO3IiM0S`l^&Vs!}78V%9f z2cj~EVr*C;%1hPjmW3GQXpC|nj6fQ7EE0=|^gSm=LXhTYkY<5wH;2ONw^)=nZKiFT zLX1*0Mky*IU&_|Eb$>t>31o||d6OHGeAgCwy7sY^e`j zz@1`={doE4Ghzu{x$$=Me%rBx3Ii73x;GFPuLNR?u6&-@JDMlbgArAW9sLRKDS+P5hpuNj*{%d{KA-Hb)0L~mw*CkK4@5yw z{l&GSeEA(NSBKeejmBt=!XWV#4njR^SqM>%hA96(#@+=!s^aV)-*aYmv&jZHK!9-H zT@ZrY5dqOw4l3gP($-t6)p}_g^!3*E?c1WeVuXknR*eqcSB(-CG-x!ah$}=52)bxg zRMe=kMk^X>R8)}v_d93zunA-TzmF|D=bU-I&&)H=Jo7xy%sJ@}p_fQ{qNMx}U(2ZR zF;ZrXRCf#x1O~I3gtzM#<$Q>w86xRJ6dr5lraq6^-OEL`lO<0fW|$RXMmL3EGZ?6l z@C7>eZ9YV+8KQND$wV+tA?0oQu)2?tHDhE=&7grG;dgYOntX`N-VoZO&X_Q`p-)P+ zmAc_$)bEW!7p&d{!R>q!UP1M$^&!#)5QPzS+JwRFd{S1k88tpessN)PpiY?}xS3DF zm1zu0l@F051V8N4Evc6@VQ@2lIxu$fs9h&Zo^DJx>&A40Zg4A~gq=Fik%Pbz*=ojU zHDNH#LCS};Zurf}njx|#2pIlm65dQLZ%X(W88b%4gn_rhR*`U%K6mUx)SDsdO%Qk| ztPX?;_j&Fq)cP1{Ge+8k!3c$f-}4ksjSrDBL!?X)3A_?kP09|wjalVmB+VE}69(Q0 z+c6Cgos1GXS@Lvanprod73xObMZr0Mc2fR}`*&?VMyna4wF^dWLBKJ9EhJpVc&){U z$eJOt9z>$+$B=LepqZ3c>SO6XM#hYhF*O5+09KLkA^i@e4^eN1NYtA!a0Z}`luv8# z)5l1gG14Xo906EL!sqns*FHq58$=@a6@`=u11A8gNqHAlw93awcEiYjh`|KWhUjm{ z{=nGI?Z(eC+SY^Cbsz?tvQfx7_BA@dI?)d`98BO zEqRQDoi&4GjUZTNn@PGs8;?AQoiSr%j2KuWSCR4~TJ%JN4^nRisW*Wzg;z()*X~ED z*2hSjG15j1bY^LSq{|3WoN;1`KL8cmXWHB>fqMi74Whosvn))v1ZSu;k~h=C(b&7{0KL69aNBx452 z7(ozxts}|gE1)A&fYD5;cCzH@$P}}VOfhZgFWwhQLed*~B(cp0 zX*Gki0_3x@Zr@Z~JPtZS%I~=BwD=g=y)bfH`bLlmP!f{9#5_Th50cpn#M{v~VoZXL zkTS{6H24_xd5mr;!g?bJ-r=qz>0Ui(7MBuayEY|$LsDjplo5kD5mF{TpoOmTL6T;WqzQyk z(T<4#*~l=hlO<0_CYp6*qCrOz*HB4Fx{QHZn-9`z25B{cTtgipaioL1wF_LDCWOoc5|K5a(D-!Tp#@4QJJVad~xab_JEXV4MKp`DZ~sb_60 z{f`D|HG{O8K)BDfg`^9(xzge{Bx}aVcEK?1`DMBjJ~IO7nJ#pDc1~B3;X7QS8d&m< zp>{{`408R?KqTr&x#VVaq}FeK+KiDlVPHI$lJH$hpvH$tnITf$A@t5Em{*f>7d5QP z$4Htnl3g%NQtTMpO%Fcd&S}S3gBqaG?PKw799!T{k?5;pL>ON|eaGDD=gLukX#Bc`O>d>zoLe2kkl;2G|y0K_7?sGTf%8c|`^h>E;MAfcxWU)Sk~i|B_a6CQ<6+0>ZbQ%U17$lYZ{`MHn~%|I zz(B3mE)b^qlkHBpjR)njUFdSn=gHJ&a{QDT(k7O)2r}IvJl)9{F_MWWhMu%{(p_ut zdr)sisW+qW2yz{17x5!xwLVJPjFR4i0vA8OL6J-{)w-0#yY-)J@?lbDnA9GaLX;#l zv6{5+5T(jTNt#ejLW=WeU}zae0p``Ufazq((~nVm>j$27j4D(Q)7Z9lC+wtcZ0$mq z8{7KFpN1T_kY~qND7CQUS%&T)Im=)|N$@ynGf7wSE%qkA3z_a9E3Ox)mGMCe{u~(o z4jVLtr0+9iZSXaK}D?SjazO(8-dg4*QtZ zVV?qZ@b~ecneC+ffZs`J^D$b@7_EgE`B?(3+(N=6({3$3MAi(E)ey*|b$K_BYC*~+ z+$n1EF*0V1jHwxVSA>+WF+M!z<7{LQYTBEf{Zlp zBXo=`(2)G-z5tMRl0K?;MSPIfkwz_RHDSC6j4hnm5*q-rl%x-E z^49nuDKkjQ1ab=~t4Vn$v#M1-M$(LtEWp^~AA)iR4c#YkqQ0dv?)!Y2JLn-7sOL16x8Oc;>C zDpJ-l_1EBI)SED1LQD|oNgWA)U<6R>L!`SvoaXjh`WX0t2UelI z_Wx2{APUzvK)l5-yn}!x9Y6`UAzsN2({ay@_j0v%!5V0N?*L0|}fS6cTN7?$2X(MFX z1X)uEnZm`oAD}e>3|>uMu!LQ`k%ILZB)c-eH^e;2nmBYu3nhz-HCv&`mv*gJ+YLs)-B%K8K`{L(;^db6BC^aq(teNUQRK9|jJ~sXJ{fd4eCdm;NX4taX?{ zN-c#Pvbb2A*Z_WwGnQkBmkY2=VJap)XcI1IS(yU?8D&^{ClUR?wI zYGcV8hM{|gVagt5Z5?VFhC&WmTwJ$RIcH!Ax#1d!rOC(46kzUw%$Oh>3L)!paqm`j zF(4CZLe~0_X(MFX1X)uEnbMHC8P$@PG-0nGgDRgvvMYmrd4unBVAQTYyiD}#`uD%J z5Icq#otzu^I7A;db28pi?8#u%6Dpr z^bTx~UB!}?X41p#Wk8?CI+2@I1G97*?}wH_V_N)AP}b%hk+$; z7zP=KVUTGUG>4ph&f>!Fg6{zhV*g*g4jh_%4jChdjEO@-A&2@x4(a?b5Oz5k)cOq4 z1q=$zXWGP}rjSDl7j;`z@@$yTuZdaZVs^%@#a?bAs`bQuco92 z`jQ@Kl=MK8qzfUlxbWw!@A43K2Xh8ZK7&kG28q1SW8%Pmmv6Q26>$f1oTPw)ebf*+6<{C`{Avja?vd)A}vy13WAj>SFGy?!piU?M=KslH2f z9E;B-FzQY9xwfaf5HPyXYkS(SpI_V2`5I4L`E@;o%XRti7lW*G7uA$fGbdZsfN0O$ zx}Nj|rcU^i=*O>-V%hy~GV17Wl2J#0E#Iy(x?Vd#-RtKZAQM3p{!f?cdt{U~)z|({ z7Xn{K8NYsBMqZM~ZRoGnDleycTt1$k(Rn%5^@p6c!jVYWwJdu6Pk&Fb_Db@2oVt1| zH6E9oJA{k2w{o7T?+y|8RrnHi6-!!olQ|ZCG@0;H5hf0u@LPSu*MW4 z%tS#OOWy40XPh1V^0Ol^EYxoSX0Lm1133ewEUu77N>ySJ`${heK4!*5oc&7Pt3>%o=K~X?^TA7PXeN_SM6pk{6hwm=+HO`Hd!)^iXF!%x+OkrmtbB8wwdD>T%@$*psgLa@Fky*V%qzF!-B<}4=j1}q0e6PK_`Lw7^Kuv z$RUdhUr6~m-Avr)R&qZ095Q=zK&6a{L4#(Hk7DX^mCEP&Ij55rlAy%Bf^)jo=a4pX zNSip+6m}tn3tvcS;BzCPy3aIlctIzleGW+@hosNpzs>26-ljR-(OV0+>zw|PbGo&A z{oKlIBETyU*)G-p=zA|&Q+>TMcOmfSbjGjWZB94z?lPzAafw|9_hKv$Pw72@-jJ8K z6!-RYX|JW&gYLEzd$75s7#F@W`Aac@J8Ll1RV-g4AGhgxs1S*~ioO!PD)qq2@^#Iqhm*Ad@DUo6wT zzBl3-69N6zF4gx~@p@Bzj(EBYfj{DDzkYti(a{=DXn6~sDij;1pq?TW*7lbUu$L$lu}1OSLR|lcv|tOd5|>V5%mb^)mW0Ch?v7^iVour9FXV1b(gA1R7KWTb`_LW~?&amLknV!Zu(=$J3^0Gqx z7C`8tZtVNYQo+#3Pa%ICkycl?3Rf^XOF@mz=ba%-?8lh2HtKaOWqjtFpfbF z!x$u53OQtP;mgQ(Y>BJ0!c9JhjFCge#G#>(K|L;>$m?kulOdru?1}sQ*O;5NK8LiC zL)yflrjSFbunV<$D@E8_u@7G5<0n0Q{4s?t-ha}>ptH1a6ma3os4mB#y%Y@Y;ri6Z zk~a#a#!)EkG71Ba>p|sjDddpF#WU}#`oANP`{pWOHu;ztBW9*6rU%(j2w9H{BshEj zA6Dx2CjnXOL#B<8X%l2kA!G^{HTj|RGkJvlT$>!9L9#0YKaewV=!_If8W+B#y;L4D zc@c1ULGRwPL&oEvKK!TX zd(2+@TMdPn^|9AzSjICen9$%go128U>N; zE(pq@v$#Ogi4I)(joy+MbusGI?xLt!@(K$yCpZ4Tl118>AnakV8E#)@)U`UnYi*(M?Sofzm$Ee+!pV#U@WM<>A&=G9yLf|{kt$zKybCYufTf%yD^A2?FaCv3P8!sccc_h`GyezV@Y>0Uo4dlLa=-=%ti>`nEx z?7I-`k-cC4XJk)dXhlt-v`6;5{W3z8Di(Hmf21ZSt-VC=u`r1~2x2{fJ5ZXvJko;#Qj<9P5}_l_@m?> z25#r=o2qGnSn`C86Wj(1B=U;Cm#h;c)gs9fJ0CbV^Y)Y6JZSQ;7QvyO56TfX_HcC>a#?y2XKPW&Ak83!4S3&oiRdZeipic zl%B8&oev1>czZGT4r_hrbRqN}{Y(EWb`42&vs1**pxJD7HE%aQLt*>a$wF-ZJaN*8 zE=UUR`oTId5Kv!UCc=i)aEE0w!X1_tZC4}wo_-mldwtIcx0(o|NON|nzGpein(EUA zXSxvh%VEZ^pPyMd?>6U(G+6$ypyb=&I^Mo^4P2;NmOLYzwxW9Ob~nNhBR@o8Fv2w? z)?0ijlzdBB&D(c!hE=iT&4L{G9+y^ooE~(-fc+OxYP)a|kh#)we*K9z-^PfalgGvJ z9fQ3I{9KEF4LYq!#{-o{l8Q8!8)-{dLmG$XVP~0Oy}xj1XzNsv=|e}8fSNa96}Y*X zvv_14G-?9n`TXMlc537ezD#7^81VN6e6@yUgLVbF>8{qrf{%&hwnYLn1CT~TC@$R} zS!OyS`A(ox4Y*ePuGi}et*ABF<RULPo*j?%|kBX>t zu2-jBFD~d84B*sX)QSet8aIR=1S`#I>-FM4)-&qWC1O8ot`aFRX<~Yu(@+)<942SE zCB2YWkqNg1X$|Thw9$FC%(V_59CQPb7)-SDfcis9%ovtxDZ;6p+usR9ZRf&4%*HsC zBS91i;k~qGwJIgX^?zN&WT_QFqr3irwUc>I*!C`RFDKm6>M?zG&uzXLP`>s+AQ0j3_iK%@l1VN;#I?J53MU3;Urb^2lG zla?ulik{OaI|FfRd_c|&aAn6;MIbOO0Qwl(XhljjlJlYZ-A&?A>qAvqBg*l!PmNe$ zcigEStPvyd+xSY2SZ;++ia|6Lc3LgCMU0%>VIKiT`pynpXXenLDiN25^|0KeMY&bj zUtlzklCz?LiPnqiEd)Muj*JVo&$$aj9utsLq@QKsrDJDK+{S3=Cy*>f+PWbaSz%cM z6R*M!leu#R{&54&r|OqVoNTqLTa*|!thx=mJJ4rz2mp}xG%clzjxOn=Xpca&~Tg_N1qPpLnCiZJCn;ke+&a%<_3cEB~1ih`RJ{tsfQ^?B%QB=oWM3MPZSmH11;`r`pj&Kgwu-J z5EYjI1L8RHF7ZdZdZT*$E^(xNN3+^}mniQ`b+NiNXy3a<$|-D6g$uF`cZ*XG0rkPX;!w76pZml*yX|H5`F&!n^}Xs}D-Ig+J?uyYX4JN@9Zm!< zAAz?`1M}kHk(i*H)c@3q5!T`A##%9ZM8U|qi+jdGRFz`q>#}%>yCF~+53O(xSKrl& znMK>M_J^Gd)r|YaPQP& zcE4=1oy*;ASawQuIiWthUqlbA_q4B<*1k}*BwFm&dbjKVEOj6nban>gA-B3@PBe7b zB|Y?1-W7}%VGbVjfS7IVREY<~=^T*v9}vGU)dLa@b5Z+A9kEOdvyM`KS|q0Zd@0+*|*p=Lv?%L5IIzCg%5Cbvu?MKKtntJX2TJiAqZQ zt2%Mc%wz}_(TZA_CbNZuIo$)k@JPD|V}I^pT}@h0mSjj>_n;VWV-Qw9 zC=NfpIY0mO6a^Iz0o#A6#AK%>w4}7J!~44hs0(Zjr`}s;!6D9 zvK)QJ<@w9SdF*@3a&Z|J;}chi{d;wK)RrD8XP3HVg_w+0sCk7L7x8ra!nh3suzQ6# zZRTZh9GVD3G0|bX+^^rII$X04+RtJlhE+hgh=8#!2O>oQcbK!YEK-aMtOPebB4RzS z3&ARR65zeHkBEJprJn38bl9_qJ0B6VrdIVEMC)qL0{Cv>UYi$i&TzsQpr5q6a0<%i za17DLiyjqI5*zb2?ywjZ2&~j-F?@*--04?>{Mmw^CoL{~_H67Xaj38?l-aY~hpq(< zQw&)9<3Z;sq0Om_^(_qj2b8<>RZdy=T2u@=UzT~#w=O^pS!zezJFW#PAD}_DyPZee z^umOZ1_o|5XGtG{?SyHTG@Cu+g!;P7{W5S=4~rH8HK4!t?9EHG4Vi|;Bmnoz8XSpR zkr@HdT4V$+aGbcRpf#H1AQvr31j!dw-LI~;+VcCd*SL<1Bx z?%j0w)xo(KE9oL&l(3QUA`%p7#RGsQflna!NG1-4Ffo^IRIUMVn6b!OT>WA}F)IqY zRv8bE4+P@H?uRheCGKwPVt3$C0ETa2RiZI6T5^6gR2d5ac+mOUcj3|zgyD=HPUtA@ zHRqZWg-fSz&=iM34&u;I=Wk?Rsy)BLW<<12o%y){gE(#IUv)LF>%v{`se}#tk9BUYdZR(at$Wpu1~ImeuPz8M zIL^)wYX2w1%8?&WKszpsanc06k&w|a`kGx5_64a*o)puqzp2?zihc0&rzgc9hl5Un z4tZrx1Lv=U^2CfLmN%;}pA>iZK_#IpaeQF@>YLTwjbe!Puv*0rWP6!G>ihM`Lz+4bg6O?^4(d zsI+T48P&N)j49s`8bpS35J}#Znod?-v=+U4O)X!GL494ly;eM8 zeWj|`i7{4(dTgE8A3bkhCr0;1NE(TZ@%?WIFWMvyKK47T#K-1h8yQFQve0R5wm4c9 z_7-ds<=19hwg@giM5VPw9oq~ZL3MGn7*!sE3}CpUVvMMOdXB8bKgcq?tsZTLvlCRWG>aj9 zundgEd>$hLv7R<%7F0W%u{HYhj0WdmfJ$P;Sd5|} zZ>&OEbD~9IGhphVSF8ic7u12&X3P%FN6@M&UKUfVBK6ys#Q_)S z)fjfThweKJ29`T_Y9%3~Py}=U!>A{^g;u~ycWVWo7qRK#+17lJPO5aagkbcFXbvK5 zVl;x*^@gVuEmGD-F);FF8QN;Qavp5JJ{!g4Q^0FToRKN}i3S9F({8dsLFc?^uu_|U zPtK(=2C-PWw1H<&;~X$pv^*23rwfDu^hY*|Snm(FGSs*z0-1>02t)%DtcslaIv=5;cLV9{4mEa@sKVx^TDeIK@9`D9U#?0tD;?^+O;FIU zZh1wtBBuE874g6JRYmHwSH-y#zCuIP7 zuZpy_R$Y(n0&AUmG%F6m8`%sOve20P={_tj6GNV-)7j1x#}J~ z9|xNOFPn}M?E9>Fa3^Kt0o!84Sz#aKJjZkjOvyoL)Q9S;&0_xfJos;T+@T+%6D&n(`P|O7 zUi`nVRT;-Ed~j(8AG)pj?p##T>qV!x=vo07_`1hJ{6A$)XmCbI5&6clB-St8s4bfK zNHoObiDVASOWS(EwWMjDW}i~P8unJ>kaGgP_gEjz_O*Fz0!P3HLRmLDqI-uUG`Zg4 z-8uHpayRN5#~=zrNr$yjn~h(d%O>gMi0$s_ir5<;8)}HSDL(j!9&@1?@T5pK#{h?L zA5-(+6r+z@y*?l5FkMAA4Sqtv*%op$-jfidgDD;t&}!js@ooyJ5o8BH8b62zros|M zKCT+9B0LUOjtd0l#ZaXAU?z-)17X757B1-L$1)XD+$` zD+6CjP1_#?Lg{jQjR1@5zV;Uayif?LHIiDyDI0y@_ljLgHLO_4e0 zAr36n(~!F!mRmZ{y?%)W^RufjdWOP0INeH=axZS*7h2In7 z?56c<+IwOduRnNC3_^nWhxfz*!54JR8SjguhCLHPCJBufuEp$K-oMkLfZuk{`=V?} zqty8l%lQtzdCs$g6NcuZ#^(3M)ImEqc8D|s5ts%V3+a3h3DNZ){(+cjeW_0S02+&C zRDB?(gj;g+Lao7FxMZJxAV%4(n^mt?cuvT^w2I-d(Z6dIPYi7KCl_ZA2D{Co_G1rV z-w(wB)_Qf$hvI}D&xRs8am^g#cC{9_kQgod2ubvRso5WiN_2e1N8(89S+(OM_%f^2 zfREuE1=TM;7NZAgcWh|R9rKvL!qK2LUjDK8yKQx>PBY*(ZHC62ZZQk!BKvz{Dy2RSTv^ld$ z-h71ym0z*~u7ovj#pSbS%;zICB&;rP7XxK@Sv0I}Zx?4-QtfJoN-k|RILOcY8IeeR#LxowgP4vg`Jg`k12Osy_ZQ>jIiXye`OEF;b0whb}T~4$A z1U^(7=Y1%vuloE>@)ER;JS+y5(ZiuI1V{wuf!Z>yKT5`VqZJmH2vY`4jbe4lzp*Juf2zc*SZ<>6| zc>>RHeI^{GdE22@yVPyl#ZSoK-})ahee5Ergr$As@qsB+j`4vBuI(k(Axk(%aCs?M z_$WXAN5tXM4EtIP?)eiRcw1f0q9S$p*L>7i`85W#v>N83!aka7#tb!iUdaIUK&Lpm zY{4zkxg35V)4uLf>~%BN4t*oeL0jg1BNh$5N~ay@DzeGZ{>$R<%qgs^i&T$qMOAbz z{Bl0@3_8|?Y4-7`hz!Be7~92g=)M(m(83+xidmS@2Ye?cJK6W4wR9H)(OyW0u2cW` zPQ<3IgSFr`krvHVcWF~2)86hQY28HJg*52EqK~;<7f9e5wfQ>$x2Qfl#6Gjp%dnRQ z9|=D?=;V7%Ps(YrbOxgW?URTha@STApVEf{;2u=3Mg89n@f*5>*&Q%IyHv*xG03hi zQl;OEeXU)M)4zwmhTDUGgf2oQF8xuQ6a1-$^JD9eh)lrHf`1NSPTE-#z|g@rRg-rj zo}R1zwo@Egn!y;+zCZ~!sEs?tt-;!6QdjO0e+#Z=vGJ2#;t1Qi`H6{gw`JYjIMJ3D zSR+P(0u6*;dP`A^^CX}*Ex0F&?45q5)(M$R{L8kj%jp+lX^x8(vv*rpBJ#mC%sXpIH_Rl{;>{&pC0|8fDVUZYF1jdQX@bc?0;{vjK#auPC zKUa;lfGtg1y8{p$`es#fv&f3t+|7n zx{ayhl*r@achb|6ZaHR5x=1GjaIK@9vZ$C{KHo{JD@tV5K&oC|_c2MR`><@7^XlM; z9H^#89M$=HVz^sA)w5M~M&uY|hlZ8P4|+ZT zfn%!DZUmfVD$+wv>idNiXW9^(erR8Xz18X+RLAy^BZA6uuX|qot%n@hr^Sn%0uJs4 zV)*L)^J;kyIndgsUhE;u2<2WitEU`ly`s+ODUT>e zz3_2SC))eCi|ND$u-EdDuKQe1S-#&xMesy~Jq!OOqQ!cRh1HAq)Dzr_(`&={#rtq$ zk3sZYgk>eY5JB$N7{~XL`+-qaFS$Q{p6(?l%_KjD9`}5K23g1%gwb!9nqol02x*2z zWF_P9B!P#;8`vSIR*iJzZ>?IDbmSzUt#su17~o;OA<7mtx3@e9KUejZ$Fl3eRRwx0FDXMo6?OBAC z@rY|5gN~}Vw9vf;6%As%!NwIMQOE(Lv_o7riY8i!hp4 z5OqvHS?(g069Oo98IjmI3ZlmELEdGn<*ed9Of*an4eV_{l&>8~rPmz+rZNNOx zPev2Vi_je#Qsfz9tXWo0m@}|qd5(r&3oyIG&I&Ael!fj;%@ZRwXyiBSJT#PIge*UY@a&E8o{1YtQMY#Ew0rIGxM8dvT#O>5bn+C`!eK7uP4-6R=E40#Cp?a6gBO-N0 zIg17(axQLI52{DYVGkZu>&xZP{Z@+UVulVTKi?MQT?sf{uh8CUqhBYr!2ulXa zaST|V9Vo{SMlgdh0R+N$t$_Te94l{jy$TM35r0;V8YB;Z(9RqrPaOCtv~+xcF*b~~ zfOuW*t`wo;FAtKVdgQKcMguFz*5SAREH zju`cBAp!gtH*smD8$2H&1NSRoid$Jh-9K0k=b#7<3fBafyVnNGUsy^xL*$r}>yW{8 z-(JtEhYXR);HSFSJVeH=a+$jTPLe#OZXYhsEo;Z>j?GKw87`+71tfynRaq2v_-S=Cd%aE}0des7 zI`kJ^*b+Fua*SAN&Bxm~%&qx(5b9c!_LavWOWGcl=Z#+mNaqC|<&`46%HYG9YhwnE z$3Y>f{d-KtFy@JLepLUA$<^_-MUj2{HriuEO3sGY0fzFj6EVaAXRSIlF83|v_p0Y} zDkHU`mc-?_$Xu=e@J_H{@nT#a-RqU2co7vK_yB$u1}I0>^ujPgUea@ zOLfsmIRS^p?j9*m?eh}kNr78lJceLhmFy$O9I5wSM|xYZlbmKuM7U`)7$x^bTPZe} zMdt9e8iP@NE1D%k6k8aPHCJgAXI5>jW-N1lSC$(kv3 z$rw4l?^iIe)H6_Mo9iTt)MI1hh$A-W(|^2Q>U@g|BJzV}hmb1Ks}XM3!KI{64e%l` zm6*e@fM6_+MJ^XPPf8Wl)UbW!BS^Pw+E=c#&Q>>!#oT^Ktr{z@va46BgU88)Q~RnN zm*WFaOX^re=dEnPr1hwJcf7n8sfNoZ z$cZ?HuO6Ks4>^FRF2FX+7=Mua2(GXMINVG@FolgRL_e@&ZX2d8_R8E^RM7F}g=*|X zIk9N>CQhb{)L9edXzLDj^+YhbQ#~?K{@S?<#}_ffB154P7=<%cpGopC=X!x9&2nGh zsSDh_LH%(ONM2LdPLd}g8}Y#;Id$UQ*u&w%=e!MfOBWW1+&U>;@i+KDQ3>w?&a}Ih zJ8QEi%VUroNllh_Lv1Eak%!{vuT$i>l608lkik9b;VE*eb-ZewA}9B~Da>2~XC{0s zcj5XVR)>-M$$jlBg*tvexUKc-y8Yyc#2SX1+IP!kyGVf)RFI?&5}=qV!MTI=fWnz# z>X@Slsa2ehrxPtFF5Hpy*evWPM(z1tra>Uv$$QS31-G7)2{_5Junw8+}NmPzu{Ooge@>aN%M<6`95Cjm0 zCWgRka6H@v<=}8P7?`VQ$ZH$kiPUIlG0u>J1@d#$ZSFXNv37*jl&SJ`tSqUiaxT>G z?WwXYvRuIJgr79cUap$=mq#U1$m6)d3(*Wc)OrpeB3(Y)UO2mKzH{~-M+o}D>B0kE zahr1zhXZ*EgmEu^sAgCw>Yyr-{k)W$u8+DFbeONBa28_50KnTg!T6~gr^$WeE3UAd zXK~C!Zw^p|O;{PcLt>Wu{R=o8t=^v|2iUuAQQu9I(cX_O^Xqd(an4Z{)8$Rp#cK6* zSzfZb0YXdyI%!jyVH zSlKOSqdNQ``Sj2=+-nB2-rA4TXNIgfpo5TcY+=|hIOUB!#n5q!W*zljK|U59&XUv*D8jM!FGR8CnwxMv94YrX?4LbyJ{zi4;A#zMb_Hn((5{U;Z8RvhV$Ax(=jz%gG>W5r> zD0P#%?+|&JwN=Fql|$|9<7(ESa#Yz|C{7Vhj|QSRZB-d7g;{P^|2Pz}z;a9W6igE9hTc=R!Rc@LVni=H+L*oHvAKf77rtR;L`HZh8EoQV!- zg8@c02nuvi4TlQT7`&P1z6fM*u46+wFm*dIy<#-+i_76K;}P=85vB9)ojE{<(N07)O8JV34vehqCq(#n?*z(EO zIv%yuPmqx|u6q~&xtI!oAes8L zaC6#DdEjEARc*!lMI9I^q(6sNM*Gc+_WYk%zbIO-+v-K+pwA0D>L5JVat5OSi26BS zGmn$YO(X^&fR7dLsa{+#EI9u`A?RVzEyvKrVGof=0N9fC0A!PkV-d;`2fp%+u;ww* z_m@kY-3a7MV1h7Q@EzvG!l+1lpwVa}LcoANsI5oI!GrT7ja9M_3_Q3n|5h69kCE+j zwA{CNcNh-<(?=b4w45*mqh`a&r}E-gT!K?f^I)hoW3}XH_}itb@o0JLslBzjVwEj* zoxjCHlpep;g?tGQyY`Hh#(2t*!iF^%i64ZqQFL(`4JmCj3@NM!Gu}A0;GxCf*7Q{m z9wP@Q%0U5l4Os%tR9fJTH167vVHFB+f3_$(7?V0T)tPAuM9Z~CMh9vG6dmME3(xw@ zgY}7GX2DwoiHp}LVfccPKA46`I?;*6uXOGbICdTF4I>7t=j;zm6e@7e@z7)C)9zDi znFP6$3ouj^>NyraNThf+=uSKhI(YfYJF$XYO+C$RcM@zEz6BC+ZdL~$Co85jd4ne0 zBE9P49W7cpeeOX-UI^k$v$xk>geIa@;aFJRdYs%p@f^LyVxVHGAcikR@|6|iIbsc zPU&zLqQYL4u#W2iR?s{oZEbgRGvReIHCOhw8qu8Ul@=Pr(T8XNZjEcyhxZ4Ituh!M9#B3bBru8FszGvSZe+8a(F^OY#1?}%?)ZV zDx~KTXM@wg7H|MyeZpub2P`isDnND%6bntm<5Fj-HHZ!mS|bsKMoaMC3cWAy+B4R^ zjL~Wc4DC)}0!r__kLR&qXwk8Fxo6*SOwn13 z8vjpnrK(n(Vh4bMmMn*W(Vl#BO5568g~o)OFVut+ zkxjZ!oqnPmKjka9&z_fp$tin)7(M2pD>MU1<2`ra4#F+1bnaEFPsD1oY7w2uttZN{ zx`wk;xs2lTAKng=_wObz`tT=f=p#;;{8yd}&PInt~a{aT(7+z7sv z>cd~lL(4YWTurd?5s8;lD}|eVyzzkF$ak!sn-CiF99hv=5pZf$>}1&&!r%X7r2RLl z#L4oM;P$MR<;n6mE3L+z0+)Z6I_eZT1JA2Ykq6_@PSYuJ((qkm9Nv%q0(MIroJJkp$i0;pJ#(tZ>kdb551}kJ}RfpmrRd zIP@GVk67U}@E~(s$80^^wHp70Q{|{&TDP_1RC$rLNS$?>93WeZBDbmer^!XbVb{D- z#TnSlZDxSXrQ zYR2zmI(UCObMx>0PTn@KiA4rHNcTC|qu#x{=*roBuo$AjyOa983XzF8FHWCm7i(wGcdG|s$svE`-E$Y-0Sttqkb`qSXCU?%bLK6#H>Pu$=6+A)wtF`nQa~?r4%rc zsbZi+gg^^`D5mdWF<3HEI!Wl7&^|xT)b1#3s)faP4AfU}6nEZo7`YPnG+mazQ7P@^+n zsV~ozqe`ggXcKpWhn*$IBDr|vS;+jZQsFgPM9S_LOc?C!H&Q7g?Z}J19_vt=w~E+0ZA#5n464 z>d5=jaO-pfR4m{i=lJEhNdGiIm$^t%9*pG5a;H|bd=X%|3$E0i*E_9Lz9-eM&XbG0 zEh^Nkr-nB7^NB59RKZ~@w`@D^Jh68KTrKxj_$KO-x{bmxKp|Q^JiHJ z{Sv>c9)J z!TX>(l0PfeKQEL+fV=cU`ODzqHd=&tFO(-tzlB9@l=SW@f=Famd2%Yoy7Jy{+duk+0O*7s2;lsIIw49#CN?TU#scY3o7s~_sf5RLc?6sGV#lW%=->S)%V2XCCqc1_K;ssTC ziJTE_-oS-Ejv2vxyoFaHsPwjb(D|_cIQ6X7ULt?VLxlFF$f-Z0Mqes_4chsa%0F1w zs}C;4)c?1N{6$WNq<--isVuy_^~PW2sinJ%B3nXsMDJE8_iqR-d!2x3hqXknt+djAVKqJ)NX5IOOpQR@UfQDOd3 z$)S(P&O>;Y#;BEA`GXTrv&!R0H{rlUH1by@tI_XSSb1?~bP!x#Tpb!ik_=}h;P%>l zPY3_ugfak-4}%0Pq=+Ra4uU8AT9-siF0Ryi)Kks+UpY3h>|eRDmpn;kdnd_y!D!n0 z99a~%@$QXxHmjFDM%IguXs__d{`p6UI0~p{=Z=wSVw@l&u|$moPp(0BIG=_p)>X(c zXvVriuscMz=Qw27l|{GbSStR@bDk6HmDqDotQY;5UTi2~Xn=Zo$HRJgAq+xf$F)9C_srKGeRjSaKJGqC4@U&YjdQC;u71e5Hyp=iIL$7Xw-CBecA2am z`5De4Ib3mSF)3ZFwut4u8;{bTvET;3r81YveM+y!+i3bke85?vwqFLODHXjO8<8n> z_~mkrwM1Qixg3nEhc1_2A)kL+LLLwI_1_7Ytko)%gnitlCM4ydBRXoiW^oKS$19zO zU>h*sH8=VsVRY{1q^uaW5Q31Axt4V~8WM1Bg`2<(3SvxbPuXhgl1Mq?eRb9f3GY$w z?#wQp?;PIvN)r2qb2bY9h*i*YEoQrKuhy%k-ln$QeK~A*72IM==${}CdQ|;t zft)nt{(`4y^CkFz3Y;!jk>Xgfx_N<|6K=6EW&%FR#|yBEHLB7p<%FL3#UuA|HjhP|XAwO!|M@WG%#UNqUb{kD3oN*;Lb9hQxH+=PZ)F>~Sq(^SXj!DB!I0x~`L zVtii+U2?ZJh|0-3SSqtUR z!Mk}L1p=Fijbl9Pk1IXQaMIQF3!!fKOvpkxHTcSFbO6L6oZZ`{MlZrzzgwNKNd6f7 zb^|BQ3DsEeg6hI*Ii~k!oT!&f6zjcn2`}-%YI%-q!J@2sUk%D9)PYw^eQy5Q#d37; zYwg)TceUK#tFz;3Y>Oy0c(EMbyP3ym@KFP-(onU4Q?HI%jM38w`>O{R%RXE=HB9z% zHsrI#avDxD(WX$c6zRBYpx{a!ehpkXY}+KR!3nBlSgp85&J8|!1-tdbH8MKs-Tbce z)^Oy1sH+ylg_Z3heB59mP9MOB_Fke|h5-=HB6Z}oa?pw2tpQg{&t=RO=`09GVqgn0 zL?fs+J<53mtE8Xa6pp-RBaGl@hM-gQ{!3sGP<;jiJZNjYSUq{I9G?hc@G;U@D76M) zNxUSNGmF}IjSSk46mtodPJCVjZ(!ifF}4G&pyi&~jX`kGomeSwP{367@{*T8^8`~S zImbkT`T;cEb4=V_8Yn@r^Ftg0fS5`WnLn(`r65N4u;3wZKvD#iKz$WYXOTCw>KFiD zox28OBnpm(82PejF(Y2A32>C+7EVt@+?(@sa6_V0aOCg#WgvJcA@?h`L#?|`?$f99 zOXBBtd382f{cxQ;Ie67qta8%za@1*W(j7x?gf1|~ot6s$q4O55^tU9?DjbyKFkyMn z=j-%A{#%KVLq--76k8aZ@(_ks6MIr`UN3(WymdQSOZBSh7R~Ca8u=@% zS8vzIxx)}o*b^=6!r=s~gF(dr;!cHKZ$-z!<{o^rd;`8}zgy�S^|@8Nq2>z2gU6 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%0Dp!M095+6F!3fdNv8(xdHQ*9-iG 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%0A4+|KNVGT6!&dC4R(Ry2-Qu1#?C9y3C)`9aY9W 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 z

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

@yK4MHDk6cb?vwQ8|)v`bZ*zW30wBUf{yJ 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≪ov&_)pNF%ls@L7A1aRD@1430gsgR05M? z4Wjwh+*O58eqxiH0yzo-G~7=@kqz6I4;{s~dAW$CP6aa9s`0j_VZ@e!a_jvKaht{ zS<^@SAql8!L%*y=ClZ8%Z3)_qq#zCy!DDXs0AVxyq*yIKhpOc#_Gds$BGzWQf*9RIT*CGO3W;4hbpEkg z736TIL!&SIbX3i*!Sacr3CV~>U-m^i+IuCYQqFfS<$USeogA2gj2kK81C%4j(W#II zGIdI#zo(-Q3VT1(2)nB$56$3M-GTaQAx*0(N}Hk-!+wIqIwng7P$B<3(OOmGx=}Re zzpS>~+s*7xahwBz&-WUg3Zj3&1d5`RR#7N#S%AGWgiz)XGti#URtN+4`?aI7&J^|F zq`xms#MRD0xQj}E&sP~`gwgiLXrlsPpdA(JOFW?R`aE^F{gv+MWq^+nE&2WNy&p&t zw(nq9@*pT9R+u^QX>}gLA-Z_GEmXgQ~hUTCc#ik+PtP1<8p!^r3rV zM$1}?5W!cin8U}dQDNhQV>BibgdK4F z)>*%SL0L}>uoVmhl*K{ZM(#lIQ)v+5rXU;<5P$(ui4EWhp;uuc*a;m#lQfO2*`Gr< zaCE%K*x2Y$&pnex7F=3!{`R0>WBVuS0duL_U(h*GWVz@8%UQw^w>B|NQ51n98Dq?hj*qt~RX~NPL<$K~w@s+SWAEHydMY1Abl~{+Xz*4C0Yv6xboBpW>^;Dw zDzg6nuG>Aad*G4>7@(&?a#WI-xCknkS23*a8di6GL0xrS*L@eAK~XWIsAWLKw4j2b zD`Iv`m{80S6<18F>#B-Fm@m!1_#}7i;-@1be z1}p4=10jiVnFGT+nID&a3yA=wwGrbN087~rm$BY{t4>FAlkWO+Fe)0Gv<3lIjhnEc zzlMJ7M~tizE5gCgs12C#&b68lWCkx|l;bk=sJAi@HVQHjInu$B%3~(gZ5^Q2>`)m) z`g}7`Q`S_xZJ5Y`h2OyDp}AnLG$twZG?O2bj`pH35Dl^re=5(>0W5XJDBdQk>(^y< zV(xvfHh_pOzO#yp*0*UN{234QKQqtYzJi}|#20OE9SxTOA7@DDss_2%cVGp;}=Un5H6dL5sn1tIT3yhytdggIN*Ej5?O&%Hw)f5!D<&9|OH*1N=W`XhBH! z5|{)CNnVw8`x}D69rq3^7Zz;{_(GniB#sl{?9B*e(*8(o7T-qYU1&~e;v0a_iZLcbCQ~i%K7JSRUfrY5 zTEpd_JfmmwAc2DTVforJsz`O$!juEauCtYpE}q7N_`QXLbs~GX2Q8Kc#*Zk6cRvFH zpo69HSKKs3wzYU-iUZ>>6oz%vO@0@1h<_MT_k?4l_V{`9qDf#HlEEsO3K2gq*1Bn# zw!!$+RAAI!iU;f~z0`y`U?p_UTnqrPxL+7KGAoQcjQiJNw56)S8A4SdNwP{xgs^`( zMMIg)9dJ=hEa;6a#>r5VO>sq3s@c(gU_Y}vmdYqtdZC9D=gS=sID?;N*}TV}+Udz( zCQHwg;+jq7++t~Qr98!+g?s{Plc4p)%PBGMClOD`m_qUzI$B@+C?gn2@hVYd90TL9b?y0D_!;lzL>@SCjIpm>(0lo!UP zc2TvkMn)fH1`H^1 z;;*!@`xwkwfQ4qC2KPd7P;oGv7Lq%8g4>;%0A~_z;7{`2-z$@w z*JY@R5Pxk*gXJsxvc53-=X1e`*l3K(4M`K$wa-HXqoa*xOJ0qRI0*GO0U%Sa zOfdMennb&cJ6s^Z-P-@%?|U$ z*p5_;x&c5=D^)FO9L_>22C1Snnmn9*mTAowh>&$%J9;r zT$~C5ZmMPqQYD;|1Zy&V+{NFB7sHt4GBdx&aFlw6$D=0FEK?2fuY6)6FCdI2#2^Nj z>H=@;Z-G9pjKw<3GjiSCveX9lQmhLlF!PI;OdI9^Tf}jED&lkm2Mozxp?}Qr8))}q?ryXu0^h>D5`im>30EAiVaN>@z!JZdMGp0G?+l6(vhwk_LI56+^)OV_ z(ex8x10?#y--#`wLjH70ay0jeA0$^mi}8zhMN#7!he;QP&3HPdWU@}g2}6(u$!ch~ z1Zgy4DdusJClns5*bUbPn=ya}ayOQT+E}PG3|xp{-=IZ>grUj0U!}UBd3%bD2F&0K z)#4(NK!!|VO8H5BqTI4|1BO|c{PW2Od@K@#14~k@5a4}}<;HXIb|p^btE}6F%%1J+ zS%G4atXJGSzW|sAG}*kQuA@>c?Dy-><|fd=HFvk4EZzFnc)FABvu7VA@Q{DEU_r${X{|9M=6{1tXvm?g~qOBNRgCH(GxjMcrhXBw% zy8RS++oNs(U-=gAUDu^B;OBix$?a2C?F`q>44w+b*c;?Mf)clrif@<^&k}Sh=Kk@+ zhF+C*Qvl9}aZh60oePu7@0feThuxaU1H-^$Mk0E$6a<9^K5l!bZJHFOBbus7n3hh*M|kCW?vliT_?zm`J}NrNsT50mA#_RpLpdHPe)%7nK!eDfxsG$BJ$88>3J} zuQ|(EU_6>1XsP@G)5A2(AeSeh>y=0v82dW*K?DvX!QMLva})?H}I9#srszrr?U zjNM=c@eYG9<7lkm|7?Wihg8QNaLISdH0&0c%j_&{c(guNajg@t5So~S#i6|hM}szQ zNnuccO&vrECe_Uy{qJ^7H)dr)(Ecp;L&}(;AUcW?8tNpB8A|9e;Vua_4O=leDL^O! zE~~c!wWSti6LOny04LxFJ|R(xy#Q?-A~iL$9!|4uv8%w=m4@2h(MY#~$OP9UM~lJD z#$Sqff3b=tlvf;*X-L?P$ye@u>KFvChe*N*qIQEbg{=eJ5FLV5Io8A&^}CEB0h0JY zsmHP*P=#d6Hx5SyGfI&AvlDql10Kg_j(G~Ld@h_H?cFBrKX)*UY>YP=}4J1ACdLIK`MH>#n_dfSzS9AE&K z$@01)U6K-9Y`eG^EiMf|L6OFh{f~_LlX<^*CKdn(whF63dbGbzOvL&xV!%=LSvD%q zPA*ka5NHP$O!IGxbBgms+H+fOs#}?lO$X-Co*0YpNt+@erb?Z$l4)!|x8*;ST1aQp zdL)9KB!K`|^o0?qJ_Nv>&I|~$NAOAkHgJ#1No;ij`24~V#SS3|qjjnkQuz6WW|G*} z%~dKSpn7sGQWG=bso%-0f-rP^g|lI%P!lAAY%aDF{ukR$I>x|npu9uO8qtAPRsncS zuJRXu0vb;yz8JfNx3tqc?uh&qi*j9e%oIDJ>Q5@R4>j(1$V#N;itQN!&!V2kS0mBe zr>-_!XYH9OcgL0h*JzLp165GzG`IL!$0h>-zA6CP7LdxUDnDw#C=mDkDSr&eFHXF% z5upGzu7k%Qw{-v62DTEI0R|aEF`_j4k#9}tX+L8rCB%W&2>T7$DAr_HSP7(nX&=PSnADoswRF<2PvBS^i$m|WQaGj?JCg>l>JvV;^2A04d*1;xu!`79fX z@^Qh0YSj^>M}b#KnYm$SZkh6`F3et2O1Y+jJV3(0DZaHOBThAIdo6UDY8F3V!4laL zDtA_nL2FRby=O@~O@NTmf+%Eyldf*$Au%LXK&#B0hPMV1*JpO8DXi2wmC_U1W2^&M z@)H3V#oNT+E$zbcr5HW_&AAW%S9Ma%6;6&+QYQ{?n6z>4fFm6+-_Q(|sZ|=Wuf`{j zz>E^XNu@zLMJbhc#|+9dR3o*wItUEJWx1QMpU6n%D0*nJ`>pTW2CopQMm9&yxQIoQ zg6A~lF0h(n6eTO&>5_LclSTAFf>+^}12u4yNNl4hz*Z2n@}BXbrA396r=P`&5;zm) zOrZ&B{{PScl{XfXdL~%PsMB1I@P^(I^1G$H})5n(?gd9&0TBb%0C*Af9DKxPRn2gsz3AhsE3i1>r# z{}tB-TuX2nqam{_5$hqjDq2+@HX)B+6RsKqM3U35s0_@03qzLpXQQC(AHkEKqcaR? zV@@PB&C*hHbI<*SwUmeoqdEPz(xgtG+^8bf98(mpUAT;p#@-_j*&F z%tH?yF;U(_K>-O##zTmTRTGHI!H7Okmo1hBA$Z4zAVg8P9kz~X-gIZqd!1XLK*UF7 z2l(ca)zI5U-h8dU1tO5wDNPIw7RgwF^p}DVQE@14buF%@%fS)GchTJC#Nw(p3}dhB zS5~I2R^Es_tH2R!EJpbtrmR+=WL~B1>&66KzKVhgL+xt;dp0b_+{3H@*5V$#iy9uhGZdde_X3jS1Y;aRSyh4RtH}72n5_Z<7*=PpGe&?uj9a{HBR0Re zs{J8JDHj&c#($HY+vZzx!n&h;Hrh@f0H8;H#QrKp^`dU3Cf|O7MrO@QP)`;Wkw^N& z3WRS$RibvN!wiMclKJ(iCS<bIvJLU%R-Xg=w>AY_BDPfmR;qP6VQ zWK9J>Yx|vCMLejs+t-b@<);s!vel@Tonmj*`+;(yFet1tXikS!-6@J#U_X_XIT#eV z5{6QUv`A+qq#56wl7nb&?(*+CG!5nfqY(Wep-S7%AkrZMq~cp6*anwF>WPpq zxq(sq0{u#`ZV)6SUiT{u-1tr8Bj`;LC1nP&%vwUF_Vu?>@U9511{07;1l`@HTrtvd zY0*bHWTcYtfXEtY$hb(tDUn9n0PH&AA7icoInvX!m_#Zt7Qw~1%ik@W%KKC)iy9y^ zNt^Gs;w&L6v-yYY7MXBr%B?nmlV%GA{qY2H& z6OS#8NC#RN$@VESy7%Z_9DX991KXY39PQh^X#t@K$ZCp;!6u*Di5}pYjY8o8IrEg2|m|^D>L*F9TRdZ zc%R+D*F=0Av=pJ8j!uAjlBg^-E2+AP>1%Q#wsI4xZB=;D^l791j$&78VWX_xzPn9A z{HEBCm&9LFF!V<uFZ6H1o2uOu>Qvxe@RJQX=5m0Rfn z^2ppVC04Ft?sw}4ptSyt%18PsR#B}v!bi;IrwM8OP?59>>9yA3;4g$pwgR9~==TfM z3P)pIfu~WrWqJuk2V2} zDUv%a+eSO{{_+Pp!5bpl0k&zDT-vMOHF8@ha|mrNK7&u8VS}g)zhUczBG<9Do%znO zty}vZm)Xf+k_(Ir4>=nufj3LL(e{5!<*E>Zl-Jg#l1_v@55bE0T!jNH2467}4Oa#R z>u!orOT?mUeln_=NV&#AOLOsLRidMqw{gCf%*nf{{HR3$e)KX6riD}#;2vHGmneW9 zg(j;^$6hqjOp4gYeKd|xUlC7fp%*wYB*T1USOv)Z7D_>MXzl zqZ-W@dgMZLPEI2(pfdq0;m-8<;i{%m!I+gv41h;3@pDebrcHG=r_b^xtNzNF3Rds+{&1WEtgCf3nk3FcZXq-vkFFH| zyLm@>B|oN+gJt{!g?7M~xoR~UU6Ioc^_3nBAoehqoH~J|<1b-W5Kc56UzNpc?6sV@ zfx?+dDsV%5_b_M8>0R-yRi#2*&teF>Oyy>wTwj*nHeM3ChSbQsn_B3>{Nk^83A&9S z*GJ3WL+rXTd5FpAnm)M7eC>=o2WpF$)JF+S=2cX*LbZ?`Ekq!jP$U z{=>)}9@1b7eWkY^z%yFDu%fom(^y7C&?bUh(ik@Fp-%8_NT+DAd0TE)pSeii4Gwf6)@mTif-TfcEv5Harkg3+L(4Wq9hPj3wH^BofZFOUY3)SkaAiB-&H%uv?=Vd+R zLSiK?&!5l;v$LgDl!RkY0+PWegacYbF?#`8q;71w+}x2nn-}m%NfxUqKLf4OP6r>c zuP%IzwSP`ofYJ8Fywye|p@Z2N4nrHTJC9%{QxB?wp75Sx;3&OMzZz_*4m7e)tpMn* zOhRzfK}7{S%dV;dK$4sm67i2st1L89bKUVtiQHlV_Cc zfJU3SdVT;Y)T)VLYxtQ=Xqekhxf==zP=mI1A7R zNoieVKteZ|S$Jg`qpB0jN0p&bRr0#nXi@c}q{LaWz9A|6fa#aA*x4EdsW}u$vC|+& zX`on(6l$&!Zt@P&uhlOPDzioETBl=^UVlz%kCx;HGw@7^ePo+3rNwOQO7KUHn6S-h z#Sy2JHl46OvrkUFjhNu}60KWNv7B=KFbx)deeR*pMX1YF|L^^Rw`gCNtL zXrnvpv*8wO244VWy*9qLzAD^gXPutQ{pjBM^}WJfP7c-G%JlB=3DtaKmPMPc_Bs%w zE{?c!^Q^|2O)X5wtZoSobL=tNuqIZR4Rwm? z-e{9sS`yq0c9y*|lj@3g&jK@g*C?I5*@#ci(ykbOv2O7Uh5z%5mA$4gj;*-4Rf@KY zf%mW#F!=$`kID}y6QW9u;RRJ_c_HgN)b8oDU*eMJedR zIpR};z$CP?$p!8WUqCG&#gmbbq>%s|F0v?v;wYO$n`DmFT5nSvwYBz9&=<{%o8kSmiD+~w#caLR6JWW`^)#)6uja7mMG6G z_vCW>Ei>}-S8w!&Tyt}AM!ILcC9@~i66^<&S=2OvfCwo0%q~^uOHxT{RP$s5YhqzE9dTyP%g!|A z3v8X2k|bVe3^L|aptR}&d_ri`W~eJkEZaL+Sj0AbVtSqlv0qa21=BF+Y)Un|)O8g? z6a|a|UVp5tS{UYPWmLeMQ^K6W_o}4WgrF+c=|&{hY3_ausll0wzxYee|C3EW$(#5%RmUd_{p9pv7QZ`!%wVFd-Ai3i7Nn zVVNK4-i?uz0Ct+d(oTCStS7C8s&R_2b5{j9?PFrG%6E%hucmfFk~VawO3Ra_ zuPUd&_RsUIa`U(_vDD7YhC;B}O2hD1S-~dm^|3A6#bLn@PDN+I)?PYTgk@DaWga~i zHMSFqy}*$#?HPAF9ghX#^2yuM0U%I;{U~~nu7Nv5^UiDDasV#O7I{)FN_E;-F0+S; z%Y|NJoNNSyIs(iL84$8C6^R5sQZLQ9s%`}MX16OGzb0uaOh*C{nJ;s~e5pnW&ur>| z%W7caqkx{5A}U580btb(zm0qvXalrtI~kmk$l|M<#eD1t+;CBiigx%F>LyxV__2>n zMga&V)fTKRhqs!52gZ2wf<-(tl0VN(?uAAaU?=i}5%iDt6ckLv%2#hoU2KP1I@p#8 zvMhIzLVn}5m9Hh$qGXZeU@1w{7pB7oPM1Jh9OzKcIw{{CF0|nZF}!x{Ju|}OE^WXo z0AwRG%U+WgwitbhYXy+IBp>9G=;6^w-A7hOj}IbRwgU3~nvTlO8Q36HQXj%YsHYq+ z0+>T_6;>q4=l}xSwurPeaiR7_rCwJvDh44wnkJ)g2R)S}2nmvnelQjdkNrY0E0l}m zBz8m$bI?z$d8Y%k34{~`*4MmH=pyOWbUfsRht=;iz#enRtJ zb;uM*^hA*dAqiB7#A8*?5n} z(XiS*8plNAqZ$04{u32tl8T2}FO#0tJ42iqfXnY~= z2E^lo1HgYioI4v8BpR)b=I2X%9xTy?wke$(d4c^Ajzb7)H@dB@GEfAw{S#eqK>!fk zJNVLA>jE~mxpX%wYs^4?atSk4A@;f)?02)`$i2X9F04btluKZ|19`G+H`AmoB%2G_z14C3JjeU(ctuVwvK(eUI3UcQQ193(snbPCz5;>I-~<6A z%=LF0$}&yJVFvhoM*Vgn#R-OVCqfN63EMfL0UAka_mMRn-^H7Xa4|a-DK(wL(P^BG z)J;eW7m{C0eQNVtb=*YRemao{kx^jdYcG#*%u2S3Its;l6Fs)mHp3=3;Kj?(sPN0_ zS%Z+pW&(twUxtt<-!;nZpvfDoc(|((Jv(|wF2J{BJA0dR)A~U2{)4Wrx4X<2y1D*s zC>SkX1wd3V+E3`_hO}9aym<*7N@rYu>ih}a+`x%BcwBt33*J?+44#VTv5%e?^ETVd zV`)h8Gk##)QQelmN^*SQKkDZ8tcFXj0RGEheK%n9~)e+ z=m+QLG`NoK7nkr1U#_^^8_6B!G6W8rGi+#TxJ8DOO<~z`fb?7M3#c8B2o|4aV zjX`JP7ovPe`yMZ(=2s&)5?>EEg*i0fA~e)`wXEU|!LaDT+0y}wbiO#p*jD)ad$_*Q zMNj$nd$>jhscMvfm~oEh-0}EM->s)hCf-t+Z?H#G8Q&>+Dm^H*k+-`1-B}hb8n3Po zN*0)}FB5;^z`qQ`{Za$`%3s;j4R&Aq6+PY1cF!9KUeJvf`I9X1`ChJv`^FFGQtZtvPV%D*r0OM1DkeZS)#OSDcHz@&BTUTAN}?lN}f@xAl^>E-H&t#gJt zT>KgkwIg?j2cE|MJV>K$i3DWIYRAO~PFBy&3f zCE_=?^9-Vn!?l(28?Jw)O>5;F7r9b3T?8i+O*qEeZ`O#Sy!uhUSEC!*#Hg#-&H#B; z=Ks=qvUrZ)G#(u>Ii9)8@g?9Nzc?~j&=-{CRHUWOu%+=rNWzfOs!8~bscm4Dz53wx@Ay;I9F>E zm3@mJ6h2yzF9aQOvJN>i-apXW?d+cNZTq-CblR2f4r4~xZw=uLNDf=}XZCT2?tT?q zHQznObsh5ygd~6T9sx2xg+UUp!ctggMQ1X04kt&RhhKX6EI9gnkWF>)X8B|j*TvoC z_ua(xbw5#Pz0{my|x<3)Sh2YBORi zG+N!RLbB4u;{pZrk9M%OcFERur`F%sBCHXs%7Mjb0>?U)a%k3fM1koQt-d2t_r6H9 zOb>RjFw5OrwaJ)4lwVg9<(qOR!j?`{*?mK4xt-iIe#s!$;GXqQ4RYOb&AIqF|Ir|KW}6#O zEHn|MdlcX3XAO2&YrOr3xPf(yH^+F<(+lyF{(vEF2E$o3#Et3tr1?t_1M`>QtdZwE zBiTKFi61=F9pdiu=M8m7xF`Mkp>7)ZhVDP4jrc6t%|`9rn;PcNp$|+y5m=BG3+tSr73Im509zoeXZ0D8d2RulP%byWY_UkNW$DyMY5A?6k0ZnM4N~AoJlUQXxMt_Q|#jpEzBV0XT9yr2vuV1xcIiS=adua5A|IG+DV91Xb zZo?wJ$&?iS=>Qh9c($+?`hSdYhjn}lo@tTHDzqBjcr7)v{IE^k=-#U}S;D2V<*IQJ zQxA5dOIRdJmiXD5x}%D3t0BZv9z zFjJCJ>c1Q5CLqK7Hly5Dy+7jBSnA0Q>9arqf+^-?y+?+fANwmu!NC9R9~k8Zf)5{$ za=&$-_#H>XhF17vM!TykuYEL1o@w#j#<-!;CHMI$W89{Fx6NnA8`p;KTHu&ZPC~CN zRbUfl6K64~&;8Y7kbKYjS6%`nzR%`vM7w9{fE0#y znw=Gq^1t64YFO*v+1&kE#d9l&tXB%n5*IJ?hmCVRcD_SbNn{X$4CZ4bxj2XsUXl!t zU+Ex~AB3d+ouuK(gdVH`a(=k=2Q@`In0j8x{`R~4bK~47_o&CEy=UQBY-3B^6R8}w zh1N6Z` z>=4*0smG`m`s22A6FZ^*KyY{D8Y4^=b*kHb#g?wC`_{j=rR%jxdAl@4f504Exh4zH zM{}t*G?q`_Z!5P=_iKsk&;?v;baZW&4(Ylcj6oUjGq-YAZT13t;7ODP;c@at^<$!s zh5dYu$3$z=ubfe^D*Z~u+ZX)Qt=++HiN9lO?1ov(VO1FhkXT^sEWg<{p!{lo=r(SG z``9ns#$D%b_PdOCn*`QoPKpAE&^+FCY4IBDoN9Eg|Jgb0@iz+)=*scCKgieWf40 zox7{zjhjU@Uu@^jcAxr_w|D>R&htNP@20v5e$O4;RHBt~ljfk{+_X|#@bbVBQ`kXz* zZ5^$z^p8z(gIMpiQ+V_p-)l#d`DguBJGxD?FRYp2kJ-_k_ zC!&@m{_nfH58YBf=T~l%HVB|pXD|Ws(68Js9bT+#l|!a<<>HrppFLb3Mmc#8!jsDs zuO~htcF^J%?STwk>f7x}>R^i>zo#1sf&Y0=w_hhE zj$bv^G=*=by6*e=D!7;vGe!>JkLiVgDraCNYhJfP?-g>zn9u||F>EgBNDT$1ao-x32b1?pnd%M2OZ;QR%Zf(DSW_c?bCyBoC8h`2DuAf`uAKcpw$v;>r zWfLj_rN7;q1H(V{C+_3=VNMHjnV6bi`qZjpl*zBO)VJ*82L1YD&_6745x9|Wp`{y= zLG?@1lQQuqsydyB#TVo|_}sJ-)A;Zy#{Y$fAeH1fKsu1w5tpU(q!DV5as#QMm4uIE|K>+x-XH_Gv^JFsCJ)FA@%Pg~Z}Ner zYI8pga*fQ-^a;#c=9IBziSP5@?&k*8BDqy}OlI@2{oU^HjG6npo_x&T-yL6=X(nSw zZjZ_PJ%2;O&|*p{nhbiydQ}BpMi$@X7ykz3}>EIBNyj~Ek+S=5Ky@Cus`+y zJQ270s}6A6^`1|`HZWM8csTxi9&B{k@zHo;bdjF>N3(tHfo^Q4e^`{g>@fm8@XOEl zdmrfjw*3XvxtE+M-{fh$%J#A~hOhQ@H4qGb#bho!I|?}U>0SBY@qKKKj1TZ#4|03E zmHz01T<=W|U`W^*s;5#ZOdJ`0k^Y&if1Hg$BpAnY{GA86akY=UhxIR$_>cbkgWSMQ z?|r1-lnVW0KFRUzVIp`(`7IB2y}G~l5|745>bP@e%{>*mkZyzv?zn?73-0p^4rUMs z`1J?7PJDFw9izU@kN%yT7~NK-{=4>JdSvP;3x)CDBW;PVhJpQUQY_7v{?6aIQRSss z`#U$j%SuP+$0Gc#a4OcuxA`3paedpQgkdtiU7c?_#0}{8v}k(+P|MT+`O86DXL)_< zVC5lh(k4%v4VSjgsElP4FNKIx`moR0e)B_dX59tyDHMs9Pb1}*8nK&^pGv2+U}*&> z92nJrd$VlYBwvQZd3d%azTMwEZee=CC5mcFmql|db(gL%KPm1#S zQ9yY^unPB`zxWTRSF`-qoy0tC>kP zB>OSVJ1@qN(Di7N!h(Ti#8>-q|APSE$M5q$?yC6wDCny-ydKFi+t*BUe{iS!qo=tJ zW6zg?m}F3s=(UiyHc>n~%2(1l-XlLSa!qbV@El0Vg{IJ3zM@+?1hx*OJ)lipE7<>HhCPEN|D=l9|!j=I@| zS=LAW2h(wEHecrB!`)`6Kobvl2iB^J0{ATF;7y0SNj*unkp~Gdivt4|{V7u1mW%Pl zzTFY1KBxGJN4Q-FeDCu81OUcHXtukS2XmEXmq|x7R>8e2QsSN?fZgT(wIkfHc2`6Y zx`s((3Sq`q_-;qKUiDWATch#O_;9$bLSl}tuJpSfiF!L*+mmySv7*u~dyr3Y7d?-@s- zFkR*EKZ@6%;$J?>4X&M!i?&m^TX(eU*-pRPZg`%DwmjN(N2T58Xtz^?WJZXH8bpET zB6=UI=TGu2M`MtDc!B?jmig~L!KoD=$tLG({e)xOt`+lWc(@;Nlxy&}9^*Fay3xQP z02ao?Q6|2{|8R`kA-Z6>-{DVgZl7)QJ0K2O2~##w2wrb%%JihS!D80`$#w6gWzj&i zDu&dW{_INIJaRH4O>SR|`yg4Nzkp9! z1(~D)Pfc?1r%-0X(jJ@4YMxb#o)Iq5ie!(LYy1^|hOX}MPyN{)fJHRqI9FfUE4=QL zhpoF4T%9`A~Sp=Yq2L83%S5=)Vy-gZy|cleu|-ZUapRm_aYR7{9Z)n{%({i(C` z#ibWAx==!S8Zrm>ST_*=w8eb z+iO|R5BuN(Ns1gXPQbr92Fe<%Kj&|5)IoD@Ehhq$14$S>5$^G@S%}>aLy5dv)`_V4 z36TKuy*mF}*o)RRuxCr)lSf>95TBm$eo@JFe&h@+w>7?L2A;LjX&Rg08rF+D2D9J2#_zeGg=WHI8h> z!)3qSiLOuQ>m8A(E1b)Pu!DK1pMBpqpNPe}`elFriEdQW@6oE*4Y_x*a%VVhMf_qU z^TjB3=QN1HU88dyd@Fj_EZNG<=Qy6@f>o2CL?vE+s#Am*O4)tR=;c1oZvZi|x-@PV z#V_pA`Xj3#UV0;^?<{iGa-WhHKTMeeG{FKch6*zA>rsBKOHo`{J)N_cR`~~-+?Wo? zn4DycHl8v&q|8-5-wZIW@PnJ(Uis9f;`(*|>}GKN64b2Zvk(0J&8}YSO5Q-;WC3u3|uDpZnIdT_x%>L+|Jnp;t&0qvk-&-@(X66bFB2Q z&2q;^pMT_cJH?&h{_bBt#T^k{^|7CFD(;p$KlW#w>iYHn01W(Cnne~%mjc^xl6WW( z24VS5@6_*66aVU|?ppVlKk+m-zWpucf!&S#9BkWSZhE|%f95o|Ee_R=vt6Ux&5xdq zi{cA^;B40iOa7GEM5R`*V~Z9IpPKDTwdWJVbn?XR=f9cly4SvbzJ6nk?B{!)PTcdR zZyA!TkNy1Q(_KUNTi?=etdsrZVQ@M(I(hu-2xseVzWH=FzSr3Uf!}_`NM=FVhp9$q zot#D8+|9prx*O2pfOt0^9+Ei(RI@(f-}&xmxZ|Vdd;NuHh{7*h_QDwoVv&o)=KhTK zc-PfV$eRBY25Kij<6~QWng7SxZVB!Eq32-K@Ok4oZkqb(a<1E?ee=EHah0Z3!VLF! zITxqvBmS^+-EcL(^jx=4ubVi>UFdY-_4C|``rPk)x1Bz(IY0FK;rZ^)Z63?HDtUQ{ zoK+J!gOj2ZMA9FVtNsn?Axwp-qMtcY@KAwyNqZuJ`DEe0{o8Y0ec!K4<|053DP>85 zEh-&0xk--)^%8^Vf%t3Ri>lXdzCY*!*SU&945WN7_9tH8x^()6(4UCZHuvG_Lq2~S z`5P{92P%<)lj?iIsRv!?8YKg#GfZuWOyt|kIzKC3MG ziC$g_0bLfruD?>g{=$#1zYwnLy_5mbd!K=DMdq(nNP`JP&)vtu-Nz6E`RA&lLT!^v zqokGo>5E;LE?2KHH(fd6-my{I3L40|i(Su(TXfU+y2OzgsfZ$Wxfsyp9`~PI>U!p()G`M+`A{6Bn^CADeZO@|rLDGlcPL$@3>f;C^GhB###7V=Hh3z~ zg12bnBTgAjy4)*!$fw~~FBWXghy|jZS|3!)f>7Ev5@5n*gw`;LcvY1@dYE6DK^DnE{bMHxG+^xgU4A z+m4T!m%AFT?_{36R1&V8s;H4LkTq5KkGH{X?T=nbFG zvBoRSg^in8uik6E+qct6Spe*`W(}nZz=q~S=;Gn|?$85i48yUkmI~X%ineNOLwPP- zfoRR=rPU zeT!)IO3Mt)SiZ{l%26Y3Q;jUdhN;Z=X7Qr&!OjFd=lK6#<$Ak0{@M9aCqMXV*I`ox zKyZ13aAw?u#Hx)%#si<2ZfI0weH_hm(eh9HsaLyF?_U%XE5aji6O$27UhQ`8It$LO zv{IHcwj=}nsg_I_b&c!g-@C@eo#zW?N^S#69PByFb=;Y4|cuQ^{j3c0^3|mV!>?mNu_dbb2NEmN%LiX#HhL--PP_4KmIx*d1v~g zu5-H&yG8yEFXjLl(IGqh(Jl zdvJlvxvtNUe1xP0?r{DUDko^AY%jRizqJsx@6vlKP3VGZne7`p;QT96qoc7_Al>jU zJD%sqPAhd{OYuGG%X?9irRgr`Su3MY0&SYDtv@RX=yux?B0V03GA9({F$J>@UcBtI8%s+mE+o{*z&x2^p zd8~#ag@Q7aYi+*qd4A-Lu8%w4?|Y-`SJ84=HlFKGxzP=;yO&@I4tbWNCRytrywPpb zc{XAG2`Um#jQ9}Po&XkK;JYk>$W~DB>O#NuB2?N3{jV3fZODMSbdl@v8)^v|^r-Gt z3-X1ttE)n`C5im;NTs40oR#;UVeSQGgGp|6hfi2aSd}dSFMANIDHh`EtQcl>@{I4e z*bQ!bkrIa@7Lc{c#@_F`n3UnA*mAn2TtN&J4$+1iaUn_`=HQU3_)kcWh_n0ROSmIJ zloMMUZhM8q4VJuuVFi!8R1d-qqU7Rr8Ih7YO+*a+W5knLb9wF-usS+>nyWZrE>bbzhB-TrY;%2lj zqD5G6tULaVn_Mq9&wqcD>(f(*!BlDe@4{3K#bDr;Vni_T@BB75yWSN`2PI!!@BeVK z+obOWuc$dn`CX=2;wV?F3w6U_p8R_aw@H1t^=87MSNJYV;KaxHaZB)|9^;Q(;zka! zjKFN!S^HOvZqX~wtO*||V>LwUlMhhiA%4Gd38A$seVbRDe(5c4hv?H= z{rX$n5l!b*l44eoDo<6AuQ6u%4VsqrJkbE4@f@r>|4p&1alRyj=c}X%;j&3w2p6uT7a3%E}e{`v0I)57_0NIww z0v2nuk*Bbz5$%IWrufmYOm~tC*)uA~0VB0~6bBql1*H-NdQ=l&NalIJ)j!zQm((I7 za!D?bK2YP4`cm zwk74Jrn|Hx>4z1I$%vZpHD|B&I=R&L1RfwEXOB|E0|y4iSd1qi{JR(1@!`79D7N9V zhR?QqM%`zW>TLI?(74V}0RDmwG{hfro9lRJU9sJsptz$~X2^KN>kU))i4cl1Z6adG zq_NN&J^#g5ya78$&lN6-mmb!kR=@m;!=ewq?y2nJ@9$HFj;kw!W!=G$40a7T$C)lm8d7#rUT`WIQOaMF{QyKlG5^{EpxW6tm&5ZX^z=8oxZH5syEI(k|X zN1^Mbr?~hSzj7HH;*8@(cAbh?DbIs=;CV7VOt1jmC~0|;X9SlhS+n8m&7Wo9UcnNG z32ZlJlM6qy{M)n{tWVRUCyISQX*A%VFU>@k`}ZItvU(b_(#FBqbrC;GxaQBegIs3a zLeQeTh4F6~CnUuU553b39j>3nithOv93Fqc$25|V(M`w}N#B)%98*v$ zH7J5658df@86hD9Gq)4zxK6ec>OiU0w>iY6OEtHpkpbm!ia|Px4YdSQqvdQ z?RqrK%fkP_c%}a^Ds9|UC*z4w&hxA9c3ZWZ2fi{u4*N^T>4)Cqx(z%1-?TH0!WI$- zqaEIzVx)zfrEbtj`pLHbFZZ|u+CQy_%9@D8$Rhv2J#On-Y>oI@tVH76!|!#S+gy4o z7>~uvs#eB-@_XLvo+ZDi?|ovo$Yo%n&cGUe81~9yi#I;iy%LXqy2Gg+Q9b8GB@ltO)-9&!!hhSU;PvJyNQL* zzskllq^gs#@4L0Qz1$tkj&4D}ZOR$r)4JC|5N+r}gkcKIVZacj`3@$5sfm`d{)elo zkLDgSPuN-Cu8P4hN}5TbIjqD%pU08wQ6irNUpVxl2X!n0TVNR(182cW5J;L^*rVJ? zk=7>lt3AgI`#DxlX}HPEmW-LYYR2YXk&5&N8%uJ^S;FcQ$7SjmlMOape`jwi;4 zYPSnkHns&m9F_vS*+&uakww0SH%K_)zK;GRKCnc|PT-oqE6dvHvKvDbpypkFAghQZ!WWI*bNQN5-2 zqhR}&A9p=uqp>zP>ekT*88^izT;E zB*J%f(-Q=C9`^rz!p-k9#|nO92~fF^#i#`lAtRNwZ?`GRfdDhdFMHDU=y{zEcLtg2 zsgVj*>T5CPVzpe!GyUgJf?qRz{R;fsMCbQe;Wq7evnlDVW63apyk56y&i=J~y@8tXSNHE^feALlN^OCGmCUHki*2jrQ zCqJyuZs*ridNJ@ZG>?PIr8mgJv8vDdD4P>;PixA^;>cRlkPck%x7q@Qx5!wYUuQ@9attEYvn zY~)G5v!jA!9P(()!ne!_#?~PpK1QqK#l&4Z+=DkEN*F1azl;NYZdH#WyTz{Nf@J{fY&6a-cOK$Ke_FJI<@{+Q{E@_|4 zJx`KLc0U;`*Wp~W>DbU1d5%Y?zU+GKX!dXF9)MrQBTe(9>qU0nE-!6n3!20uz6;-OE*mhp7NR61l^ytzQF(Rira43;~mp& z1q_u@gKz5fJ}n%Ph_E3!o4-DdG0pdXdesfsrhvM`mO2<01iY5W7p4cY4Iv`ZyMrwZ zOgNXUxWH(-Sh2m(isXV%{-e&9`PW~iGUYtVw{zXLftZ*{ZvBb@0?*_&ebF*-GiP>2 zVOpsg0JQ)CDHW>)iD+1+pUV1W`UQ+Km#g>(arC9ua0~KESh3mkq?*ir&FzoudG|FpuE|QT0(V9pJVa#<4n~RlkA$7c>#i4SM9OHkDV4oV zTv_L|dqQwx?IBznn$)f9WcMYPX{O3qj9>yG6Xnc&)TSxIQQ@z6-PL!x$AaI+I+mD0 ziy-*eKl!>F%l;139K^Ra0kYk>fe`B;HXyTQ;^0+oM!YC z<{y898XfZ=x#&&T*zuXCE$>5h&=o1BBt-N5eiV0xr+1R~tfE*pS^cH83?aor(mXGx z$`Ju2bKLc(zUfL)^Mn3|H(f)`qgGnFP5hW&`6lWSA)YshTtDg?-(sqd`K{k_(+53a zrffF3c^HU=T_XaqY(p$a)F#ztVKQ?nrm>smg|}SN^-1Qca7D0UL4+D1XAVg|bhR6s zyEDQyHf^;lHGK@6Er2Z{UX^@t8c-qMRhYs802A_d+0z?=*+jvO^g)#&nHQuSAlu?0 z#_F^yIPf^Tm$)6%+k;K9TEk7=ulD0ugkr66b&$d5-v&Fc^+VrwlLtyTQle!-_C%y9 zWTW@6Wx=jRr=C)Dr%(}X=7OZtYKizq3<=W{T*N=~5-*MB2JZZ+ih^0RS z1>3q~Tnc!DOD_M&%`WO16wf8gNXywO@=L~4wqG{+J*Lxin_KE`cgx%z?oM}?`|I(? zPrcjSEk8ppvd(=JV9(PZ;efNFRt#D7dr`<|ibkAVQ zJ%@CE!M*5Saxc4A+^g<2_qto<-f(Zy)mv`0d)xif+Pve|xOd%q?tS+`6FWKn$K;zOa8^x-Z>V?rZmr`__Hu*17N94{p6{j%G$DMJFR}Pl-;A zPKzq$v-0}?bpAghIul*=tmy3MoakJx&WX;8&X49s7x3Nq*9WfdN{~`q>v@!)D_gH# zp{o&BUEvB{B-^9za(~7Lu3PC!9K~>lXuST3309XR#;Qzi@)+jP@(=LIQsf#fcYm3T z70HY25UtS>gA{h?AMHaJtNKINbKGjPu=WwZB;<=N(+z@XO@ydOD8W<(Liv8)Kl>4!L#4-Al@NKTNWL~{u@9yuFc#Qc{6bAPlxscNpRGZdG}-t9YFxaV z$t&lpP#^&mf~=mdmtp&bmk_^U7@d<>zBX{gFV@tNaSATfXsq)hW-s?joj>Md(%-K1 z4}I)5X#yh(QWE3(i9bSYe7k0VUwC48x-aIyVXH{rLB@>K0(?aLP~@_+uf>%IBQHH8b+G=8O~ zZ~2*z3d zv`<{m%9&f4C+S9>>ty##Oh%;8%GS#j&h)Q+;`+9It)_5>-b&U#^E%zP{g3Mf+WO)D zVKd!nk>8EaA*ZT^c?2~1Q^KzSkv+nWc59JntbdZW zOgM5OQ}}oJmnyOqKDJ+|4Y|Tc_7ytM75-Ij17&3jAKEV{%YJ>3-ZR+h_WR|=3^Y^F zW;LS(Yy2+1YFJXXnz+ImKjXhF7)$q#pZ8y4zAW88X}~gpV*c56uA|oQZU4@HUGIJV zsRJAgM_Iqs)+;JxTzJdAcAVb&{x|Icz|Ixku&nSY<=?B zS@yYwo5Lslx$VXc&CJuaiw3hnS{Ly+EMiyRLi?V4U4iX$<1m zIMb?XtVIl1ii+}PT>ME*W32+cEc{?*B%$&jF5&D#qZkx!AYwzIs4N=0EA?1_=&mmI z@NK?yLz~J;jB@_M0)(V%4FIE~PmxE!yfXO|H#TAy?kc^yDsHJx=`PZ)KKv)iyHs%SMHD@EjaWQjkG9u zrtpGZ(JF;ismKU!w$a~ne(Kk5O4S!O)@S|Szjiwg{Q_aH39iLq6+~;rdypvnXncd{h_niO#=JE`}6XNVA$(R*H2B zX>?jVOH-NT$7Mvux-QJJu1fhN3vr1;ZE_5#G>T4XkS)?HXG(H=I2g{Mgh6b^3QzdCO3UsgKExw7E|#>);s>r_)K+z2xMgO%2tf5f-)>0L!9*~9!sUc z3j4~M<_b^RS6D_|c*4F8o{pG>xHewabtwXXnEv8*uI(n@BeiHCqykUzuY@5?}^EMtc`_zG}MlC zBtU2+74bU5$j8D{_6QHH3J+0%;ZNVAg1o`7xW>BY66W!iLn@nN(hS@*T zdQa2`p9LG^=Gwx;>2<9e`olw}H_Hc$o}nKQ-tfbxB@J{cRh}%O!b85{2iLD^t&R9W zKZPHi*4C7y+6l4@u9}cQZQ%ib>JM%}{f}=Ir5wd4)fQU(qZ@j;-+%D~!I}I0(Dg)$ z*4Fq#*1Nv`y!GzL3bENv7Z##^O&klCp?WSZDGrHcfMzEdePZ!s;`^%$_cNIaW@Y?C z7h9>OnXNH_WXe#}EgPzh7>y##$LeAU!{fre^akD0h=L1bHfG|JYvEgEE65FO1NlKG5oiF(*gZrr#7IUbUN}Uz23jDxTwAf`VI(R?mMvTQ)>%1rH^Rf0-lI5KCSluYQET- zgLt{ZBKvB}=Z*H2Q`h6d4fYj7hc=nQ_2JhxsnNC2ei|=YkhZgdsOjI!7s$)l$hy$2 z>-=5Ws9V)4Be!e)>-=a6Kd#}SpdE@O1#E`!vmEf0kkyoI%hA72RT{ zt(-TC&-5SW2nU{3Te#ADHbAc6 zeX%kcRdue7fAKPdO273TlrC}i@Cx%zwpr6Tq_%$968P-TOw;ow|oN($`#HEw@v(* zD!4=1f>HuBQP4THSTRt!bxs#-z_baW-ZyHHK*EnR{i3Ru|d( zPs&DY3bqr)=b=xlmvbabtI{sc(C9g-NSKqplej+Mk#ayDMmpltZIYZZW!ABhzoeLc z;g6~&x$XQ~u_<=M;0msY=ho(fWgP@Os8W`Mgyd&HEZfWA8Ib+DB46q;fnAC<$4n~rkRdgXl%Pd> zn{sDcGmZj;FFv4Q>UbV8kTA3nMwdf`v!5}u=RRs6oT_}bi*1yGUXjzH-v)h#O4a5y~bVy;v`(<8T0R$VEt zV*eRyT3f<)$^yz`57jhR z&y7@r=9n4zB{iN0z`vln=D6HOD^(*W14GlBHM?*QgR(yrKFWyZ&|=r{3eay0R}^rm zv`b&R*b*m8o`Z0I1W}<%z>iXoF|3V{y1l8{DF!}~RR+0eN=-YlG)sc-aFxj$5P4GF zX^vIVqFZ&#FDP(u8f}edMZShDM|n`-0weHKoqszYb=vlPxSA#ymX@~0zZl$wwS`mc z;Z*la83i*+*>-%9bu`O)g2p`$y{Oi7k6RYx~Rv{z}5byhN%Y4va<~G=M{TQD9&DxNYgmpyqo{)2epZYbvTXL(HqLUJ*DCL z&)P)wB``p1Xy(IT0SE8I_K9Ts6#lALH2C3dqAvbE8h78g7Y)mLlS-8KhP2<%8wY&; zsJG+8fTh3~FSY5#m)gw!vSHTA$c=9tx6uvar>y|F%pUu*?xy%Ll)D^n99AjZK32C4 zGqTCgAO4f>1_Vv?@Q6%piaYrExbIZSfd{cL4MB0A_BGIi1nm z{6Skp9lBmwTd-T{qHo$db>D8wsKewdrE(evnZ#&+0XPg55orHw8EK9AD1&E%BE`$_ zhFrNt)Mc-eP$XK{Wy8B_!gdq+4JzV|U->`3^veHHA97J8ls0RfNsgHu=AXf0aI5@> z!zur7* zNPqmsKR+hwJq70>jts3nF-*2_#J5!wCO`|q!79weKZKCRMTusTy!C;Um^lPO!wwc> z%Om5fkRGJOj~@%yd51zzxHemxSQ>6U+o+&S@VS7v&n7iWV^^lS{I=Vb@&wj25miI9 z_-Ce6t5BZMtB`Pd8k>-`MAB2(t@Qsfb|&y`RagF(uH<-=V`U-xB8wdo2y4Qgmq1v; zT9(r3-s!YV!gR_qZKp#kQCtYS0GDSdivUAhmLk9uvkNf6VHIG&)3OLK)RY3DHQ-VT z|L^ZU>3O^T|NrEJ_4M@4@7?9xbI(2J+;f9p>{GB-N!BV_MdpdG1)Oe$QfEWr zt9-RR6^JSB{L9E4Oa{PAB3DL3;w%19OU<-}_WJnX5f(R=gEd%q3lDu+4{bJ|tK%Gx zMD@tA{zbc(=^5OHRA0@f@QFaH*49y#i;Xx8M$Glrxq}ClJr>&QTbG)=R@CT4AC2eAj|4859z_ag60@9NODNZhV{U0L7-E#QMwcsNUYzPggqp4#47-CU>sM! zaSSg?o|xTw2e?RRdEkBg7j9V7K95^p0U_k8_6*GageY6XH;-7?K-E=Hbsbb(34wcI zJ|(f%cc**6-?Xb)ka@2jofx|)B}(4dP`#d>yh+!A{?2cS^5q4 zGjXY>N!O|CxKJwBb-{gY-)h07pq~@`j6@MQ@fdYb=KitM@qgAcQfhC03%2ziI+9x+SVx}T{##}$TREPmfv1I zP6QKtU$6a0wD4}cA{gW+;?bD*WNDH07L5TY&wCBmnkX<5k|T_X^Mo6!Jo-R{58p4630l0^+a^wSe*P7Yg?N9w|6ir zIh~B7qSvPB$w+zzpd=_}uU~|#n7950>LTHEl4Rl8A(JvXZwq(2o?7je6?;Y1K_t zqKtWu{HD_VNBTe8$t+kzFfJ`aCqMQp<6T35TC>-(YA&-GA;B?{@#yDG!O%L)e{3f+ zKaWnp=h7&u^5fEoU0e8m6x!f@UVrwmJ_cH3d#jZqJX@)U4Qo?a?~A>2QXR-I9wNMT}U- zCe$?jALn3~3w9=|j2$5S@R?XcrQV-eGJtK7i^{h%;^IYJhwDUn7=ABf7 z4G^`;E1^)VYVY6FrtAM_gZ9C zr5~}W0JX_poX`NtJ&iO~%dV<6sh`{4 zY`vAM5H&5-DVU^`6hf)KU)kQYL=W({+TLu}1V`F@Hd5A${@1rR^LD+9a$(G2(C8KW z>lIc(@1B3kx6AG?S&sInpo+Vwlgz!9QD%*YEfBi=z$eNu_k&?S0Kj|%l-1U zX7fg?tTxDK)Z|az&Mck#j%GsJ(xL8X=bU=-NPcTOGj~1>me-KJ)DCIFi6u**K>Z_O z7aHsISu|m?n;DF}Dz=lvTC=>|p#RXeX6{$-Zbq&_{QI}U+;N}(`c{~W$uq#_A)U%69Z#m1Fk~kp z8y@T;-KIY2$Lyq}%dR?msQ{e&rHN?HW845X^q zZBg6MNOKe%|H;_{U;i1%X+`ZFTV4@2m z+A33C$ftGwlr79=ndBoVLo~-6__H>!BaqXc4es!2T8E+rtg{rwkv%<0qA8V9L+Q6; z-s!EC8Jn^(x9ZrXn0L*{P1wHKBU^{&_XInYh%Jz6l~{~fUCZgP4>_zSe)02wwd!46BSpme&6tS{VvrdULfH!K?3U4PISqSt(V+0gdSD>4a*e z@gkF1Oye7gtG-DbMh&#{Fx}wor9k`!Hh#j!7yd2TuK?J2-k&NGefOA9gcTkv z^r0sI!-Zxx`=1zX3uiPPVMP%#i6`s%H(C1!d}impqcb?0&dlBa6T>EX^ob-F(>P?f zamVP+2VrrToSM3ZuhR}$D-EOx%Ep$d>aHE4sZ_m|SPAbb$@Z!2Gk7^==4DXB?OUcM zH!{hqw`QzKP1`fVN*Ox}T95=9pNhWXRv?lP)(REV%u&IctO~IX=JAC0CR^%x`4o*z zUfyV5d!Fh&g&$N_Z8=a06JPOu5!|1yhq=KJPt!jND&_hF8lK$`-qf|8*((|m_%^`I zrGJ~AKp{F$pHQyTC;Z=9`OGq_d#}B&agb%IVjQR$undBQT&s+pKkE~e zK|V85hz2UdsH`Tq_OBu@j|`(wv1qc21;eNzvAvq6qObEQi)ZrjhQuzxZDf~iefxy& z?<}PQ^Nk84bcQnKM13AcurE-$NmMO=iADzN36@6(H0@-6u|5Mmt=ad<2Hgb*KpXHP z`EFI1+O_QdnKzg9dr1#tKq#tJY&fxu^ga4UTlMObCCig)Wm&w=|4egzF=#KulPzLp zhL>#7^GpR@`UEFm!RgQ^jn}D9R%kb??eDlcnwp8o3&0SNGPaPc>Y;|jPX3SQn7!gp zHzbz$d(SaT_vdOy+Kbvg(~#I9XgOM)FN>?KYb$A&m{QResr{0b*loMHV3B|IY%|Ln zs8^CIS`n<^g85oCvDvEhiwwm2!;WQIt3#2Doh)#X60*!J@`q<*I=#SVkP+Dn?2Zxl zCrdPtB7?F1`Yn=3SIcONV9nUc=lyxJ zkoqnDBQwp`?6Z7#CSfxv|B9KITKX*2LLthd>X$!=&f1Pd)AsfP-PR)5zTFBn>sX?H zf(PdNJA$=e@MWH!mSzw>4@DJfEM4o#`Jw!z@@mL-@3CGO=0krW7*B#)D3;eh*x?YIe>5hf@|u=!1BIgT7TV zTMNBpiobC)v*+Zb4N8PjRt%sz`Il`*L{76FrOJAqU-UHgPFpX#)Cis>+bh2)G#A?m zk6GkYd^c=bn6Bwq-LrNC<|%RfXuJfs#>N~CvKmj%M*Ori*E5d=a%7Of_lp0*G*j54 zDn6Bwn71m^#>lP8S{bfIYu4aB&#Fdc$nWtVm~Qr)VuO_^tF${CrQ}cEj1WGiSsrKp zY)qa@+b38tAWE>9X$@=_S~8jk%PsZ;qU?xg)j5nj;M+r|eGDQ@tFz><&@-=~TNxoEJw=)xK~&lwis#_>=cB z3u@o|fJULByX<3bUtP30WNbU}C%GHL5XdeOSgPRU6E!3wN};MD}_o~4<$)KDHfz1d8Od5-_M-P z`F3-bo5f9!*Qb?3$bvlXAG6&2$mE{zpInYj(1K~Df!+2Pt=(CfK+!nsnEZ zJ>M~yhGL{RN{-#(FeG2qfAB_QO~fPWGZEnxQI1T!#4|e{`Y7uHS~H<1ln!7EhDYO# zHI-%$Kz2% zK*am-_9zyLQ<`GR038tB^UEMnDYgu5A?;P;N;8ouqNW8Vl;MU}3x1^W)E#QT7=!l) zmiAGxmXZ{zO)?R?ZPNSeosG$@*zz0^r)5)(wPdxqiJ1TUqvXHwx*yYY7+;>eJEm)i z-AJR?Te<7?+mk=jJm8h=Wh$aW=JY`2(Vps~`H@FEbeV}%p6#pV-YHct+TUnSN95s{ z<#oP6eo0O-@$%IRehlt_TzN;a`VKBCw<3+7ObP{qkzlA)MVVRlJ8VTXH9d06nMD7$ z)}6sgDks?#_t)L)cdRmN4;Xy3CJn<#7O*{U*3#HAuYCj4tqw$`D7oO8V}>K%y5L$x zOiXFiSEvvk$^HD)L1wc9(-BW-v2A0^mf|^y2x!}wHi&QykiD+s8cKT|NhCGXYIH*z zM=&Hn@NYZN%sXJyqhwG4UpkT;x#OSWJ@$8u6H%|@G5fH#GFZuyuuz?k`I{YN_L%=9 zL}#{+S2O4G;RwtIe?{zuy1eYIF6Z*JC)R;{LO%&2)d^q2?=`Civfnnw5#7 zL6Fg^gXA9Zdk;0IEUTPs7w3L_iZ*lBCl6_fR}ZtZ`DpBIJ2f#h10{y6{-+#fem)!f zJrlJx`ZIg%#rYO|=kq?l;c&Baw9nt?a5KLiSAYhKdD;Kh!_6Xp@52qp6CG}n|H}C^ zmYh>UsMrB}Mv5$P3B!?O2*d!bs~<%jqVQdcI?wWHPlHEXC>a$JBG4RII13Riy2qb# zgqb$4wn8}4e~y{usVFQ% zbRn}6pSaooEQceBsJxnB%0lm8v#Kqjv>)s&HmIr2rXu1F%PPyXFihoL>sgb28_YY^ zNu>Nodx>&{H49MxYe$(KGB?*YHa6&GJ$P4YgCqB%Nou`|N@7)?PadsQSF-RkM1nrC zx!W##QlIo^Zw&aAA3q0?9JdE+n9ns|7f#d$w#rqb2X7wi+E+PEux)u74Zt_ ziUb*4?XCi)PF;Jn**pDl4Bw}m?uy}x@DWcn&`&J3R#E{5@%8@3qs`K9e3RgegHivy zD<2DCjcq(s2U;@usm%>u zn7`j~W}*Myu^4bF83NaMGk?gl|EN4G4;IUp@Zn_~9q^Om%>GK|`2e(2KF2vAdo%uw z%zB>;oT#+$cyrpUl_2s1gP2u;JSZ_qf6ha{<9M?L>03{_ONX2 zDqAyUQ_I+QuZuT6IkMQR8NJy1;t9X>RkOXh;7R`%Ji&-%Jq#qky2{JPma z{^w>6?zrshX7d%zk|wkWr!(4h5|(x35_U$8b#D~o$DLo)no06L9mx0RQR7njRdGp;{28=ieWmCU_N!7p1xc9 z6y@hO5vx>Q>r0g*y&yH^2ydA_ARF+SEuD{e_<61Ii)+Nu4$P;0UHR#i|GGD=C;h?{SB!(t9VyxhQIx{ zF?LM#5Bj#*ZgFrAuRoraD2Ou@5PB*){5r;i?HtYmP{J-Kr}|fao0zDX__TYzZ4OM3 zB}KnT{02Y$D?cegNh8IXrs5#dDffARQ`Qs(g(NjqL0t{088jDdqV}9-Y2=z~O0Kjm zZ3m0^HdbK-I#8Y2GR?pGJ7&&`=_!Iivr#)9*uAJUr|Hcsw_@Yut(#d_Hcd7~aRvHe z)-5dyc@0&ZbxV3-YM%f1@0k6zN~IFp#!~5)ukb`mDwT@tX7*1l{P}4svf21)$I|t8 zT%+T&zV)wW*G$U8!)K=jBIi=_McaOuVa;VNGf@?jG&4;vsYU>#W`!BH6)>n$3fWZ? zI$9w$nJ$@ZyJYez1}=O;sr85XU#&00*BtF56x~#g$>N}fsVfe{48k+X)EsRxo!XL2 z#N>|=!>1dxeuXU(;x0=JC zG#cyD=|(?D;(OqzoJpZsnJ6J+y7=}98zt0-5S&K zjj~zUzWNr8N6{i)%#Kw>kfW|J?&s=u^8u+w1@KSzANn^lZLem};Hwk`b@GV)RHpYI zGSI~l{Ij9~8KhCz?8Snq9Y#wLsnGmAv#|DVOeC<9zuWiB!Bbwsg0eWWm{ttL<=y^; z-!q#@_BJu_>za=XT=LYxWdW=hT*P{F?Vo;loPpZ1UVzS-5g@af6~ z8>H2t;g+}XWE6V_^V{8~@w-x`D>L1OXYAyI!vN-pA&;V7!teP$i_A^G@!$SFxw0&Za(zyX8M8$o}wwePnDj3I!%FE@4aKckd%7;Q~p+K z%+8si=V@6DXF18qc{5UN|x0CozEMhn~OYRIzC#f{^F1isv z1zBAq3J6#JU%Nn}_3ioz-4A~Eo_Z=0q^>b?*RgRW;=i=U%-!-z78AlH>KQ*0sfbt2 zg>6(SYepaxo?WQ^%(Z6zPM68HKyBOOExZ;`x-hyYIdPcQAjNVg*@(DP5ObU(HT-{D zYZj(%jzV?T*}OOTH;i;)ErJ3j&-Xjln$4FMJ0?j|kkvo1Wx{B(4VmT2H_ZpK z2^;d7XkT(uf4TFq7@QF_MverP7d|ifPZ;%8X@j2Gc3mG+5D)34r-qFI$uC2*p%*glOK9Mnb zx&PUTYy<1}=lqA+;VT=1v8L)EnkZKCD$c^w)42MHTZ2tTEo|05qTw2>iS5X}9ZyNB z4qL4EN%SNuw7l+^Jsrfq=0D7rIC5y{Kg>>?B!wzG&oVte;z<7+w zcOCgdb7GY9*6%+FzueQ)(|{xR6C5?s5;dq0{Lep}L)ds@5rc)-d*&%caFJwj8dFCC z<{-f&-aGG+-xA5iFBE!Olcdb7mS*uBIA}NROxh-b*m?D$n=n9&A0~OHZ;-TY z^3LLz?dCdf_~$%a9`wI)ve~kk(=P0m37tzQ=fTA%o5c;!y-US33{Uhoo@_R6c;?Ug z&Y>bF`X8T+^1RxgeTq4zrQ=QAhVM?axy{hECP_af7EvR#A$hrf!6{}xR&-CFV&)K& zZKbWco>kmOr^6 zg_i%oHhUL#K;-qntwa-hY{Gw

Mt?zKE+^{$@&m*1&ojI1g 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

#JTO0k+gvmp3=@GUX6i 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 Mj2Z}7m4Wd81GPy-1ONa4 From ddb7cb9a8531e6b7700b9353d5f0b958cf7cc55a Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Mon, 12 Oct 2026 08:40:17 +0200 Subject: [PATCH 2/2] chore: bumped deps and raised version to 3.54.0-build1 --- demos/in-worker-demo/package.json | 2 +- demos/kvvfs-demo/package.json | 2 +- demos/main-thread-demo/package.json | 2 +- demos/opfs-demo/package.json | 2 +- demos/opfs-wl-demo/package.json | 2 +- demos/sahpool-demo/package.json | 2 +- demos/sahpool-rsbuild-demo/package.json | 2 +- demos/sahpool-webpack-demo/package.json | 2 +- package-lock.json | 1325 ++++++++++------------- package.json | 22 +- 10 files changed, 590 insertions(+), 773 deletions(-) diff --git a/demos/in-worker-demo/package.json b/demos/in-worker-demo/package.json index 6a72e30..ebd7ee5 100644 --- a/demos/in-worker-demo/package.json +++ b/demos/in-worker-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/kvvfs-demo/package.json b/demos/kvvfs-demo/package.json index fd77904..32b2907 100644 --- a/demos/kvvfs-demo/package.json +++ b/demos/kvvfs-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/main-thread-demo/package.json b/demos/main-thread-demo/package.json index cf2509b..e403cce 100644 --- a/demos/main-thread-demo/package.json +++ b/demos/main-thread-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/opfs-demo/package.json b/demos/opfs-demo/package.json index 681e338..991bc98 100644 --- a/demos/opfs-demo/package.json +++ b/demos/opfs-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/opfs-wl-demo/package.json b/demos/opfs-wl-demo/package.json index 8592c2e..4bc6a5b 100644 --- a/demos/opfs-wl-demo/package.json +++ b/demos/opfs-wl-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/sahpool-demo/package.json b/demos/sahpool-demo/package.json index 2268a58..8c1b47e 100644 --- a/demos/sahpool-demo/package.json +++ b/demos/sahpool-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/sahpool-rsbuild-demo/package.json b/demos/sahpool-rsbuild-demo/package.json index 72df949..6496b39 100644 --- a/demos/sahpool-rsbuild-demo/package.json +++ b/demos/sahpool-rsbuild-demo/package.json @@ -9,6 +9,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "@rsbuild/core": "^2.2.3" + "@rsbuild/core": "^2.2.12" } } diff --git a/demos/sahpool-webpack-demo/package.json b/demos/sahpool-webpack-demo/package.json index e858acd..d33f71d 100644 --- a/demos/sahpool-webpack-demo/package.json +++ b/demos/sahpool-webpack-demo/package.json @@ -9,7 +9,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "webpack": "^5.110.3", + "webpack": "^5.111.1", "webpack-cli": "^7.2.3", "webpack-dev-server": "^6.0.0" } diff --git a/package-lock.json b/package-lock.json index 791463c..6b364ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,28 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.53.4-build2", + "version": "3.54.0-build1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlite.org/sqlite-wasm", - "version": "3.53.4-build2", + "version": "3.54.0-build1", "license": "Apache-2.0", "workspaces": [ "demos/*" ], "devDependencies": { - "@types/node": "^26.5.0", - "@vitest/browser": "^5.0.0", - "@vitest/browser-playwright": "^5.0.0", - "happy-dom": "20.14.0", - "lefthook": "2.1.12", - "oxfmt": "^0.67.0", - "playwright": "^1.63.0", - "publint": "^0.3.24", - "tsdown": "^0.23.0", + "@types/node": "^26.6.5", + "@vitest/browser": "^5.0.3", + "@vitest/browser-playwright": "^5.0.3", + "happy-dom": "21.0.1", + "lefthook": "2.2.1", + "oxfmt": "^0.72.0", + "playwright": "^1.64.0", + "publint": "^0.3.25", + "tsdown": "^0.23.1", "typescript": "7.0.2", - "vitest": "^5.0.0" + "vitest": "^5.0.3" }, "engines": { "node": ">=22" @@ -34,7 +34,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/kvvfs-demo": { @@ -43,7 +43,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/main-thread-demo": { @@ -52,7 +52,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/opfs-demo": { @@ -61,7 +61,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/opfs-wl-demo": { @@ -70,7 +70,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/sahpool-demo": { @@ -79,7 +79,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/sahpool-parcel-demo": { @@ -97,7 +97,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "@rsbuild/core": "^2.2.3" + "@rsbuild/core": "^2.2.12" } }, "demos/sahpool-webpack-demo": { @@ -106,7 +106,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "webpack": "^5.110.3", + "webpack": "^5.111.1", "webpack-cli": "^7.2.3", "webpack-dev-server": "^6.0.0" } @@ -195,9 +195,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", "dev": true, "license": "MIT" }, @@ -883,9 +883,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.148.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", - "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "version": "0.153.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.153.0.tgz", + "integrity": "sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==", "dev": true, "license": "MIT", "funding": { @@ -893,9 +893,9 @@ } }, "node_modules/@oxfmt/binding-android-arm-eabi": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.67.0.tgz", - "integrity": "sha512-2olh3ioEmc4gRzQm7jxyB1b/PFBoFvTq8KdgYySeNpysDtA6DEg2Mvya4/I6flhL7G0eOrE8RD7JCNCIMhE16Q==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.72.0.tgz", + "integrity": "sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw==", "cpu": [ "arm" ], @@ -910,9 +910,9 @@ } }, "node_modules/@oxfmt/binding-android-arm64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.67.0.tgz", - "integrity": "sha512-ulfw8EHN1MBq/MFFDXw2/M1VAFu5mRUcnuZ8Hqbv9viAnFzO9t1jKSAsDqKYYDGMlytF/uj6Z5z5n/tHupnKhw==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.72.0.tgz", + "integrity": "sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA==", "cpu": [ "arm64" ], @@ -927,9 +927,9 @@ } }, "node_modules/@oxfmt/binding-darwin-arm64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.67.0.tgz", - "integrity": "sha512-MfONZx/O2o9M5v2jDFol556G9+A+P9xCuJ4DZ+qhE+RnaCdoscy6Eu5nq1dbuNxhwdJyZ6kLI7fnG9mwEeOeGg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.72.0.tgz", + "integrity": "sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA==", "cpu": [ "arm64" ], @@ -944,9 +944,9 @@ } }, "node_modules/@oxfmt/binding-darwin-x64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.67.0.tgz", - "integrity": "sha512-CYnIx5LvFVJnyJcCqwH2jxMKjFjqo5678MPjdmNFoSGMhlOvZ/xRZqvhDcolKrXc8fezW3AKh+C4wyoFuWOSSg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.72.0.tgz", + "integrity": "sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw==", "cpu": [ "x64" ], @@ -961,9 +961,9 @@ } }, "node_modules/@oxfmt/binding-freebsd-x64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.67.0.tgz", - "integrity": "sha512-7/iF1orvIS9mxhKUqnmtMgm+OrSQ5acPwuvdQrm6ECgqbwPmC+Pw9cdke3sNfVN6pT2hbJ58+jP8BCThl5HXOg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.72.0.tgz", + "integrity": "sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ==", "cpu": [ "x64" ], @@ -978,9 +978,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.67.0.tgz", - "integrity": "sha512-yy+OGys07IZOpOmYPZoObKyUQLkfxeQqeCypk+1jaZd8HGo77hzvU1Jg8X3+W75o+9lszOjBfg0nkGtlwYywXw==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.72.0.tgz", + "integrity": "sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA==", "cpu": [ "arm" ], @@ -995,9 +995,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-musleabihf": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.67.0.tgz", - "integrity": "sha512-wPIeeigXgJpwNw3wydYRt3U9iN9Y/ejpOZuYL9IA7igxWs7LIQMOkhKxTumRvy6dIv0iXKk3RTw3Vmjg0i+2sg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.72.0.tgz", + "integrity": "sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg==", "cpu": [ "arm" ], @@ -1012,9 +1012,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.67.0.tgz", - "integrity": "sha512-0+XNxcdbkTfxdcD4qW6Ci9n+mBNJ8xTBumnxKvKBmRFOdx0Wf8/KiHjCJayooXmYkqRpRVd98Q5egvzx5BLSgQ==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.72.0.tgz", + "integrity": "sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g==", "cpu": [ "arm64" ], @@ -1032,9 +1032,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-musl": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.67.0.tgz", - "integrity": "sha512-I75LKPJyNOYUzkqAiAMIE31+Ye7xtQXZdoty1IXn4B+bw5Zpmez5wfG19ejGpNnS/BzQ7LFS+7jxuTPb+vHiZw==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.72.0.tgz", + "integrity": "sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ==", "cpu": [ "arm64" ], @@ -1052,9 +1052,9 @@ } }, "node_modules/@oxfmt/binding-linux-ppc64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.67.0.tgz", - "integrity": "sha512-c2M5iRpe1QMZSRE/UvZoPdXBWb5Ic/ycvOyNiKCqPwQ/OyOKIMiJs02ynlNnjb7ZZJnRXYLmGcohoINOcwDK3w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.72.0.tgz", + "integrity": "sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg==", "cpu": [ "ppc64" ], @@ -1072,9 +1072,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.67.0.tgz", - "integrity": "sha512-dQzzYlV24Udhfm5ECuSdgqRvFJU/CGHzcYYEO3dLM6W6+CHiBFrq9OjIllkdCcPhsoSQ8o223Dja84MOSzed9A==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.72.0.tgz", + "integrity": "sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw==", "cpu": [ "riscv64" ], @@ -1092,9 +1092,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-musl": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.67.0.tgz", - "integrity": "sha512-rFNq1CgX4qMJANOq42LkAs90JE80GpiaEohAV2qn/gT2hGjQTW1zBO5zQBxArI4926pM1OSzo3CN0tBszGBIaA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.72.0.tgz", + "integrity": "sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ==", "cpu": [ "riscv64" ], @@ -1112,9 +1112,9 @@ } }, "node_modules/@oxfmt/binding-linux-s390x-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.67.0.tgz", - "integrity": "sha512-Sky6rEdz2o5IGq01lPhS12yEvDdChVEcaYrcLHkveh4Fx0qPjljE/Iul6SX/bRMl6lNc8J7J/mDQdzgBdA++Pg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.72.0.tgz", + "integrity": "sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ==", "cpu": [ "s390x" ], @@ -1132,9 +1132,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.67.0.tgz", - "integrity": "sha512-vPXmlNORV8AZq2Ocxh07pxwMjfENUWCV/eZArnao0qC3NO/hDeTVkQvee7SJJUbIiF5PZbBa4kYmaXnu7Rk58w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.72.0.tgz", + "integrity": "sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ==", "cpu": [ "x64" ], @@ -1152,9 +1152,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-musl": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.67.0.tgz", - "integrity": "sha512-x/WAtFqYtVr3vZ9ni8nr4kn9whSitg8fOljq/pZzBpxopRdY1BMLZCZkrbIbaBcYkm46qGbqVea2FCWmtQ2P9w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.72.0.tgz", + "integrity": "sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ==", "cpu": [ "x64" ], @@ -1172,9 +1172,9 @@ } }, "node_modules/@oxfmt/binding-openharmony-arm64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.67.0.tgz", - "integrity": "sha512-eRw9Neh4/aA6i+q/R3WU1gGQINhVM0J4fXIm6t27caOamkr/37uAkp1IdBx4zlJH97hmXR63z/q9n5c5dN7MzA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.72.0.tgz", + "integrity": "sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ } }, "node_modules/@oxfmt/binding-win32-arm64-msvc": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.67.0.tgz", - "integrity": "sha512-YIMvb+sGNYN2uc6+QK2HLPeEKM2vl7QZ5onQzpAJRb6pnf0DwUFP5R8tdS9R0l8hdUil2gu4Uxd0Yxrop0iT4w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.72.0.tgz", + "integrity": "sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw==", "cpu": [ "arm64" ], @@ -1206,9 +1206,9 @@ } }, "node_modules/@oxfmt/binding-win32-ia32-msvc": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.67.0.tgz", - "integrity": "sha512-LzmU9MyACPzwNDIK0ItMedHPz735Ug7ELWguxo4/kuy6zWuDoeglOAEFCY8jLg0PzRpFO3hDyLFe2Gu2eFDeGA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.72.0.tgz", + "integrity": "sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A==", "cpu": [ "ia32" ], @@ -1223,9 +1223,9 @@ } }, "node_modules/@oxfmt/binding-win32-x64-msvc": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.67.0.tgz", - "integrity": "sha512-sbQOIDNLUEeVZcAJcSL5VURn7kfjvilPviody4Yl5n8lQCDtUm+C9oHTTwZS/m4d/Z6Vv3jNEiAofH932NPPCg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.72.0.tgz", + "integrity": "sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw==", "cpu": [ "x64" ], @@ -3121,9 +3121,9 @@ } }, "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", - "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.13.tgz", + "integrity": "sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==", "cpu": [ "arm" ], @@ -3138,9 +3138,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", - "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.13.tgz", + "integrity": "sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==", "cpu": [ "arm64" ], @@ -3155,9 +3155,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", - "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.13.tgz", + "integrity": "sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==", "cpu": [ "arm64" ], @@ -3172,9 +3172,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", - "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.13.tgz", + "integrity": "sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==", "cpu": [ "x64" ], @@ -3189,9 +3189,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", - "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.13.tgz", + "integrity": "sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==", "cpu": [ "x64" ], @@ -3206,9 +3206,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", - "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.13.tgz", + "integrity": "sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==", "cpu": [ "arm" ], @@ -3223,9 +3223,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", - "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.13.tgz", + "integrity": "sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==", "cpu": [ "arm64" ], @@ -3243,9 +3243,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", - "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.13.tgz", + "integrity": "sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==", "cpu": [ "arm64" ], @@ -3263,9 +3263,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", - "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.13.tgz", + "integrity": "sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==", "cpu": [ "ppc64" ], @@ -3283,9 +3283,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", - "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.13.tgz", + "integrity": "sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==", "cpu": [ "s390x" ], @@ -3303,9 +3303,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", - "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.13.tgz", + "integrity": "sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==", "cpu": [ "x64" ], @@ -3323,9 +3323,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", - "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.13.tgz", + "integrity": "sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==", "cpu": [ "x64" ], @@ -3343,9 +3343,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", - "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.13.tgz", + "integrity": "sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==", "cpu": [ "arm64" ], @@ -3360,9 +3360,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", - "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.13.tgz", + "integrity": "sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==", "cpu": [ "arm64" ], @@ -3377,9 +3377,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", - "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.13.tgz", + "integrity": "sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==", "cpu": [ "x64" ], @@ -3401,13 +3401,13 @@ "license": "MIT" }, "node_modules/@rsbuild/core": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-2.2.3.tgz", - "integrity": "sha512-oJrYtYDhb7AMwY8HIda2hgMuuxHkYPYar4svdS5uTq0fXY0M1wLfllkTQz0d729pNJ4S//6GUM1WX5LsW2mFLw==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-2.2.12.tgz", + "integrity": "sha512-SnJ81Jf9ZGms8hUq0FGxrqlUxdHKV76VK9gxrEdtWLbTic+qRt0SIAsk5NdIr1tXFzqzQ6Fqeffs+K1EUuZEHw==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/core": "~2.2.2", + "@rspack/core": "~2.2.8", "@swc/helpers": "^0.5.23" }, "bin": { @@ -3426,32 +3426,32 @@ } }, "node_modules/@rspack/binding": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.2.tgz", - "integrity": "sha512-gWjKDQfVQJSBh/I+y9WTlyERsiShSJ7eI6Yl0SJs/6gjx8t4ixuwWCsaEFFjwSL4nSn6ML5hNQ7UFY3gj72BWA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.8.tgz", + "integrity": "sha512-c9flkSua3khHnOKBCRk8BkHGOwU9YB7niv+5JfQXiLZIvJmgKsZ7PD8QrFklMhsJT3oVAc6c9GN7/wy1YkACjA==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "2.2.2", - "@rspack/binding-darwin-x64": "2.2.2", - "@rspack/binding-linux-arm64-gnu": "2.2.2", - "@rspack/binding-linux-arm64-musl": "2.2.2", - "@rspack/binding-linux-ppc64-gnu": "2.2.2", - "@rspack/binding-linux-riscv64-gnu": "2.2.2", - "@rspack/binding-linux-riscv64-musl": "2.2.2", - "@rspack/binding-linux-s390x-gnu": "2.2.2", - "@rspack/binding-linux-x64-gnu": "2.2.2", - "@rspack/binding-linux-x64-musl": "2.2.2", - "@rspack/binding-wasm32-wasi": "2.2.2", - "@rspack/binding-win32-arm64-msvc": "2.2.2", - "@rspack/binding-win32-ia32-msvc": "2.2.2", - "@rspack/binding-win32-x64-msvc": "2.2.2" + "@rspack/binding-darwin-arm64": "2.2.8", + "@rspack/binding-darwin-x64": "2.2.8", + "@rspack/binding-linux-arm64-gnu": "2.2.8", + "@rspack/binding-linux-arm64-musl": "2.2.8", + "@rspack/binding-linux-ppc64-gnu": "2.2.8", + "@rspack/binding-linux-riscv64-gnu": "2.2.8", + "@rspack/binding-linux-riscv64-musl": "2.2.8", + "@rspack/binding-linux-s390x-gnu": "2.2.8", + "@rspack/binding-linux-x64-gnu": "2.2.8", + "@rspack/binding-linux-x64-musl": "2.2.8", + "@rspack/binding-wasm32-wasi": "2.2.8", + "@rspack/binding-win32-arm64-msvc": "2.2.8", + "@rspack/binding-win32-ia32-msvc": "2.2.8", + "@rspack/binding-win32-x64-msvc": "2.2.8" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.2.tgz", - "integrity": "sha512-/le/AvV4HSinXTPs2Lqpujxt189Z5T10Ggt96QzckLRPvIchzqoavVDDjltzC7XcaZ87XCH/X06jNKgzkcBBNA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.8.tgz", + "integrity": "sha512-d6GuY/k7kJk7SOXmruIz0m+2fIXaLv2SnBHEYsbvBzE7ZO6QXq7fSABWFWNnSnNu+brYHA5Dr/skV81bXgTTCw==", "cpu": [ "arm64" ], @@ -3463,9 +3463,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.2.tgz", - "integrity": "sha512-uFIcUPUXiPxM6ljenLafp5TemT8eLZm1riRn8fJYmpqNCK+aCcTaud18XHZpI5SjzzcY+xUHfVShgvNzKXuf2g==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.8.tgz", + "integrity": "sha512-xCVou/jJASjEAjwy1T3hPJcJqA5QZASJfUwHqEk+nA0v44MagwH8tM8lsOvRfhzR7N2+YFac1rfZOUT8uM3awg==", "cpu": [ "x64" ], @@ -3477,9 +3477,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.2.tgz", - "integrity": "sha512-Pjby4pDSMNJQK2VBzpgCj6lb+DGuenS1fEDb6xi5/apbJb9v5WE+e43Mz7i+XqgXS8e846pjaONV3KM5WKB1LQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.8.tgz", + "integrity": "sha512-Zy/ss6YAQTjOWKDkcWrbKtu+pySltqT22wn68nlrWKygPWLNmMdU5anlsnwRTIuQ3MF0YJRS42ARauVtlqvRQw==", "cpu": [ "arm64" ], @@ -3494,9 +3494,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.2.tgz", - "integrity": "sha512-0u9O7tTVT2z+F6o/eEY6f6+My8Jn9U56QiBwkfy90ZaoAfZyQSSTxqaK/zA7W43oFxQefeCpiPas27VUzrSakw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.8.tgz", + "integrity": "sha512-lxgp5O8PhL3St9p82llHoNoeWzp9jltW5S9F00p00XPJZHUIuxbwfLSzn/6Wg86USEmafLoBkyD9CM8rBd3SNQ==", "cpu": [ "arm64" ], @@ -3511,9 +3511,9 @@ ] }, "node_modules/@rspack/binding-linux-ppc64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.2.tgz", - "integrity": "sha512-N3lVnhq5qOvpmP5n386JzR1GcE8HzAqq4/r440Z6yle9m7PhVFJ6oXVWxgaDTYV0mtv9YLJmaG+YrjYfUa1vuA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.8.tgz", + "integrity": "sha512-MY+YqpT02tcDCMgHy+IewQsaz7ql4mbJaAqqMlTIqvQwAUl9dXEP7BL352OgCxm9VRebTldE5lK99A3wVd3zqA==", "cpu": [ "ppc64" ], @@ -3528,9 +3528,9 @@ ] }, "node_modules/@rspack/binding-linux-riscv64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.2.tgz", - "integrity": "sha512-ReClZyp32/rJkUDV/oGDU0X6BCFyEkTR6r4stFwm/qOOaG6mUMRzZe4gur8Yh979p4Hiz9EdkmfEHY02GBXcaQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.8.tgz", + "integrity": "sha512-wmN9OigSGNGCKY+AOYaWI8LJcIi8qvs5KjueBueCKOnTV6MPIEujA75QZH1pehTTYKvdGv7r2EtUXUmWpn7/SQ==", "cpu": [ "riscv64" ], @@ -3545,9 +3545,9 @@ ] }, "node_modules/@rspack/binding-linux-riscv64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.2.tgz", - "integrity": "sha512-mqsorvTNerr3r8zI35NFTPYATPDlhepdiUhZjKT6ylqpHlP7vLU9fp4aEMK/CuTv2f+IVsa0+iZqtMxHs2tSjw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.8.tgz", + "integrity": "sha512-ZcQMYR10hLh581zs9MFnFFn0F7wyt5fkDffyukeMHJEoPJrbkfl6cQtsUdpQnZ+mYGYS5KydD1DT9/eMH65jjw==", "cpu": [ "riscv64" ], @@ -3562,9 +3562,9 @@ ] }, "node_modules/@rspack/binding-linux-s390x-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.2.tgz", - "integrity": "sha512-ql2Jub8QYWSugBppmj2u0SjcIj6fOQuAaLCYQOqU7zbvz/uuWTfoqmdWKExwrxeCU9Tzt7emVM0ETuVEpoca+A==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.8.tgz", + "integrity": "sha512-ahBiE+Ir1FMYvStYicihhSJlS2YRagxtry0jWH8zW287o7C0eiHJ+pteJHHC15T5RJqm0j6w5TuwYe+F9AYxxg==", "cpu": [ "s390x" ], @@ -3579,9 +3579,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.2.tgz", - "integrity": "sha512-MNYKYEHrtIVEno2q5rgpou/JVffRwn109xPK3kxct95EojHsniNa8jwy6eEHeOazP4EN60Si7NElE3aQ6JssHw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.8.tgz", + "integrity": "sha512-dncEI515NoPXh3zzWk06Rb3mhSV76myiFKqXiJ8K4fVAe5x/RlweMhvPhHhm7RnIMeBld7BeStzOqj38XFsWGA==", "cpu": [ "x64" ], @@ -3596,9 +3596,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.2.tgz", - "integrity": "sha512-y9/9CmE8lrECaF17GAhacibTL+SvlEPEotQnUuBFC/WFtXh8hU2E7a7bAkpYGSLH6kM0nrJZHO3hTvM1wdWOJw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.8.tgz", + "integrity": "sha512-pfFyU03PjD0GaQG8zOQOHwq51rrJZetXjTGpMmz7iA1hq/f9lChJsDWrC8/7VXeQLwBofLZlOODqe8OM8OBzgA==", "cpu": [ "x64" ], @@ -3613,9 +3613,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.2.tgz", - "integrity": "sha512-VbDIjjeFwZvMSKAOGY5IbU6lLzt6AHHHncTdMMkZ94Xk7O2BOHe9BXDV32Ln29TIW2C8m1fdxfPZWDiecVghUQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.8.tgz", + "integrity": "sha512-3mOJuZTrF56jOh/GD9chLMJKbzPZ6Ty2OIML7+lLz0Yk2XS/xWRfLn85Dmnkb/O6UF65x7+p8VPAIZlBtLTclw==", "cpu": [ "wasm32" ], @@ -3629,9 +3629,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.2.tgz", - "integrity": "sha512-rfcNg0W3ZPZvXma1gTyEt9/Z8FxASIaQr+sMWTSaTPPaeU3xY1+0hYcrD0kUFNs3/5L4u63myI4R8qRXiuW3pA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.8.tgz", + "integrity": "sha512-Cu/RMZT/16s+67xhl6X1pswetL3GLSQl+LnugKRh08Ul21A/tR7vxC4g4aih4u9k5SXCAngxFUt8zAjKnHIBqA==", "cpu": [ "arm64" ], @@ -3643,9 +3643,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.2.tgz", - "integrity": "sha512-TFPvr9RZw9oHIhooDhXHzWjKcHpGPTxkznSeM2poIWU0CdEuua2rVUfsrriTF1Dmx+9kMly61DQmyOHCbb+b2g==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.8.tgz", + "integrity": "sha512-H/erd6di8OapZhhM0raA/7XduPn9jusfLMeO1XF+AmF9WF3HzHgMjha1j+KwtPgQnaH69w6AhY+G2472VIwQmw==", "cpu": [ "ia32" ], @@ -3657,9 +3657,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.2.tgz", - "integrity": "sha512-GvEGyL594dtWN9SoVnKWh0exrM8WLInaUjwcuA2JKbCi1ak/9iHxip/U1dY3DuVqBYBhmvYq96JPbl91xnzFjg==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.8.tgz", + "integrity": "sha512-BziHSUlIQM0MliCqdcHuBXSkQGtPoHQTXJce7fsgnTAzQFgPeog92qTNezYI4IrQ7pQouyiVJ2HPieUbVPRKQQ==", "cpu": [ "x64" ], @@ -3671,13 +3671,13 @@ ] }, "node_modules/@rspack/core": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.2.tgz", - "integrity": "sha512-/yztfDZR5syIPBrUpzBpL+6fhhl0IHBPcXlNr4tOMBULbocFIz7Z4/cqvf1ix0DBbKpIGx99v6N1IDbk2gi8hw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.8.tgz", + "integrity": "sha512-JugsVrnbMGNYzMH++7gR9enygpP/lAo9PbVRq3XmJg0ryIvCpST0XJjBcccaSjYaaPamsjrddihmgVLMFp+yXw==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/binding": "2.2.2" + "@rspack/binding": "2.2.8" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -4008,9 +4008,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", - "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", "dev": true, "license": "MIT", "optional": true, @@ -4132,9 +4132,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.5.0.tgz", - "integrity": "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==", + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "dev": true, "license": "MIT", "dependencies": { @@ -4545,16 +4545,16 @@ } }, "node_modules/@vitest/browser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.0.tgz", - "integrity": "sha512-JC9FG5xIRxPHXJPcdCaluIJcEoeM0IwGQ3xneuJk09LXKHRNs40BqWDWymQikbb20yOpYvzpKzmYgPRuSzKmvg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.3.tgz", + "integrity": "sha512-7KHIkVA/gTRxQV9qPa9qLK+g5INZG6iRrlwXSFG5EKsOomW3UzzW7wsdt1Yp5PufzQ43lniuONlb4lUVCC2qSg==", "dev": true, "license": "MIT", "dependencies": { "@blazediff/core": "1.10.0", - "@vitest/mocker": "5.0.0", - "@vitest/ui": "5.0.0", - "@vitest/utils": "5.0.0", + "@vitest/mocker": "5.0.3", + "@vitest/ui": "5.0.3", + "@vitest/utils": "5.0.3", "magic-string": "^1.2.3", "pngjs": "^7.0.0", "sirv": "^3.0.2", @@ -4565,18 +4565,18 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.0" + "vitest": "5.0.3" } }, "node_modules/@vitest/browser-playwright": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.0.tgz", - "integrity": "sha512-N+gED9y4/8pypaHjz/x0ah3CjoBr+N0hWWT+Gq4VXtMzyB+rUIdHni0ulzpD1j4H77iWy5Jg8PRMlVn6kjxo6g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.3.tgz", + "integrity": "sha512-rYBHwIFL/ZtI6dl0rbrAatScXCrvX+TL2BX2AGOigkC1Y6u3rIWw8KMQJJMS4drSa1ksMCmZU2wpgwdE7kqu3g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/browser": "5.0.0", - "@vitest/mocker": "5.0.0", + "@vitest/browser": "5.0.3", + "@vitest/mocker": "5.0.3", "tinyrainbow": "^3.1.1" }, "funding": { @@ -4584,7 +4584,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "5.0.0" + "vitest": "5.0.3" }, "peerDependenciesMeta": { "playwright": { @@ -4593,14 +4593,14 @@ } }, "node_modules/@vitest/mocker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.0.tgz", - "integrity": "sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.3.tgz", + "integrity": "sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.31", - "@vitest/spy": "5.0.0", + "@vitest/spy": "5.0.3", "estree-walker": "^3.0.3", "magic-string": "^1.2.3" }, @@ -4621,9 +4621,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.0.tgz", - "integrity": "sha512-PVRNuB3wpReb4SQEs4zTKM4KWFhQ5pw3spE8naoDJNB5T5aWRzGKHwXcLUllr0WeOTXpB6bSr3CJLo5+7XQSSQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.3.tgz", + "integrity": "sha512-3hr5eV5z2ff0l2Q1vaKQbB4j3M3tElw8stDokEOTqXJB3Es5VrT8gBRIMY59gGuFp8Y61sWlWFK1aNUH5dHDYw==", "dev": true, "license": "MIT", "dependencies": { @@ -4634,9 +4634,9 @@ } }, "node_modules/@vitest/spy": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.0.tgz", - "integrity": "sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.3.tgz", + "integrity": "sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==", "dev": true, "license": "MIT", "funding": { @@ -4644,13 +4644,13 @@ } }, "node_modules/@vitest/ui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.0.tgz", - "integrity": "sha512-h2FIFwggCY2GxUd2UdQoYNVQkOIqEQLPhNREcl3FUiRsdzQep7NWwYbSmhGEA9nFLPDq5pXzRMcBZQU8Py83sg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.3.tgz", + "integrity": "sha512-9dfvqDBvSbHM6y9YVXxAypkl2z7mrWozK/JFo237qI0cj/3M/kzDKiVZqzi3TE54Ler7Jditud7OMBZCyUvRHA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "5.0.0", + "@vitest/utils": "5.0.3", "fflate": "^0.8.3", "flatted": "^3.4.4", "pathe": "^2.0.3", @@ -4661,17 +4661,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.0" + "vitest": "5.0.3" } }, "node_modules/@vitest/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-dO++xL3vDfvhTAVimfkuQUA3k+JClIF1i1vAkPqpcGAthRmeWnXmHB7YPViPvgCwviX8u7Y5W1u2N//AaQr3fw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.3.tgz", + "integrity": "sha512-77fDTZv8eu1CzlIfgPU2yrl5MXSUaUAOvgdZEeVm3X3WIxUubIX2SforqS6176lT32HCF6uBVMYVqfHxw7o6eg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "5.0.0", + "@vitest/pretty-format": "5.0.3", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.1" }, @@ -4854,10 +4854,10 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/@yuku-codegen/binding-android-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.9.4.tgz", - "integrity": "sha512-6ViGFAr+N2Yjnc8wBx16wJZGB0pGmClILO+FUC3kzwEydfjXQovWEdcFyl98RVtWdj9ahS41XXe2zKFl+L3uWg==", + "node_modules/@yuku-core/binding-android-arm64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-android-arm64/-/binding-android-arm64-0.19.0.tgz", + "integrity": "sha512-wdL2XmTiZixAOaHk9Z0JJZ8u9Qm8d333Zjpc6gaxXFX+UR5BlsfxZ7a2+2Rm71pamppsPYGUGFq2oVLbh6DISw==", "cpu": [ "arm64" ], @@ -4868,10 +4868,10 @@ "android" ] }, - "node_modules/@yuku-codegen/binding-darwin-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.9.4.tgz", - "integrity": "sha512-0BTB70ha+wRsz6fI5HosevJpMmvgndmf+6ND1OneFKCrWhNzX/2xIQ36Z8rUgv5bpnWjKl6bRvzSFV3PU+WOlQ==", + "node_modules/@yuku-core/binding-darwin-arm64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-darwin-arm64/-/binding-darwin-arm64-0.19.0.tgz", + "integrity": "sha512-7sNJa6XJhyetnTy64jw3NEi4YgUcezHk1G5GH9FSvXAuC8wIlbaOwT9lgq5qo5sspjrZJQlBR1TWflP49uRpMw==", "cpu": [ "arm64" ], @@ -4882,10 +4882,10 @@ "darwin" ] }, - "node_modules/@yuku-codegen/binding-darwin-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.9.4.tgz", - "integrity": "sha512-9QVVqq8LCD6v+Gl099u32YJ0999HBCoe09ecIeifKTi4Y1azX44DkF9q9pP2lxgwRUvR3GmWl5k1pLe3ojR2rg==", + "node_modules/@yuku-core/binding-darwin-x64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-darwin-x64/-/binding-darwin-x64-0.19.0.tgz", + "integrity": "sha512-pTC7dYEc59isdyizc3nsuyFNBu2LU5wMYZ1be6UMr59PY/AJNtO1aBLWV0MgL/z7C1nv/2sX4TNjGgKLoeevJw==", "cpu": [ "x64" ], @@ -4896,10 +4896,10 @@ "darwin" ] }, - "node_modules/@yuku-codegen/binding-freebsd-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.9.4.tgz", - "integrity": "sha512-Qm3ky33Em9w1XVSryq+D/arLVapeqp0Bu1719UGV6olmfp4kTD+NfsLG9bRx5hOJSu1Zl3r9LbyTP1oTmcHAsg==", + "node_modules/@yuku-core/binding-freebsd-x64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-freebsd-x64/-/binding-freebsd-x64-0.19.0.tgz", + "integrity": "sha512-xrZjF6XOEwyLOiDIfrwDdRCS6ghxcJeirNC1KivQhVcUwlRonaU79S3/Uiyx3lBylPnT8qKJ3/aMT+H52nGTJQ==", "cpu": [ "x64" ], @@ -4910,10 +4910,10 @@ "freebsd" ] }, - "node_modules/@yuku-codegen/binding-linux-arm-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.4.tgz", - "integrity": "sha512-euKmS7pnkeJylEN6+9bfu0jHtGfbQRfFBIpmTe8YVnWzQ5Rjyrns13+1kao2RSS9DNkucX1RXIdiTvQoDUXF0w==", + "node_modules/@yuku-core/binding-linux-arm-gnu": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.19.0.tgz", + "integrity": "sha512-0OyIH53C0I1CbADHn9FSdCfX5qbpeLwJhmOVhonFJNYheybOnkSJ50qGMfTJIb8y5zrwqvLs7FVBvz6Fk8maZg==", "cpu": [ "arm" ], @@ -4927,10 +4927,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-arm-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.4.tgz", - "integrity": "sha512-7JTizi2O+ks9/dLPDLYmVLsYQUC9Fxu0e6LNA+F6FFQ/sV2o7owBb1eTccMKkgauWGGUpJYQvlXrCKpGwguvhA==", + "node_modules/@yuku-core/binding-linux-arm-musl": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm-musl/-/binding-linux-arm-musl-0.19.0.tgz", + "integrity": "sha512-z/iPfkCOCSXE34VXNt0uP1ORSW+4mEa9b5CiJcWZeqZH08g49bFU/jRM2T04f+Wpw5mJ6HIzNBiojxeAbrHjeg==", "cpu": [ "arm" ], @@ -4944,10 +4944,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.4.tgz", - "integrity": "sha512-f7eLYDwmcz56Jzvp8UmXUehFzTAn6hEHt64GDWNWGSqrphHRvWLEshQ+sQv8DfNpkXFaOQ49erl4gb2Wm0JM+A==", + "node_modules/@yuku-core/binding-linux-arm64-gnu": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.19.0.tgz", + "integrity": "sha512-jLNTi+gzaRwBJ+gwhCJ+rDb5dmx/8hEBx93UWd7hjMSqPTL1D1wvVSvXVAldV5kALvju7b0/m51EHEhs4+I1fA==", "cpu": [ "arm64" ], @@ -4961,10 +4961,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-arm64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.4.tgz", - "integrity": "sha512-bLdjCgo+u3dU3HH/t+WZ8FsAo2IgdOzruTHZ+XTFquj6j//QJjH9xfyRtu7h65lCT3CQVW9aGEe6/A/HPyA9KQ==", + "node_modules/@yuku-core/binding-linux-arm64-musl": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.19.0.tgz", + "integrity": "sha512-YwyPIdW/rN2Fmv0MTFWi47FaB3F9g+2b+sJISyAw83Yd60RWH4T3Nx6XkAHHVN+uKJNBAd6So7/BVihSiFYvuQ==", "cpu": [ "arm64" ], @@ -4978,10 +4978,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-x64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.4.tgz", - "integrity": "sha512-hDMB71QCDx2AAxhlCBgakngMAa4KK6f6rcTt9v8nrzoXs681cmZultGeZk0tjONxli+N+VMhXQUoiVCSJuKiQg==", + "node_modules/@yuku-core/binding-linux-x64-gnu": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.19.0.tgz", + "integrity": "sha512-/vskaAXVX3ESR43FiTdfiYS7z1b9uoQJwVQ/0RgUHgN2sWoAyCZs+aX4CgU7eKGIHTVfp9VFwv+c+2XchYiEtQ==", "cpu": [ "x64" ], @@ -4995,10 +4995,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-x64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.4.tgz", - "integrity": "sha512-uk1hOZA79AqziAH9A/eSD05VchNRdnLb6zxFGHhCbLYeeGYL+KOEL0+kCIPtaKuQ7wdxDOooiKE1D0jpaWQ0aA==", + "node_modules/@yuku-core/binding-linux-x64-musl": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-x64-musl/-/binding-linux-x64-musl-0.19.0.tgz", + "integrity": "sha512-FuXL5igeSKib9Rye02TdH+D6SQezTyGxIATMu1Qsn/QywrzwpGl35OLpS2C1x5vpGLeVE2XgiLd5mVPFHmIglQ==", "cpu": [ "x64" ], @@ -5012,10 +5012,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-win32-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.9.4.tgz", - "integrity": "sha512-IbZuNVrctjts5lAKUEd9ppnzvylaPdYBTv8AVDtY6EyQ5hpgUfsReqbqODJVGpn2/uIk1fa1jWP012orPoiK+A==", + "node_modules/@yuku-core/binding-win32-arm64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-win32-arm64/-/binding-win32-arm64-0.19.0.tgz", + "integrity": "sha512-YuJAe7zEKT1Xa7LuHlhGJpPnYQeVtvo0rZvNjJRqkH0hQGOw4C8QeP30Tg5VKGzZfo2x8CjhjEhKt4TmLwfmdg==", "cpu": [ "arm64" ], @@ -5026,196 +5026,10 @@ "win32" ] }, - "node_modules/@yuku-codegen/binding-win32-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.9.4.tgz", - "integrity": "sha512-UqC4C0PlVAPEQ8fYr0AamuW2zKAkqQFiaaQ88Rl3YlzSNlshj+VmDoSbJRw4TFYL22+Vw53zDSJ95aXyjJN/aw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-parser/binding-android-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.9.4.tgz", - "integrity": "sha512-x+dZef5ulszaYzgjHLUgnhDXAgJsGfodl30JuTinfLN5mEyB50burpUuyUqufGQp0fpI/sHLAN3V8fuJteFEQQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@yuku-parser/binding-darwin-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.9.4.tgz", - "integrity": "sha512-bSpjVPP8zTTcMZi78gxPkZZhVNbg4Doqsb2CrxHR2g+vZxP7Ey4GVzgD5nVYSHgS1y8dGULGW8AhPrfRWFEF6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-parser/binding-darwin-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.9.4.tgz", - "integrity": "sha512-QNswJLBxsoDkghztrF0bUy+DEUoeX1lS4cL3dCM1IB4hfLoZ3Jf3jmCoggDnqN++sJ91F6w8oHiyQ4ZhUEr/bg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-parser/binding-freebsd-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.9.4.tgz", - "integrity": "sha512-D4rmGI0EOwxmKsv3+iGQDmtJ9/Oqr9wPxsQpONZ+QmxHqNbl+08XaJkhuC5wAg17bj6afcpdQfiIAoSMBY17Rw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.4.tgz", - "integrity": "sha512-rZuqBxlaRnNY57nawRP1LPx4i+ieCrvIQkBsbGu/xjWkZGzFCrHPliy5YiMxp3Mw4v5KftAlDJx7c9jApNk2ww==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.4.tgz", - "integrity": "sha512-0PRDvRZvh18Q1lADxs0RMtqYHTd3dD/o1WEnMO/K8o7V9Gmy/7nD3/HjGQCxFPxkHTp41toF+DsXgEandAc2Gw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.4.tgz", - "integrity": "sha512-CT1I24KFA/Tv/Exi1f+CVxafUIjlKm3gc51HbWLW7yf7OvJKCvKSja+EB17sDtYsS5a2EB9BTr8I5fPuDJ8rFA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.4.tgz", - "integrity": "sha512-DP193Z3nUXQ92AwmmkIAhVLxv2qj8rWAAAODownCwUk0wKrmnyH9km9Gd4NSmntBYG/Kv0P5btN6qcO1JXgEdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-x64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.4.tgz", - "integrity": "sha512-tjoxmuNz+xmSt/Or+US5aaKpRZcptQsWYaPtDp1/0QUvhyg8VS6mOrizKkzVBJKYVNZ7eDTleOBquYVm+Haz6w==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-x64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.4.tgz", - "integrity": "sha512-kHXf72EM6oHN58Swwruf9plXlCVY4mOlgqIjpXenEAY87cVcH3VxMZdCQG7rIKa+k0Hf3E/WS/8ufqZSCER7Gw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-win32-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.9.4.tgz", - "integrity": "sha512-Yj6+bbGDZrLbzp1Qr7hiaIjYagslUrRy6t3TIxfiXUeJWNH8ydx7birM0UJiIInqUld0mk9qBz1kei/T8gcKvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-parser/binding-win32-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.9.4.tgz", - "integrity": "sha512-B9D+Z1/jVfoEd1SgbuaYTPH6onVlSsSaK151mW8Rb6Yv+OrTOocNnv2w3peBicS6MB3VI+mJG8YqxRI4ONd1OQ==", + "node_modules/@yuku-core/binding-win32-x64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-win32-x64/-/binding-win32-x64-0.19.0.tgz", + "integrity": "sha512-o8iY/mXwlRkedp0LNTr4+TEfXTPQwoNZmv6k+1WIAd1ZXEn8xJJTBCtB0osaVvdZo/x/cNmV16UrWrrGpM5Mvw==", "cpu": [ "x64" ], @@ -5227,9 +5041,9 @@ ] }, "node_modules/@yuku-toolchain/types": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.9.4.tgz", - "integrity": "sha512-dqnMswJWE7YBbPEvGstgFlWFTRn20V/Hu82XTDjWxzaU18rGpxBqxhKlBlgyWrPARRvNLIqY2XA6S9edR+2AsA==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.19.0.tgz", + "integrity": "sha512-tFkNbsP4WXX9UMUC5syJGdK9dPMLK0PPaIuXCcCYH75sZ8MrebfBZ2XvCILRTw8AgLivSSCfDa4R67iYBDa4Kg==", "dev": true, "license": "MIT" }, @@ -5271,9 +5085,9 @@ } }, "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -5288,9 +5102,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5581,9 +5395,9 @@ } }, "node_modules/cac": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", - "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cac/-/cac-7.1.0.tgz", + "integrity": "sha512-LMDU/U2yA4IPIY8KT0NsNPWEYZvAMkbgyspxJ6btJaYV+WMDOHAZCmB0lsTObiHaRS1V/ztKAl7+TSkTqXyeoA==", "dev": true, "license": "MIT", "engines": { @@ -5643,9 +5457,9 @@ "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", + "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==", "dev": true, "license": "MIT", "engines": { @@ -6031,9 +5845,9 @@ "license": "ISC" }, "node_modules/empathic": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", - "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.1.0.tgz", + "integrity": "sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==", "dev": true, "license": "MIT", "engines": { @@ -6051,9 +5865,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz", + "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==", "dev": true, "license": "MIT", "dependencies": { @@ -6622,9 +6436,9 @@ "license": "ISC" }, "node_modules/happy-dom": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.14.0.tgz", - "integrity": "sha512-4bRh1KzRvKDnFNTlLhzT1RZTpkKhQbQDl9j+7GXszWsvuspYdo29k6OHRf4PwiM6oLb8r/pMWeYiJjkfod5AvQ==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-21.0.1.tgz", + "integrity": "sha512-pRBs/u9fhrncyByOl58DMex0R2uAj6ZPKWIjV5j5yNGZBqLw3P6BTRhlc0DD5b/Ht4/6JYTMuE2LJhUWRC6SGw==", "dev": true, "license": "MIT", "dependencies": { @@ -6677,9 +6491,9 @@ } }, "node_modules/hookable": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", - "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.2.tgz", + "integrity": "sha512-+abwxtiEA52GCVIsQqut3S/uKTbUwYIp4Pe/vv+6py5XiXBCqMZHg6pA6Y5qhgLSEys0/cYuPbO0z1QFj5ZCmg==", "dev": true, "license": "MIT" }, @@ -6801,9 +6615,9 @@ } }, "node_modules/import-without-cache": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.0.tgz", - "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.1.tgz", + "integrity": "sha512-vXoV9PjKHEednCUu01e98TkImxy67e3BJXbTIOmIq4Hyzw3IAwYRcuPkfeTzJzwyyts4kjuA73x+pWJLc4f86A==", "dev": true, "license": "MIT", "engines": { @@ -7089,9 +6903,9 @@ } }, "node_modules/lefthook": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.1.12.tgz", - "integrity": "sha512-2uOexfsrrRhCiTUWdGyDySxVHHhOFJ8MQejs27dM3hugrQB48/z1ZVlaNoxpZ1SnzQ1GaDIbO5rAvicwyiknYQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.2.1.tgz", + "integrity": "sha512-aKEwhQzGbLMkZu5vrFYKJzLvLVblWATYITmN7Ak4qRCDPCoFJhmeJZFuYf3nTXuqG9xTBE+J8xaAEPL2tpuWyw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7099,22 +6913,22 @@ "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "2.1.12", - "lefthook-darwin-x64": "2.1.12", - "lefthook-freebsd-arm64": "2.1.12", - "lefthook-freebsd-x64": "2.1.12", - "lefthook-linux-arm64": "2.1.12", - "lefthook-linux-x64": "2.1.12", - "lefthook-openbsd-arm64": "2.1.12", - "lefthook-openbsd-x64": "2.1.12", - "lefthook-windows-arm64": "2.1.12", - "lefthook-windows-x64": "2.1.12" + "lefthook-darwin-arm64": "2.2.1", + "lefthook-darwin-x64": "2.2.1", + "lefthook-freebsd-arm64": "2.2.1", + "lefthook-freebsd-x64": "2.2.1", + "lefthook-linux-arm64": "2.2.1", + "lefthook-linux-x64": "2.2.1", + "lefthook-openbsd-arm64": "2.2.1", + "lefthook-openbsd-x64": "2.2.1", + "lefthook-windows-arm64": "2.2.1", + "lefthook-windows-x64": "2.2.1" } }, "node_modules/lefthook-darwin-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.1.12.tgz", - "integrity": "sha512-GSUjqaCuxAYlPOovbjXEWE3HAIa/xOQkTTmZ937zieQldjPLTaC7+s5FHoxKywn+D9riBlofkDqG7Z4f5zzmPA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.2.1.tgz", + "integrity": "sha512-SyuDBT5HqNQfi607vMHrYJu45bRN7JoIFdyxLjEPVe34UnZJCesmeYBODEYTyCfRZjPOaTbton4Padu+qvqfCQ==", "cpu": [ "arm64" ], @@ -7126,9 +6940,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.1.12.tgz", - "integrity": "sha512-qAUHSSw/7Afi5wxkoLkxORxSicCeTBXyVLnRgD6YZra6udviozpK3Aok9Z6FIWeKc5FBijRMSNDxGPTREhsjcQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.2.1.tgz", + "integrity": "sha512-qkIdM89T3OxpLp9rssPSdRQ7QKkX0l07xWxxOaZfECn5iB2xVXSD9FQSjYUMNGXtJJWOGqdKqBngGTB/ShDZtQ==", "cpu": [ "x64" ], @@ -7140,9 +6954,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.1.12.tgz", - "integrity": "sha512-FHZRfKliFNbyz54zsoGdVe9muq67cNjBTZ6jrPPUjI7xUuyCwSpzA+1OpiwJT00L9pP5ZGONBqnGZKnrpC+7Uw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.2.1.tgz", + "integrity": "sha512-0jdr/9Q5cGuazrEVquv29AOD77aPc2jAmFU4EtqVVg3PhMJjAyt7bQeA9qdwHhaHhLnaeUZwMwo3IleVm+D4wg==", "cpu": [ "arm64" ], @@ -7154,9 +6968,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.1.12.tgz", - "integrity": "sha512-HYQZPGy2DDEx7dbuotusJpujY5q9igOLgx36qeeQcNQuvvdGHPj2ZGSIsGKhoJ0dw5Qa4knKJoPAHEZQWdV/og==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.2.1.tgz", + "integrity": "sha512-JFKyNZ9qQp9NsuFyAg/CJIBurIHX3AUayFXxuoDMATWAIhhlyK0YMtpWgEFIl1M2iGLBLQ3TiLoCCRnbwndNDg==", "cpu": [ "x64" ], @@ -7168,9 +6982,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.1.12.tgz", - "integrity": "sha512-ipjOri2PB/sk4noPrHQuM5fcpNBjmlKo4qMtXyLnxeOxGYHWZzf0Xi0OtrXHQ//tOprcv40ADvhUuSdcGqigLw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.2.1.tgz", + "integrity": "sha512-na8Ezm7pK44+WsQqj9tES7v8VseM1MrNeNJhUnM8eINV22KYptWam8evfjZxY3NYxOTwn6f/Zpe/BBvcLKMaTQ==", "cpu": [ "arm64" ], @@ -7182,9 +6996,9 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.1.12.tgz", - "integrity": "sha512-DmU6xfvqVoFdW+STyc70YI4Ry8vkHGKHx+IJ1Js/Gacq5dv+fiwNzwle3bi28EkL6P8xY67B/CfQfRj4SRU4tg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.2.1.tgz", + "integrity": "sha512-wl7CR5uNkOiZ38SkW4l9O6wf/Nllbkw90ZZonXRFkbgrnPjLMhZGUt9ucewsPwBQ/ckU1t08JuBHeOywB/CFow==", "cpu": [ "x64" ], @@ -7196,9 +7010,9 @@ ] }, "node_modules/lefthook-openbsd-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.1.12.tgz", - "integrity": "sha512-vb0J7bElLvoaCWQmna3HntsvoNqMsGAhfjjC99ss1OdCteufZKM3RxCVoMBEbD50Itv2c1Ua2AFVToltVFTy1Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.2.1.tgz", + "integrity": "sha512-UFwL+AGSqkhQ15kuKl5FMRx/UqbcfcQbGFg5ggYzhT7qBOsTu3a9POXRxt3hsalBeMgkDWsv3IaPlj51YGpCAg==", "cpu": [ "arm64" ], @@ -7210,9 +7024,9 @@ ] }, "node_modules/lefthook-openbsd-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.1.12.tgz", - "integrity": "sha512-QOmhDWqPPK4+99scanfEmbJjUR+JYC93qhr/0bp5Dj3LaR3kVFNWc6zOQUsOTPy/LC6PG759Lej/mr/BtjUL2Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.2.1.tgz", + "integrity": "sha512-IMKEuxJLo91C1yjhJ42EadfXUb3ECMkvTKpSt17kwaiyZsvvZ8LGdrXwQZiLNJt2M5ECuTVCQUvDimM6mGraOw==", "cpu": [ "x64" ], @@ -7224,9 +7038,9 @@ ] }, "node_modules/lefthook-windows-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.1.12.tgz", - "integrity": "sha512-eErEyr9AHkRFj6TxpCQeKGd0s6IrtL/VEIZ/ssg8dNfG+ycR4jAW/IAlrJSw6/ZQXb3WtWLaQ6QA5c+TLh7vmg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.2.1.tgz", + "integrity": "sha512-Pi8vOvObjg8HJDl8d96s7jsI6TN33klpqv6tXSXpoKEeoAwEh5Y9NawO6bzoOpLfAxf2SfMBcuaBzFQ5zE2gjA==", "cpu": [ "arm64" ], @@ -7238,9 +7052,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.1.12.tgz", - "integrity": "sha512-0h+WmDVdDriTjloD/UbjPq/ZtqaaJlPAdGcVwMCEdAxfbF0FTgDbKX3igui9g2U/qG2y6QpVhtz1jeiRe7ctaw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.2.1.tgz", + "integrity": "sha512-7FtuPrc1XzxIFLAbzneOF1hr9r/vGi2lcMpX14QG9d/mnLhwu4EyNBh48JNEqsQqrOB9QKavsNqxVl1e8zcukA==", "cpu": [ "x64" ], @@ -7571,13 +7385,13 @@ } }, "node_modules/magic-string": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", - "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.3.tgz", + "integrity": "sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.6.0" } }, "node_modules/math-intrinsics": { @@ -7873,9 +7687,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { @@ -7901,13 +7715,6 @@ "node": ">= 0.6" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -7958,9 +7765,9 @@ } }, "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -8033,13 +7840,13 @@ "license": "MIT" }, "node_modules/oxfmt": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.67.0.tgz", - "integrity": "sha512-vV7sSiPsaO0mSxdoUdayipVDFPzW/UQ+hrezEHa20+Tx1dnMdZLSRHMT0PdS67FFbhd74M1n08asW21aLGeCrA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.72.0.tgz", + "integrity": "sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g==", "dev": true, "license": "MIT", "dependencies": { - "tinypool": "2.1.2" + "tinypool": "2.2.0" }, "bin": { "oxfmt": "bin/oxfmt" @@ -8051,25 +7858,25 @@ "url": "https://github.com/sponsors/oxc-project" }, "optionalDependencies": { - "@oxfmt/binding-android-arm-eabi": "0.67.0", - "@oxfmt/binding-android-arm64": "0.67.0", - "@oxfmt/binding-darwin-arm64": "0.67.0", - "@oxfmt/binding-darwin-x64": "0.67.0", - "@oxfmt/binding-freebsd-x64": "0.67.0", - "@oxfmt/binding-linux-arm-gnueabihf": "0.67.0", - "@oxfmt/binding-linux-arm-musleabihf": "0.67.0", - "@oxfmt/binding-linux-arm64-gnu": "0.67.0", - "@oxfmt/binding-linux-arm64-musl": "0.67.0", - "@oxfmt/binding-linux-ppc64-gnu": "0.67.0", - "@oxfmt/binding-linux-riscv64-gnu": "0.67.0", - "@oxfmt/binding-linux-riscv64-musl": "0.67.0", - "@oxfmt/binding-linux-s390x-gnu": "0.67.0", - "@oxfmt/binding-linux-x64-gnu": "0.67.0", - "@oxfmt/binding-linux-x64-musl": "0.67.0", - "@oxfmt/binding-openharmony-arm64": "0.67.0", - "@oxfmt/binding-win32-arm64-msvc": "0.67.0", - "@oxfmt/binding-win32-ia32-msvc": "0.67.0", - "@oxfmt/binding-win32-x64-msvc": "0.67.0" + "@oxfmt/binding-android-arm-eabi": "0.72.0", + "@oxfmt/binding-android-arm64": "0.72.0", + "@oxfmt/binding-darwin-arm64": "0.72.0", + "@oxfmt/binding-darwin-x64": "0.72.0", + "@oxfmt/binding-freebsd-x64": "0.72.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.72.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.72.0", + "@oxfmt/binding-linux-arm64-gnu": "0.72.0", + "@oxfmt/binding-linux-arm64-musl": "0.72.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.72.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.72.0", + "@oxfmt/binding-linux-riscv64-musl": "0.72.0", + "@oxfmt/binding-linux-s390x-gnu": "0.72.0", + "@oxfmt/binding-linux-x64-gnu": "0.72.0", + "@oxfmt/binding-linux-x64-musl": "0.72.0", + "@oxfmt/binding-openharmony-arm64": "0.72.0", + "@oxfmt/binding-win32-arm64-msvc": "0.72.0", + "@oxfmt/binding-win32-ia32-msvc": "0.72.0", + "@oxfmt/binding-win32-x64-msvc": "0.72.0" }, "peerDependencies": { "svelte": "^5.0.0", @@ -8287,13 +8094,13 @@ } }, "node_modules/playwright": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", - "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.0.tgz", + "integrity": "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.63.0" + "playwright-core": "1.64.0" }, "bin": { "playwright": "cli.js" @@ -8303,9 +8110,9 @@ } }, "node_modules/playwright-core": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", - "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0.tgz", + "integrity": "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8326,9 +8133,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", "dev": true, "funding": [ { @@ -8346,9 +8153,9 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.19", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -8399,9 +8206,9 @@ } }, "node_modules/publint": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/publint/-/publint-0.3.24.tgz", - "integrity": "sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/publint/-/publint-0.3.25.tgz", + "integrity": "sha512-WMMbn/d7JqRlfXQL/JUI4n5skC8cJ5WVr8/wT5mmiYWkUdENkZr1I5rgs2+dQPVRgoJd+JRYtB46MTsuDylw9g==", "dev": true, "license": "MIT", "dependencies": { @@ -8621,13 +8428,13 @@ } }, "node_modules/rolldown": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", - "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.13.tgz", + "integrity": "sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.148.0", + "@oxc-project/types": "=0.153.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -8637,36 +8444,36 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.7", - "@rolldown/binding-android-arm64": "1.2.7", - "@rolldown/binding-darwin-arm64": "1.2.7", - "@rolldown/binding-darwin-x64": "1.2.7", - "@rolldown/binding-freebsd-x64": "1.2.7", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", - "@rolldown/binding-linux-arm64-gnu": "1.2.7", - "@rolldown/binding-linux-arm64-musl": "1.2.7", - "@rolldown/binding-linux-ppc64-gnu": "1.2.7", - "@rolldown/binding-linux-s390x-gnu": "1.2.7", - "@rolldown/binding-linux-x64-gnu": "1.2.7", - "@rolldown/binding-linux-x64-musl": "1.2.7", - "@rolldown/binding-openharmony-arm64": "1.2.7", - "@rolldown/binding-win32-arm64-msvc": "1.2.7", - "@rolldown/binding-win32-x64-msvc": "1.2.7" + "@rolldown/binding-android-arm-eabi": "1.2.13", + "@rolldown/binding-android-arm64": "1.2.13", + "@rolldown/binding-darwin-arm64": "1.2.13", + "@rolldown/binding-darwin-x64": "1.2.13", + "@rolldown/binding-freebsd-x64": "1.2.13", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.13", + "@rolldown/binding-linux-arm64-gnu": "1.2.13", + "@rolldown/binding-linux-arm64-musl": "1.2.13", + "@rolldown/binding-linux-ppc64-gnu": "1.2.13", + "@rolldown/binding-linux-s390x-gnu": "1.2.13", + "@rolldown/binding-linux-x64-gnu": "1.2.13", + "@rolldown/binding-linux-x64-musl": "1.2.13", + "@rolldown/binding-openharmony-arm64": "1.2.13", + "@rolldown/binding-win32-arm64-msvc": "1.2.13", + "@rolldown/binding-win32-x64-msvc": "1.2.13" } }, "node_modules/rolldown-plugin-dts": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.28.5.tgz", - "integrity": "sha512-yYd3C9CeJwqjOc9X23m0Tyxcqic491uLZlfg51szT287S8zCCqLR2uoySoElgqy2CLn7PdXcEo1dlkBs4n1WHg==", + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.28.8.tgz", + "integrity": "sha512-FVhfqxorCWcc20BVT5eVRfRjzLLl6mgzjcMR4gSBf0K4oQMXT0qoHhhzfXy0L7y83fQy7Ug5ZDNk90xM3/LiCQ==", "dev": true, "license": "MIT", "dependencies": { "dts-resolver": "^3.0.0", "get-tsconfig": "5.0.0-beta.6", - "obug": "^2.1.4", - "yuku-ast": "^0.9.3", - "yuku-codegen": "^0.9.3", - "yuku-parser": "^0.9.3" + "obug": "^3.0.0", + "yuku-ast": "^0.19.0", + "yuku-codegen": "^0.19.0", + "yuku-parser": "^0.19.0" }, "engines": { "node": "^22.18.0 || ^24.11.0 || >=26.0.0" @@ -8677,6 +8484,7 @@ "peerDependencies": { "@typescript/native-preview": "*", "@volar/typescript": "~2.4.0", + "@vue/language-core": "~3.2.0 || ~3.3.0", "rolldown": "^1.2.0", "typescript": "^5.0.0 || ^6.0.0 || ~7.0.0", "vue-tsc": "~3.2.0 || ~3.3.0" @@ -8688,6 +8496,9 @@ "@volar/typescript": { "optional": true }, + "@vue/language-core": { + "optional": true + }, "typescript": { "optional": true }, @@ -8696,6 +8507,20 @@ } } }, + "node_modules/rolldown-plugin-dts/node_modules/obug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -8792,15 +8617,15 @@ "license": "MIT" }, "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.5.0.tgz", + "integrity": "sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", + "@types/json-schema": "^7.0.15", + "ajv": "^8.20.0", + "ajv-formats": "^3.0.1", "ajv-keywords": "^5.1.0" }, "engines": { @@ -9119,13 +8944,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, "node_modules/sirv": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", @@ -9152,9 +8970,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -9172,13 +8990,6 @@ "source-map": "^0.6.0" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -9190,9 +9001,9 @@ } }, "node_modules/std-env": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", - "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", + "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==", "dev": true, "license": "MIT" }, @@ -9300,9 +9111,9 @@ "license": "MIT" }, "node_modules/tinybench": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.1.4.tgz", - "integrity": "sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.2.2.tgz", + "integrity": "sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==", "dev": true, "license": "MIT", "engines": { @@ -9337,9 +9148,9 @@ } }, "node_modules/tinypool": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.1.2.tgz", - "integrity": "sha512-9YodfrxS9g9IbFr/KOjE5bAeJ0p61n3bW6mqvy0jtoeKd1kTW1Cxm0oulm6KX2lyM9Gl6WIe8nEbY7LWv5ZJww==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.2.0.tgz", + "integrity": "sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==", "dev": true, "license": "MIT", "engines": { @@ -9347,9 +9158,9 @@ } }, "node_modules/tinyrainbow": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", - "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz", + "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==", "dev": true, "license": "MIT", "engines": { @@ -9417,26 +9228,26 @@ } }, "node_modules/tsdown": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.23.0.tgz", - "integrity": "sha512-BaT+ep1xnj5hdyICLd5r5SYYE+TXnI1ATePLykv9vcKpHpFTWUWRH+x1AF/E2qcu3YB6+vI8IdyxIIIffEqw5Q==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.23.1.tgz", + "integrity": "sha512-MSC2WSOts3in95J334/VIS7KPfor3eCSvndJ6KdoVj9Aak9Kh1aNfz9ws5owhdukuTNSXRdfkPEzA/ihpDD6SA==", "dev": true, "license": "MIT", "dependencies": { - "cac": "^7.0.0", + "cac": "^7.0.1", "defu": "^6.1.7", - "empathic": "^2.0.1", - "hookable": "^6.1.1", - "import-without-cache": "^0.4.0", - "obug": "^2.1.4", + "empathic": "^2.1.0", + "hookable": "^6.1.2", + "import-without-cache": "^0.4.1", + "obug": "^3.0.0", "picomatch": "^4.0.7", - "rolldown": "~1.2.7", - "rolldown-plugin-dts": "^0.28.5", + "rolldown": "~1.2.13", + "rolldown-plugin-dts": "^0.28.7", "tinyexec": "^1.3.1", "tinyglobby": "^0.2.17", "tree-kill": "^1.2.2", "unconfig-core": "^7.5.0", - "verkit": "^0.4.0" + "verkit": "^0.5.0" }, "bin": { "tsdown": "dist/run.mjs" @@ -9449,8 +9260,8 @@ }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", - "@tsdown/css": "0.23.0", - "@tsdown/exe": "0.23.0", + "@tsdown/css": "0.23.1", + "@tsdown/exe": "0.23.1", "@vitejs/devtools": "*", "publint": "^0.3.8", "tsx": "*", @@ -9488,6 +9299,20 @@ } } }, + "node_modules/tsdown/node_modules/obug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -9696,9 +9521,9 @@ } }, "node_modules/verkit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.4.0.tgz", - "integrity": "sha512-sXMwN6DMHeouPfCxkxWkKAmxphWKEenHYY5H1nIBzU3PmDsmJp6kBXJdshjVdpMZuWCmL9SH7KFRx29AylpP6g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.5.0.tgz", + "integrity": "sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==", "dev": true, "license": "MIT", "engines": { @@ -9709,16 +9534,16 @@ } }, "node_modules/vite": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", - "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz", + "integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.26", - "rolldown": "~1.2.4", + "picomatch": "^4.0.7", + "postcss": "^8.5.29", + "rolldown": "~1.2.12", "tinyglobby": "^0.2.17" }, "bin": { @@ -9735,7 +9560,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "@vitejs/devtools": "^0.7.1", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -9787,14 +9612,14 @@ } }, "node_modules/vitest": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.0.tgz", - "integrity": "sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.3.tgz", + "integrity": "sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/mocker": "5.0.0", + "@vitest/mocker": "5.0.3", "chai": "^6.2.2", "es-module-lexer": "^2.3.2", "expect-type": "^1.4.0", @@ -9802,10 +9627,10 @@ "obug": "^2.1.4", "picomatch": "^4.0.7", "std-env": "^4.2.0", - "tinybench": "6.1.4", - "tinyexec": "1.3.0", + "tinybench": "^6.1.4", + "tinyexec": "^1.3.0", "tinyglobby": "^0.2.17", - "why-is-node-running": "^2.3.0" + "why-is-node-running": "3.2.1" }, "bin": { "vitest": "vitest.mjs" @@ -9820,12 +9645,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "5.0.0", - "@vitest/browser-preview": "5.0.0", + "@vitest/browser-playwright": "5.0.3", + "@vitest/browser-preview": "5.0.3", "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0", - "@vitest/coverage-istanbul": "5.0.0", - "@vitest/coverage-v8": "5.0.0", - "@vitest/ui": "5.0.0", + "@vitest/coverage-istanbul": "5.0.3", + "@vitest/coverage-v8": "5.0.3", + "@vitest/ui": "5.0.3", "happy-dom": "*", "jsdom": "*", "vite": "^6.4.0 || ^7.0.0 || ^8.0.0" @@ -9869,16 +9694,6 @@ } } }, - "node_modules/vitest/node_modules/tinyexec": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/watchpack": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", @@ -9900,9 +9715,9 @@ "license": "MIT" }, "node_modules/webpack": { - "version": "5.110.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.110.3.tgz", - "integrity": "sha512-GuizBzRvo9YPpyoNMf3ag7AzxbaW85qrRSqTha345KyJbAFPt3/cMzBM0h+RWg7SK/7DdzRLINP3LvQ0hvr4hg==", + "version": "5.111.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.111.1.tgz", + "integrity": "sha512-cNypaz0RP+S4cvQVi1M/3bRUkvNP0xZpL0TjFx+c6jg64VbxD+2weWDgY9UnjRI6dhZgtaj8DU76GGFcJ79xPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9911,17 +9726,15 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.24.4", + "enhanced-resolve": "^5.25.0", "es-module-lexer": "^2.1.0", "events": "^3.2.0", "graceful-fs": "^4.2.11", "mime-db": "^1.54.0", "minimizer-webpack-plugin": "^5.7.0", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", + "schema-utils": "^4.5.0", "tapable": "^2.3.0", "watchpack": "^2.5.2", "webpack-sources": "^3.5.1" @@ -10157,20 +9970,16 @@ } }, "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.1.tgz", + "integrity": "sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==", "dev": true, "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, "bin": { "why-is-node-running": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=20.11" } }, "node_modules/wildcard": { @@ -10227,62 +10036,70 @@ } }, "node_modules/yuku-ast": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.9.4.tgz", - "integrity": "sha512-AeeHDopMAy2mMafUMEIZxmQaCJOPEvBGDSSA23y5iKuzak3H2otfmgo4ObJubuzdHlJrv4eFY3KQ5XZOru5gpw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.19.0.tgz", + "integrity": "sha512-PyCsiScaelhxBGzL8dyeJkLqvRZycoh78R31Vrt/WqYrm0hMFoKwIw/X7Dx5mBKLWAMlV9I9HEyBOHnj2gZVyw==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4" + "@yuku-toolchain/types": "^0.19.0" + }, + "engines": { + "node": ">=14.18.0" } }, "node_modules/yuku-codegen": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-codegen/-/yuku-codegen-0.9.4.tgz", - "integrity": "sha512-pPr8xA8wBjrebER5VFeqS1XqATED1dQXU7JoAectAi1RBG4YFJz5yBirnmmmHZHldgnMKs/pMGkDtwGVQX+Efg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-codegen/-/yuku-codegen-0.19.0.tgz", + "integrity": "sha512-uymAKHjDuaP4BEpkXC/BSLz4DUEF5oArZ5AuD3888nb2miChjWSgpPdojEJxm3pjpXkgUaCRJQyNAbnMN33wHg==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4" + "@yuku-toolchain/types": "^0.19.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/yuku-core": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-core/-/yuku-core-0.19.0.tgz", + "integrity": "sha512-kYK9e1XdfirNhkipzW0wmMcSWcVF/CWnuugodfVYRCUwvoBefweL9HzB96OiKEhsx78V5WbUxbJqlizMX869Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yuku-toolchain/types": "^0.19.0" + }, + "engines": { + "node": ">=14.18.0" }, "optionalDependencies": { - "@yuku-codegen/binding-android-arm64": "0.9.4", - "@yuku-codegen/binding-darwin-arm64": "0.9.4", - "@yuku-codegen/binding-darwin-x64": "0.9.4", - "@yuku-codegen/binding-freebsd-x64": "0.9.4", - "@yuku-codegen/binding-linux-arm-gnu": "0.9.4", - "@yuku-codegen/binding-linux-arm-musl": "0.9.4", - "@yuku-codegen/binding-linux-arm64-gnu": "0.9.4", - "@yuku-codegen/binding-linux-arm64-musl": "0.9.4", - "@yuku-codegen/binding-linux-x64-gnu": "0.9.4", - "@yuku-codegen/binding-linux-x64-musl": "0.9.4", - "@yuku-codegen/binding-win32-arm64": "0.9.4", - "@yuku-codegen/binding-win32-x64": "0.9.4" + "@yuku-core/binding-android-arm64": "0.19.0", + "@yuku-core/binding-darwin-arm64": "0.19.0", + "@yuku-core/binding-darwin-x64": "0.19.0", + "@yuku-core/binding-freebsd-x64": "0.19.0", + "@yuku-core/binding-linux-arm-gnu": "0.19.0", + "@yuku-core/binding-linux-arm-musl": "0.19.0", + "@yuku-core/binding-linux-arm64-gnu": "0.19.0", + "@yuku-core/binding-linux-arm64-musl": "0.19.0", + "@yuku-core/binding-linux-x64-gnu": "0.19.0", + "@yuku-core/binding-linux-x64-musl": "0.19.0", + "@yuku-core/binding-win32-arm64": "0.19.0", + "@yuku-core/binding-win32-x64": "0.19.0" } }, "node_modules/yuku-parser": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-parser/-/yuku-parser-0.9.4.tgz", - "integrity": "sha512-VWnoJzdB2g1JjsMEcB2MxSLoDbgISgOiNRsgiR0qrQKiUw2yyzEfYEYkNHSMNhdGkSo7gtmcN+2UOczzGDLAuw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-parser/-/yuku-parser-0.19.0.tgz", + "integrity": "sha512-XrBh9ZiQK5mJVRxZBAvD6LwRyAYrK3MFtH3+onyuxFL5hFD44EC3QOmIC1FjTj6H2MMwq46/NAI+NZxLZPZgxg==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4", - "yuku-ast": "^0.9.4" + "@yuku-toolchain/types": "^0.19.0", + "yuku-core": "0.19.0" }, - "optionalDependencies": { - "@yuku-parser/binding-android-arm64": "0.9.4", - "@yuku-parser/binding-darwin-arm64": "0.9.4", - "@yuku-parser/binding-darwin-x64": "0.9.4", - "@yuku-parser/binding-freebsd-x64": "0.9.4", - "@yuku-parser/binding-linux-arm-gnu": "0.9.4", - "@yuku-parser/binding-linux-arm-musl": "0.9.4", - "@yuku-parser/binding-linux-arm64-gnu": "0.9.4", - "@yuku-parser/binding-linux-arm64-musl": "0.9.4", - "@yuku-parser/binding-linux-x64-gnu": "0.9.4", - "@yuku-parser/binding-linux-x64-musl": "0.9.4", - "@yuku-parser/binding-win32-arm64": "0.9.4", - "@yuku-parser/binding-win32-x64": "0.9.4" + "engines": { + "node": ">=14.18.0" } } } diff --git a/package.json b/package.json index 8d0bfe4..3132abe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.53.4-build2", + "version": "3.54.0-build1", "description": "SQLite Wasm conveniently wrapped as an ES Module.", "type": "module", "repository": { @@ -75,17 +75,17 @@ "node": ">=22" }, "devDependencies": { - "@types/node": "^26.5.0", - "@vitest/browser": "^5.0.0", - "@vitest/browser-playwright": "^5.0.0", - "happy-dom": "20.14.0", - "lefthook": "2.1.12", - "oxfmt": "^0.67.0", - "playwright": "^1.63.0", - "publint": "^0.3.24", - "tsdown": "^0.23.0", + "@types/node": "^26.6.5", + "@vitest/browser": "^5.0.3", + "@vitest/browser-playwright": "^5.0.3", + "happy-dom": "21.0.1", + "lefthook": "2.2.1", + "oxfmt": "^0.72.0", + "playwright": "^1.64.0", + "publint": "^0.3.25", + "tsdown": "^0.23.1", "typescript": "7.0.2", - "vitest": "^5.0.0" + "vitest": "^5.0.3" }, "packageManager": "npm@12.0.1", "allowScripts": {