From 351c3b3c0830a3850115624340939d507ed44f80 Mon Sep 17 00:00:00 2001 From: Sam Willis Date: Mon, 22 Jul 2024 23:30:37 +0100 Subject: [PATCH] parent dcb377316952c4c600002e52a048faa6300c7c44 author Sam Willis 1721687437 +0100 committer Sam Willis 1722326680 +0100 Docs site WIP WIP Docs More docs Add docs site to web deploy Tweeks ci Add docs to pnpm workspace ci WIP WIP WIP WIP Muti tab worker docs Worker options --- .github/workflows/build_pglite.yml | 7 + .gitignore | 5 +- cibuild.sh | 22 +- docs/.vitepress/config.mts | 84 +++ docs/.vitepress/theme/custom.css | 124 +++++ docs/.vitepress/theme/index.js | 14 + docs/benchmarks.md | 1 + docs/components/HeroImage.vue | 104 ++++ docs/components/Repl.vue | 165 ++++++ docs/docs/about.md | 1 + docs/docs/api.md | 324 +++++++++++ docs/docs/filesystems.md | 89 +++ docs/docs/framework-hooks.md | 3 + docs/docs/index.md | 68 +++ docs/docs/live-queries.md | 126 +++++ docs/docs/multi-tab-worker.md | 152 ++++++ docs/docs/repl.md | 117 ++++ docs/extensions/development.md | 1 + docs/extensions/index.md | 1 + docs/index.md | 114 ++++ docs/package.json | 14 + docs/public/img/brand/icon-light.svg | 4 + docs/public/img/brand/icon.svg | 3 + docs/public/img/brand/logo-light.svg | 5 + docs/public/img/brand/logo.svg | 4 + docs/public/img/postgres-new.png | Bin 0 -> 170370 bytes packages/repl/package.json | 2 + packages/repl/src-webcomponent/main.tsx | 18 +- packages/repl/src/Repl.tsx | 14 +- pnpm-lock.yaml | 691 +++++++++++++++++++++++- pnpm-workspace.yaml | 1 + 31 files changed, 2257 insertions(+), 21 deletions(-) create mode 100644 docs/.vitepress/config.mts create mode 100644 docs/.vitepress/theme/custom.css create mode 100644 docs/.vitepress/theme/index.js create mode 100644 docs/benchmarks.md create mode 100644 docs/components/HeroImage.vue create mode 100644 docs/components/Repl.vue create mode 100644 docs/docs/about.md create mode 100644 docs/docs/api.md create mode 100644 docs/docs/filesystems.md create mode 100644 docs/docs/framework-hooks.md create mode 100644 docs/docs/index.md create mode 100644 docs/docs/live-queries.md create mode 100644 docs/docs/multi-tab-worker.md create mode 100644 docs/docs/repl.md create mode 100644 docs/extensions/development.md create mode 100644 docs/extensions/index.md create mode 100644 docs/index.md create mode 100644 docs/package.json create mode 100644 docs/public/img/brand/icon-light.svg create mode 100644 docs/public/img/brand/icon.svg create mode 100644 docs/public/img/brand/logo-light.svg create mode 100644 docs/public/img/brand/logo.svg create mode 100644 docs/public/img/postgres-new.png diff --git a/.github/workflows/build_pglite.yml b/.github/workflows/build_pglite.yml index eea7ce245..a7b0790f3 100644 --- a/.github/workflows/build_pglite.yml +++ b/.github/workflows/build_pglite.yml @@ -113,6 +113,13 @@ jobs: run: | bash ./cibuild.sh demo-site + - name: Build docs + working-directory: ./docs + run: | + pnpm install + pnpm run docs:build + cp -r ./.vitepress/dist/* /tmp/web/ + - name: Upload Postgres to Github artifacts id: upload-postgres-wasm uses: actions/upload-artifact@v4 diff --git a/.gitignore b/.gitignore index 1143d84b0..a59f5afa8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .DS_Store -/node_modules +node_modules /packages/pglite/dist /packages/pglite/pgdata-test /packages/pglite/package-lock.json @@ -10,3 +10,6 @@ /postgresql-16.3.tar.bz2 /postgresql-16.3 /postgresql + +docs/.vitepress/dist +docs/.vitepress/cache \ No newline at end of file diff --git a/cibuild.sh b/cibuild.sh index 2cd0bd72c..02d0db122 100755 --- a/cibuild.sh +++ b/cibuild.sh @@ -344,17 +344,17 @@ do demo-site) echo "==================== demo-site ==========================" echo " - - - -" > /tmp/web/index.html + + + + " > /tmp/web/demos.html mkdir -p /tmp/web/pglite mkdir -p /tmp/web/repl diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 000000000..d92037010 --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,84 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + lang: 'en', + title: "PGlite", + description: "Lightweight WASM Postgres", + appearance: 'force-dark', + base: '/', + cleanUrls: true, + ignoreDeadLinks: 'localhostLinks', + head: [ + ['link', { + rel: 'icon', + type: 'image/svg+xml', + href: '/img/brand/icon-light.svg' + }] + ], + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + logo: { + dark: '/img/brand/logo.svg', + light: '/img/brand/logo-light.svg' + }, + nav: [ + { text: 'Home', link: '/' }, + { text: 'About', link: '/docs/about' }, + { text: 'Docs', link: '/docs/' }, + { text: 'Extensions', link: '/extensions/' }, + { text: 'ElectricSQL', link: 'https://www.electric-sql.com' } + ], + sidebar: [ + { + text: 'About', + items: [ + { text: 'What is PGlite', link: '/docs/about' }, + ] + }, + { + text: 'Docs', + items: [ + { text: 'Getting Started', link: '/docs/' }, + { text: 'PGlite API', link: '/docs/api' }, + { text: 'Live Queries', link: '/docs/live-queries' }, + { text: 'Filesystems', link: '/docs/filesystems' }, + { text: 'Framework Hooks', link: '/docs/framework-hooks' }, + { text: 'Multi-tab Worker', link: '/docs/multi-tab-worker' }, + { text: 'REPL Component', link: '/docs/repl' }, + ] + }, + { + text: 'Extensions', + items: [ + { text: 'Extensions Catalog', link: '/extensions/' }, + { text: 'Extension Development', link: '/extensions/development' } + ] + }, + { + text: 'Reference', + items: [ + { text: 'Benchmarks', link: '/benchmarks.md' }, + ] + } + ], + siteTitle: false, + socialLinks: [ + { icon: 'discord', link: 'https://discord.electric-sql.com' }, + { icon: 'github', link: 'https://github.com/electric-sql/pglite' } + ], + footer: { + message: + 'Dual-licensed under Apache 2.0 and the PostgreSQL License', + copyright: + '© ElectricSQL' + } + }, + vue: { + template: { + compilerOptions: { + isCustomElement: tag => tag.startsWith('pglite-') + } + } + } +}) diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css new file mode 100644 index 000000000..87335793c --- /dev/null +++ b/docs/.vitepress/theme/custom.css @@ -0,0 +1,124 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap'); + +:root, .dark { + --vp-c-indigo-1: #D0BCFF; + --vp-c-indigo-2: #998FE7; + --vp-c-indigo-3: #7E78DB; + + --vp-nav-logo-height: 30px; + + --electric-color: #00D2A0; + --ddn-color: #D0BCFF; + --pglite-color: #F6F95C; + + --vp-c-brand-1: var(--pglite-color); + --vp-c-brand-2: #f1f35e; + --vp-c-brand-3: #d8da53; +} + +.dark { + --vp-c-text-1: rgba(255, 255, 245, 0.92); + --vp-c-text-2: rgba(235, 235, 245, 0.75); + --vp-c-text-3: rgba(235, 235, 245, 0.55); +} + +.img-row { + display: grid; + grid-template-columns: repeat(1, 1fr); + flex-direction: row; + margin: 20px 0; + gap: 10px; +} +.img-row-2 { + grid-template-columns: repeat(2, 1fr); +} +@media (max-width: 767px) { + .img-row-2 { + grid-template-columns: repeat(1, 1fr); + } +} +.img-border { + border: 1px #ccc solid; + border-radius: 10px; + padding: 10px; + background: rgb(20, 21, 23); +} +figure { + margin: 40px 0; +} +figcaption { + text-align: right; + font-size: 90%; + max-width: 460px; + margin-left: auto; +} + +iframe { + color-scheme: auto; +} +.twitter-tweet { + margin: 35px auto -95px !important; +} +.twitter-tweet iframe { + transform: scale(0.8); + transform-origin: top left; +} + +.VPHomeHero .VPImage.image-src { + max-width: min(calc(250px + 25vw), 560px); + margin-left: -40px; + margin-top: 10px; +} +@media (max-width: 959px) { + .VPHomeHero .image .image-container { + height: calc(190px + 15vw) !important; + margin-top: -20px; + } + .VPHomeHero .VPImage.image-src { + margin-left: 0px; + } +} + +.VPFeatures { + padding-top: 15px !important; + padding-bottom: 45px; +} +.VPFeature .VPImage { + width: 50px; +} +.VPFeature h2.title { + font-size: 20px; +} +.VPFeature.link[href="/product/electric"]:hover { + border-color: var(--electric-color); +} +.VPFeature.link[href="/product/pglite"]:hover { + border-color: var(--pglite-color); +} + +.VPFeature .details { + font-weight: 600 !important; +} + +.product-icon { + width: 84px; + margin-bottom: 20px; +} + +.about-zap { + max-width: min(calc(150px + 25vw), 420px); + margin: -20px 0 30px; +} +@media (max-width: 767px) { + .about-zap-container { + display: none; + } +} + +.vp-doc blockquote { + margin: 25px 10px 30px; +} + +.VPButton.brand { + color: var(--vp-c-gray-3) !important; +} diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js new file mode 100644 index 000000000..40c1919bc --- /dev/null +++ b/docs/.vitepress/theme/index.js @@ -0,0 +1,14 @@ +// .vitepress/theme/index.js +import { h } from 'vue' +import DefaultTheme from 'vitepress/theme-without-fonts' +import './custom.css' +import HeroImage from '../../components/HeroImage.vue' + +export default { + extends: DefaultTheme, + Layout() { + return h(DefaultTheme.Layout, null, { + 'home-hero-image': () => h(HeroImage) + }) + } +} diff --git a/docs/benchmarks.md b/docs/benchmarks.md new file mode 100644 index 000000000..73c2c041c --- /dev/null +++ b/docs/benchmarks.md @@ -0,0 +1 @@ +# Benchmarks \ No newline at end of file diff --git a/docs/components/HeroImage.vue b/docs/components/HeroImage.vue new file mode 100644 index 000000000..03f4d1880 --- /dev/null +++ b/docs/components/HeroImage.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/docs/components/Repl.vue b/docs/components/Repl.vue new file mode 100644 index 000000000..7b4485154 --- /dev/null +++ b/docs/components/Repl.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/docs/docs/about.md b/docs/docs/about.md new file mode 100644 index 000000000..4e72e5487 --- /dev/null +++ b/docs/docs/about.md @@ -0,0 +1 @@ +# What is PGlite \ No newline at end of file diff --git a/docs/docs/api.md b/docs/docs/api.md new file mode 100644 index 000000000..bed1cb709 --- /dev/null +++ b/docs/docs/api.md @@ -0,0 +1,324 @@ +--- +outline: [2, 3] +--- + +# PGlite API + +## Main Constructor + +`new PGlite(dataDir: string, options: PGliteOptions)`
+`new PGlite(options: PGliteOptions)` + +A new pglite instance is created using the `new PGlite()` constructor. + +This is imported as: + +```ts +import { PGlite } from "@electric-sql/pglite"; +``` + +`await PGlite.create(dataDir: string, options: PGliteOptions)`
+`await PGlite.create(options: PGliteOptions)` + +There is also an additional `PGlite.create()` static method that returns a Promise resolving to the new PGlite instance. There are a couple of advatanges to using the static method: + +- The Promise awaits the [`.waitReady`](#waitready) promise ensureing that database has fully initiated. +- When using TypeScript and extensions the returned PGlite instance will have the extensions namespace on it's type. This is not possible with the standard constructor. + + +#### `dataDir` + +Path to the directory to store the Postgres database. You can provide a url scheme for various storage backends: + +- `file://` or unprefixed
+ File system storage, available in Node and Bun. +- `idb://`
+ IndexedDB storage, available in the browser. +- `memory://`
+ In-memory ephemeral storage, available in all platforms. + +#### `options` + +- `dataDir: string`
+ The directory to store the Postgres database when not provided as the first argument. +- `debug: 1-5`
+ the Postgres debug level. Logs are sent to the console. +- `relaxedDurability: boolean`
+ Under relaxed durability mode PGlite will not wait for flushes to storage to complete after each query before returning results. This is particularly useful when using the indexedDB file system. +- `fs: Filesystem`
+ The alternative to providing a dataDir with a filesystem prefix is to initiate the Filesystem yourself and provide it here. See [Filesystems](./filesystems.md) +- `loadDataDir: Blob | File`
+ A tarball of a PGlite `datadir` to load when the database starts. This should be a tarball produced from the related [`.dumpDataDir()`](#dumpdatadir) method. +- `extensions: Extensions`
+ An object containing the extensions you with to load. + +#### `options.extensions` + +PGlite and Postgres extensions are loaded into a PGLite instance on start, and can include both a WASM build of a Postgres extension and/or a PGlite client plugin. + +The `options.extensions` paramiter is an opbject of `namespace: extension` parings. The namespace if sued to expose the PGlite client plugin included in the extension. An example of this it the [live queries](./live-queries.md) extension. + +```ts +import { PGlite } from "@electric-sql/pglite"; +import { live } from "@electric-sql/pglite/live"; +import { vector } from "@electric-sql/pglite/vector"; + +const pg = await PGlite.create({ + extensions: { + live, // Live query extension, if a PGlite client plugin + vector, // Postgres pgvector extension + }, +}); + +// The `live` namespace is added by the use of the +// `live` key in the `extensions` object. +pg.live.query('...') +``` + +For information on how to develop a PGlite extension see [Extension Development](../extensions/development.md). + +## Methods + +### query + +`.query(query: string, params?: any[], options?: QueryOptions): Promise>` + +Execute a single statement, optionally with parameters. + +Uses the *extended query* Postgres wire protocol. + +Returns single [result object](#results-objects). + +##### Example + +```ts +await pg.query( + 'INSERT INTO test (name) VALUES ($1);', + [ 'test' ] +); +// { affectedRows: 1 }, +``` + +##### Query Options + +The `query` and `exec` methods take an optional `options` objects with the following parameters: + +- `rowMode: "object" | "array"`
+ The returned row object type, either an object of `fieldName: value` mappings or an array of positional values. Defaults to `"object"`. +- `parsers: ParserOptions`
+ An object of type `{[[pgType: number]: (value: string) => any;]}` mapping Postgres data type id to parser function. + For convenance the `pglite` package exports a const for most common Postgres types: + + ```ts + import { types } from "@electric-sql/pglite"; + await pg.query(` + SELECT * FROM test WHERE name = $1; + `, ["test"], { + rowMode: "array", + parsers: { + [types.TEXT]: (value) => value.toUpperCase(), + } + }); + ``` + +- `blob: Blob | File`
+ Attach a `Blob` or `File` object to the query that can used with a `COPY FROM` command by using the virtual `/dev/blob` device, see [importing and exporting](#importing-and-exporting-with-copy-tofrom). + +### exec + +`.exec(query: string, options?: QueryOptions): Promise>` + +Execute one or more statements. *(note that parameters are not supported)* + +This is useful for applying database migrations, or running multi-statement sql that doesn't use parameters. + +Uses the *simple query* Postgres wire protocol. + +Returns array of [result objects](#results-objects), one for each statement. + +##### Example + +```ts +await pg.exec(` + CREATE TABLE IF NOT EXISTS test ( + id SERIAL PRIMARY KEY, + name TEXT + ); + INSERT INTO test (name) VALUES ('test'); + SELECT * FROM test; +`); +// [ +// { affectedRows: 0 }, +// { affectedRows: 1 }, +// { +// rows: [ +// { id: 1, name: 'test' } +// ] +// affectedRows: 0, +// fields: [ +// { name: 'id', dataTypeID: '23' }, +// { name: 'name', dataTypeID: '25' }, +// ] +// } +// ] +``` + +### transaction + +`.transaction(callback: (tx: Transaction) => Promise)` + +To start an interactive transaction pass a callback to the transaction method. It is passed a `Transaction` object which can be used to perform operations within the transaction. + +The transaction will be committed when the Promise returned from your callback resolves, and automatically rolled back if the Promise is rejected. + +##### `Transaction` objects + +- `tx.query(query: string, params?: any[], options?: QueryOptions): Promise>`
+ The same as the main [`.query` method](#querytquery-string-params-any-promiseresultst). +- `tx.exec(query: string, options?: QueryOptions): Promise>`
+ The same as the main [`.exec` method](#execquery-string-promisearrayresults). +- `tx.rollback()`
+ Rollback and close the current transaction. + +##### Example + +```ts +await pg.transaction(async (tx) => { + await tx.query( + 'INSERT INTO test (name) VALUES ('$1');', + [ 'test' ] + ); + return await ts.query('SELECT * FROM test;'); +}); +``` + +### close + +`.close(): Promise` + +Close the database, ensuring it is shut down cleanly. + +### listen + +`.listen(channel: string, callback: (payload: string) => void): Promise` + +Subscribe to a [pg_notify](https://www.postgresql.org/docs/current/sql-notify.html) channel. The callback will receive the payload from the notification. + +Returns an unsubscribe function to unsubscribe from the channel. + +##### Example + +```ts +const unsub = await pg.listen('test', (payload) => { + console.log('Received:', payload); +}); +await pg.query("NOTIFY test, 'Hello, world!'"); +``` + +### unlisten + +`.unlisten(channel: string, callback?: (payload: string) => void): Promise` + +Unsubscribe from the channel. If a callback is provided it removes only that callback from the subscription, when no callback is provided is unsubscribes all callbacks for the channel. + +### onNotification + +`onNotification(callback: (channel: string, payload: string) => void): () => void` + +Add an event handler for all notifications received from Postgres. + +**Note:** This does not subscribe to the notification, you will have to manually subscribe with `LISTEN channel_name`. + +### offNotification + +`offNotification(callback: (channel: string, payload: string) => void): void` + +Remove an event handler for all notifications received from Postgres. + +### dumpDataDir + +`dumpDataDir(): Promise` + +Dump the Postgres `datadir` to a gziped tarball. + +This can then be used in combination with the [`loadDataDir`](#options) option when starting PGlite to load a dumped database from storage. + +::: tip NOTE + +The datadir dump may not be compatible with other Postgres versions, it is only designed for importing back into PGlite. + +::: + +## Properties + +### ready + +`.ready` *`boolean (read only)`* + +Whether the database is ready to accept queries. + +### closed + +`.closed` *`boolean (read only)`* + +Whether the database is closed and no longer accepting queries. + +### waitReady + +`.waitReady` *`Promise`* + +Promise that resolves when the database is ready to use. + +::: tip NOTE + +Queries methods will wait for the `waitReady` promise to resolve if called before the database has fully initialised, and so it's not necessary to wait for it explicitly. + +::: + +## `Results` Objects + +Result objects have the following properties: + +- `rows: Row[]`
+ The rows retuned by the query + +- `affectedRows?: number`
+ Count of the rows affected by the query. Note this is *not* the count of rows returned, it is the number or rows in the database changed by the query. + +- `fields: { name: string; dataTypeID: number }[]`
+ Field name and Postgres data type ID for each field returned. + +- `blob: Blob`
+ A `Blob` containing the data written to the virtual `/dev/blob/` device by a `COPY TO` command. See [/dev/blob](#devblob). + + +## `Row` Objects + +Rows objects are a key / value mapping for each row returned by the query. + +The `.query()` method can take a TypeScript type describing the expected shape of the returned rows. + +::: tip NOTE + +These types are not validated at run time, the result only cast to the provided type + +::: + +## /dev/blob + +PGlite has support for importing and exporting via the SQL `COPY TO/FROM` command by using a virtual `/dev/blob` device. + +To import a file pass the `File` or `Blob` in the query options as `blob`, and copy from the `/dev/blob` device. + +```ts +await pg.query("COPY my_table FROM '/dev/blob';", [], { + blob: MyBlob +}) +``` + +To export a table or query to a file you just have to write to the `/dev/blob` device, the file will be retied as `blob` on the query results: + +```ts +const ret = await pg.query("COPY my_table TO '/dev/blob';") +// ret.blob is a `Blob` object with the data from the copy. +``` diff --git a/docs/docs/filesystems.md b/docs/docs/filesystems.md new file mode 100644 index 000000000..3ec59f386 --- /dev/null +++ b/docs/docs/filesystems.md @@ -0,0 +1,89 @@ +# Filesystems + +PGlite has a virtual file system layer that allows it to run in environments that don't traditionally have filesystem access. + +## In-memory FS + +The in-memory FS is the default when starting PGlite, and it available on all platforms. All files are kept in memory and there is no persistance, other than calling [`pg.dumpDataDir()`](./api.md#dumpdatadir) and then using the [`loadDataDir`](./api.md#options) option at start. + +To use the in-memory FS you can use one of these methods: + +- Don't provide a `dataDir` option + ```ts + const pg = new PGlite() + ``` +- Set the `dataDir` to `memory://` + ```ts + const pg = new PGlite("memory://") + ``` +- Import and pass the FS explicitly + ```ts + import { MemoryFS } from "@electric-sql/pglite"; + const pg = new PGlite({ + fs: new MemoryFS() + }) + ``` + +## Node FS + +The Node FS uses the Node.js file system API to implement a VFS for PGLite. It is bailable in both Node and Bun. + +To use the Node FS you can use one of these methods: + +- Set the `dataDir` to a directory on your filesystem + ```ts + const pg = new PGlite("./path/to/datadir/") + ``` +- Import and pass the FS explicitly + ```ts + import { NodeFS } from "@electric-sql/pglite"; + const pg = new PGlite({ + fs: new NodeFS("./path/to/datadir/") + }) + ``` + +## IndexedDB FS + +The IndexedDB FS persistes the database to IndexedDB in the browser. It's a layer over the in-memory filesystem, loading all files for the database into memory on start, and flushing them to IndexedDB after each query. + +To use the IndexedDB FS you can use one of these methods: + +- Set the `dataDir` with a `idb://` prefix, the FS will use an IndexedDB named with the path provided + ```ts + const pg = new PGlite("idb://my-database") + ``` +- Import and pass the FS explicitly + ```ts + import { IdbFs } from "@electric-sql/pglite"; + const pg = new PGlite({ + fs: new IdbFs("my-database") + }) + ``` + +The IndexedDB filesystem works at the file level, storing hole files as blobs in IndexedDB. Flushing whole files can take a few milliseconds after each query, to aid in building resposive apps we provide a `relaxedDurability` mode that can be [configured when starting](./api.md#options) PGlite. Under this mode the results of a query are returned imediatly, and the flush to IndexedDB is scheduled to happen asynchronous afterwards. Typically this is immediately after the query returns with no delay. + +## OPFS AHP FS + +The OPFS AHP filesystem is built on top of the [Origin Private Filesystem](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system) in the browser and uses an "access handle pool". It is only available when PGlite is run in a Web Worker, this could be any worker you configure, however we provide a [Multi Tab Worker](./multi-tab-worker.md) to aid in using PGlite from multiple tabs in the browser. + +To use the OPFS AHP FS you can use one of these methods: + +- Set the `dataDir` to a directory with the origins OPFS + ```ts + const pg = new PGlite("opfs-ahp://path/to/datadir/") + ``` +- Import and pass the FS explicitly + ```ts + import { OpfsAhpFS } from "@electric-sql/pglite/opfs-ahp"; + const pg = new PGlite({ + fs: new OpfsAhpFS("./path/to/datadir/") + }) + ``` + +### What is an "access handle pool"? + +The Origin Private Filesystem API provides both asynchronous ans synchronous methods, bit the synchronous are limited to read, write and flush. You are unable to travers the filesystem or open files synchronously. PGlite is a fully synchronous WASM build of Postgres and unable to call async APIs while handling a query. While it is possible to build an async WASM Postgres using [Asyncify](https://emscripten.org/docs/porting/asyncify.html), it adds significant overhead in both file size and performance. + +To overcome these limitations and provide a fully synchronous file system to PGlite on top of OPFS, we use something called an "access handle pool". When you first start PGlite we open a pool of OPFS access handles with randomised file names, these are then allocation to files as needed. After each query a poll maintenance job is scheduled that maintains the pool size. When you inspect the OPFS directory where the database is stored you will not see the normal Postgres directory layout, but rather a pool of files and a state file that contains the directory tree mapping along with file metadata. + +The PGlite OPFS AHP FS is inspired by the [wa-sqlite](https://github.com/rhashimoto/wa-sqlite) access handle pool file system by [Roy Hashimoto](https://github.com/rhashimoto). diff --git a/docs/docs/framework-hooks.md b/docs/docs/framework-hooks.md new file mode 100644 index 000000000..56a1f0448 --- /dev/null +++ b/docs/docs/framework-hooks.md @@ -0,0 +1,3 @@ +# Framework Hooks + +*TODO* \ No newline at end of file diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 000000000..1a2319dad --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,68 @@ +# Getting started with PGlite + +PGlite is a WASM Postgres build packaged into a TypeScript client library that enables you to run Postgres in the browser, Node.js and Bun, with no need to install any other dependencies. It is only 2.6mb gzipped. + +```js +import { PGlite } from "@electric-sql/pglite"; + +const db = new PGlite(); +await db.query("select 'Hello world' as message;"); +// -> { rows: [ { message: "Hello world" } ] } +``` + +It can be used as an ephemeral in-memory database, or with persistence either to the file system (Node/Bun) or indexedDB (Browser). + +Unlike previous "Postgres in the browser" projects, PGlite does not use a Linux virtual machine - it is simply Postgres in WASM. + +## Node/Bun + +Install into your project: + +```bash +npm install @electric-sql/pglite +``` + +To use the in-memory Postgres: + +```js + +import { PGlite } from "@electric-sql/pglite"; + +const db = new PGlite(); +await db.query("select 'Hello world' as message;"); +// -> { rows: [ { message: "Hello world" } ] } +``` + +or to persist to the filesystem: + +```js + +const db = new PGlite("./path/to/pgdata"); +``` + +## Browser + +It can be installed and imported using your usual package manager: + +```js +import { PGlite } from "@electric-sql/pglite"; +``` +or using a CDN such as JSDeliver: + +```js +import { PGlite } from "https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js"; +``` + +Then for an in-memory Postgres: + +```js +const db = new PGlite() +await db.query("select 'Hello world' as message;") +// -> { rows: [ { message: "Hello world" } ] } +``` + +or to persist the database to indexedDB: + +```js +const db = new PGlite("idb://my-pgdata"); +``` \ No newline at end of file diff --git a/docs/docs/live-queries.md b/docs/docs/live-queries.md new file mode 100644 index 000000000..a96559070 --- /dev/null +++ b/docs/docs/live-queries.md @@ -0,0 +1,126 @@ +# Live Queries + +The "live" extension enables you to subscribe to a query and receve updated results when the underlying tables change. + +To use the extension it needs adding to the PGlite instance when creating it: + +```ts +import { PGlite } from "@electric-sql/pglite"; +import { live } from "@electric-sql/pglite/live"; + +const pg = new PGlite({ + extensions: { + live, + }, +}); +``` + +There are three methods on the `live` namespace: +- `live.query()` for basic live queries. With less machinery in PG it's quicker for small results sets and narrow rows. +- `live.incrementalQuery()` for incremental queries. It materialises the full result set on each update from only the changes emitted by the `live.changes` api. Perfect for feeding into React and good performance for large result sets and wide rows. +- `live.changes()` a lower level API that emits the changes (insert/update/delete) that can then be mapped to mutations in a UI or other datastore. + +## live.query + +`live.query()` + +This is very similar to a standard query, but takes an additional callback that receives the results whenever they change: + +```js +const ret = pg.live.query("SELECT * FROM test ORDER BY rand;", [], (res) => { + // res is the same as a standard query result object +}); +``` + +The returned value from the call is an object with this interface: + +```ts +interface LiveQueryReturn { + initialResults: Results; + unsubscribe: () => Promise; + refresh: () => Promise; +} +``` + +- `initialResults` is the initial results set (also sent to the callback +- `unsubscribe` allow you to unsubscribe from the live query +- `refresh` allows you to force a refresh of the query + +Internally it watches for the tables that the query depends on, and reruns the query whenever they are changed. + +## live.incrementalQuery + +`live.incrementalQuery()` + +Similar to above, but maintains a temporary table inside of Postgres of the previous state. When the tables it depends on change the query is re-run and diffed with the last state. Only the changes from the last version of the query are copied from WASM into JS. + +It requires an additional `key` argument, the name of a column (often a PK) to key the diff on. + +```ts +const ret = pg.live.incrementalQuery( + "SELECT * FROM test ORDER BY rand;", [], "id", + (res) => { + // res is the same as a standard query result object + } +); +``` + +The returned value is of the same type as the `query` method above. + +## live.changes + +`live.changes()` + +A lower level API which is the backend for the `incrementalQuery`, it emits the change that have happened. It requires a `key` to key the diff on: + +```ts +const ret = pg.live.changes( + "SELECT * FROM test ORDER BY rand;", [], "id", + (res) => { + // res is a change result object + } +); +``` + +the returned value from the call is defined by this interface: + +```ts +interface LiveChangesReturn { + fields: { name: string; dataTypeID: number }[]; + initialChanges: Array>; + unsubscribe: () => Promise; + refresh: () => Promise; +} +``` + +The results passed to the callback are array of `Change` objects: + +```ts +type ChangeInsert = { + __changed_columns__: string[]; + __op__: "INSERT"; + __after__: number; +} & T; + +type ChangeDelete = { + __changed_columns__: string[]; + __op__: "DELETE"; + __after__: undefined; +} & T; + +type ChangeUpdate = { + __changed_columns__: string[]; + __op__: "UPDATE"; + __after__: number; +} & T; + +type Change = ChangeInsert | ChangeDelete | ChangeUpdate; +``` + +Each `Change` includes the new values along with: + +- `__changed_columns__` the columns names that were changes +- `__op__` the operation that is required to update the state (`INSERT`, `UPDATE`, `DELETE`) +- `__after__` the `key` of the row that this row should be after, it will be included in `__changed_columns__` if it has been changed. + +This API can be used to implement very efficient in-place DOM updates. diff --git a/docs/docs/multi-tab-worker.md b/docs/docs/multi-tab-worker.md new file mode 100644 index 000000000..708c2038c --- /dev/null +++ b/docs/docs/multi-tab-worker.md @@ -0,0 +1,152 @@ +# Multi-tab Worker + +It's likely that you will want to run PGlite in a Web Worker so that it doesn't block the main thread. Additionally as PGlite is single connection, you may want to proxy multiple browser tabs to a single PGlite instance. + +To aid in this we provide a `PGliteWorker` with the same API as the standard PGlite, and a `worker` wrapper that exposes a PGlite instance to other tabs. + +## Using PGliteWorker + +First you need to create a js file for your worker instance. You use the `worker` wrapper with an `init` option that returns a PGlite instance to start that database and expose it to all tabs: + +```js +// my-pglite-worker.js +import { PGlite } from "@electric-sql/pglite"; +import { worker } from "@electric-sql/pglite/worker"; + +worker({ + async init() { + return new PGlite(); + }, +}); +``` + +Then connect the `PGliteWorker` to your new worker process in you main script: + +```js +import { PGliteWorker } from "@electric-sql/pglite/worker"; + +const pg = new PGliteWorker( + new Worker(new URL("./my-pglite-worker.js", import.meta.url), { + type: "module", + }) +); + +// `pg` has the same interface as a standard PGlite interface +``` + +Internally this starts a worker for each tab, but then runs a leader election to nominate one as the leader. Only the leader then opens the PGlite and handles all queries. When the leader tab is closed, a new leader election is run and a new PGlite instance is started. + +In addition to having all the standrad methods of the [`PGlite` interface](./api.md), `PGliteWorker` also has the following methods and properties: + +- `onLeaderChange(callback: () => void)`
+ This allows you to subscribe to a notification when the leader worker is changed. It returns an unsubscribe function. +- `offLeaderChange(callback: () => void)`
+ This allows you to unsubscribe from the leader change notification. +- `isLeader: bool` + A boolean property indicating if this instance is the leader. + +## Passing options to a worker + +`PGliteWorker` takes an optional second paramiter `options`, this can include any standard [PGlite options](./api.md#options) along with these addtional options: + +- `id: string`
+ This is an optional `id` to gide your PGlite worker group. The leader election is run between all `PGliteWorker`s with the same `id`.
+ If not provided the url to the worker is concatenated with the `dataDir` option to create an id. +- `meta: any`
+ Any aditional metadata you would like to pass to the worker process `init` function. + +The `worker()` wrapper takes a single options argument, with a single `init` property. `init` is a function takes sed any options passed to `PGliteWorker` (excluding extensions) and returns a `PGlite` instance. You can use the options passed to decide how to configure your instance: + +```js +// my-pglite-worker.js +import { PGlite } from "@electric-sql/pglite"; +import { worker } from "@electric-sql/pglite/worker"; + +worker({ + async init(options) { + const meta = options.meta + // Do something with additional metadata. + + return new PGlite({ + dataDir: options.dataDir + }); + }, +}); + +// my-app.js +import { PGliteWorker } from "@electric-sql/pglite/worker"; + +const pg = new PGliteWorker( + new Worker(new URL("./my-pglite-worker.js", import.meta.url), { + type: "module", + }), + { + dataDir: 'idb://my-db', + meta: { + // additional metadata passed to `init` + } + } +); +``` + +## Extension support + +`PGliteWorker` has support for both Postgres Extensions and PGlite plugins using the normal [extension api](./api.md#optionsextensions). + +Any extension can be use by the PGlite instance inside the worker: + +```js +// my-pglite-worker.js +import { PGlite } from "@electric-sql/pglite"; +import { worker } from "@electric-sql/pglite/worker"; +import { vector } from "@electric-sql/pglite/vector"; + +worker({ + async init() { + return new PGlite({ + extensions: { + vector + } + }); + }, +}); +``` + +Extensions that only use the PGlite plugin interface, such as live queries, can be used on the main thread with `PGliteWorker` to expose their functionality, this is done by providing a standard options object as a second argument to the `PGliteWorker` constructor: + +```js +import { PGliteWorker } from "@electric-sql/pglite/worker"; +import { live } from "@electric-sql/pglite/live"; + +const pg = new PGliteWorker( + new Worker(new URL("./my-pglite-worker.js", import.meta.url), { + type: "module", + }), + { + extensions: { + live + } + } +); +``` + +`PGliteWorker` also has a `create` static method that resolves to a new instance when it is fully initiated. This also adds the correct types for any extensions to the `PGliteWorker` instance: + +```ts +import { PGliteWorker } from "@electric-sql/pglite/worker"; +import { live } from "@electric-sql/pglite/live"; + +const pg = await PGliteWorker.create( + new Worker(new URL("./my-pglite-worker.js", import.meta.url), { + type: "module", + }), + { + extensions: { + live + } + } +); + +// TypeScript is await for the `pg.live` namespace: +pg.live.query(/* ... */) +``` diff --git a/docs/docs/repl.md b/docs/docs/repl.md new file mode 100644 index 000000000..e980d1a03 --- /dev/null +++ b/docs/docs/repl.md @@ -0,0 +1,117 @@ +--- +outline: [2, 3] +--- + + + +# PGlite REPL Component + +A REPL, or terminal, for use in the browser with PGlite, allowing you to have an interactive session with your WASM Postgres in the page. + +This is the REPL with a full PGlite Postgres embeded in the page: + + + + + +## Features: + +- Available as both a [React.js](#react-component) component and a [Web Component](#web-component) +- [CodeMirror](https://codemirror.net) for input editing +- Auto complete, including table and column names from the database +- Input history (up and down keys) +- `\d` PSQL commands (via [psql-describe](https://www.npmjs.com/package/psql-describe)) + +## React Component + +```bash +npm install @electric-sql/pglite-repl +``` + +then to include in a page: + +```tsx +import { PGlite } from "@electric-sql/pglite"; +import { Repl } from "@electric-sql/pglite-repl"; + +function MyComponent() { + const pg = new PGlite(); + + return <> + + +} +``` + +The props for the `` component are described by this interface: + +```ts +// The theme to use, auto is auto switching based on the system +type ReplTheme = "light" | "dark" | "auto"; + +interface ReplProps { + pg: PGlite; // PGlite db instance + border?: boolean; // Outer border on the component, defaults to false + lightTheme?: Extension; + darkTheme?: Extension; + theme?: ReplTheme; // Defaults to "auto" +} +``` + +The `lightTheme` and `darkTheme` should be instances of a [React CodeMirror](https://uiwjs.github.io/react-codemirror/) theme. + +## Web Component + +Although the PGlite REPL is built with React, its also available as a web component for easy inclusion in any page or other framework. + +```html + + + + + + +``` + +### With Vue.js + +The REPL Web Component can be used with Vue.js, and in fact thats how its embeded above. + +```vue + + +``` + +You will also need to configure Vue to ignore the `pglite-` prefix: + +```ts +app.config.compilerOptions.isCustomElement = (tag) => { + return tag.startsWith('pglite-') +} +``` + +See the [Vue docs for more details](https://vuejs.org/api/application.html#app-config-compileroptions-iscustomelement). \ No newline at end of file diff --git a/docs/extensions/development.md b/docs/extensions/development.md new file mode 100644 index 000000000..ec027b93e --- /dev/null +++ b/docs/extensions/development.md @@ -0,0 +1 @@ +# Extension Development \ No newline at end of file diff --git a/docs/extensions/index.md b/docs/extensions/index.md new file mode 100644 index 000000000..a0ed4d3cf --- /dev/null +++ b/docs/extensions/index.md @@ -0,0 +1 @@ +# PGlite Extensions \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..c083b6847 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,114 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "PGlite" + text: "Embeddable Postgres" + tagline: 'WASM Postgres with reactivity and sync' + actions: + - theme: brand + text: Getting Started + link: /docs/ + - theme: alt + text: About + link: /docs/about + - theme: alt + text: GitHub + link: https://github.com/electric-sql/pglite + - theme: alt + text: Discord + link: https://discord.com/channels/933657521581858818/1212676471588520006 + +features: + - title: Lightweight + details: Pure WASM build of Postgres using Emscripten that's less than 3MB Gzipped. + - title: Extensible + details: Dynamic extension loading mechanism, including support for pgvector and PostGIS. + - title: Reactive + details: Built in support for data loading, synchronisation and live query primitives. +--- + + + + + + + +
+ + ### Try PGlite Now + + This is a full PGlite Postgres running in your browser, it even includes pgvector! + +
+ + + + diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..254ae5784 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,14 @@ +{ + "name": "docs", + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + }, + "devDependencies": { + "vitepress": "^1.3.1" + }, + "dependencies": { + "@uiw/codemirror-theme-github": "^4.23.0" + } +} \ No newline at end of file diff --git a/docs/public/img/brand/icon-light.svg b/docs/public/img/brand/icon-light.svg new file mode 100644 index 000000000..c648b0f64 --- /dev/null +++ b/docs/public/img/brand/icon-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/public/img/brand/icon.svg b/docs/public/img/brand/icon.svg new file mode 100644 index 000000000..48d31f5d7 --- /dev/null +++ b/docs/public/img/brand/icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/public/img/brand/logo-light.svg b/docs/public/img/brand/logo-light.svg new file mode 100644 index 000000000..067d5828f --- /dev/null +++ b/docs/public/img/brand/logo-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/public/img/brand/logo.svg b/docs/public/img/brand/logo.svg new file mode 100644 index 000000000..78795c5f2 --- /dev/null +++ b/docs/public/img/brand/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/public/img/postgres-new.png b/docs/public/img/postgres-new.png new file mode 100644 index 0000000000000000000000000000000000000000..936f0616fabd730363932092ab8c262bf7e31891 GIT binary patch literal 170370 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

Y$R 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

olwZQ_yQ$N)^#gB|Op*ME{k{F9Xb zCmpU5Ow{ja7_@pQXD{m9H)%qQp3-l#l$LSj$It@Tn`yRN5dyPQTM0`lA~*s$9}|i9 zJD~3x`5kOUU;hV9`*(D&upiqr9a#zhxZWE8ZgsZjZx>EnnwomE;Z}S%iBA@!H5qSS zj_G-4ld=pvDTqe)2N-uVVu#$aJnlWF7VTpFr14m48GWOv${8 zD?d1o(YLQx+TSGkz_>#&gr5^NMSh6KazD%uEAqWOmQ$Apd_RT(b92`Ff$H-P=l?dR zZ@;M`p@S&=!)4LQW6EpfYyIuNNB|f_Em_3Ne~8Q+!-gaoUcVh>u8Vvk zv@T1-DWMvi>u?_SZtrO8^WlCB;!cx+a%XHv4eZCh{;$WWUL&1Y;-69F5iw#^;03Ak zo{~2Zqr^DNrEp71@6O*?2P(M5T_bs}At#FCmKU9#*S}uE^0>c(x1awTCEb196pO%* zw!)3#Z4QPxTi&An31M1V;qedJvNQfawyr!L%C>En^w4HWQCWr*m6#$+mZ6fREIrB2 zAS9Ww@3SQek3B`QwJ6C>#yUfhwa7Xc`@YR!h8bgK_-@tnKJWLw?_cxlkIa2vb6)3l zp2vAy$3e0fO(CTRh*53740!$$k@&aA9DB;W!qrl~b%ycu-87$6NRMI6LvdDqqSx|130(U0(Bgp)_oEqygoG`Q(XA}x$plL zClwr=?jtpoIfW6V{mbU|UIxF!{tJ$Va4+=)c};pj=WERpgQYD$+280zzTG>D%ywHF zjgGm3Fha1p2(ADV6 z{5PZVSyyd3zzRaB7>z1^=m0{bfOK*8e&ezc%{CRQVL~dK%-)P84F%Ks0dc~iy588x zy?Pq%@P(kI?!FA;G6BiyC5vJWz5kr10aI5r0|U4U{P9}j>aLRyzidvIDnI&JLk~eY z2Q%{-Pg67N1BU$we~hPZo_MAp8*qwnzoF;Z{qJzZrb(?MyS+BDGd4#_`ZC_&b2{gu zws$$gP(2agQTBhDH6g7k_OE;{z=fU+{dZFO&*pvX6Xymy%5G(+7$_b6Y9%rDiGTeU zC*yFu*6CXqGDRUp=nWG%+L}^L80(x*e+!4$mdHHVkbguHR!@lk{ zC#CdQXL@FL1UX{aRkLSwABhV^?=#VF|1^}pEefZb)!hHgT$*{Gd@N@+R;`%~_NeM`ZVK0@lL9-yYuRyGx__59ayK4k zc5{<=^y_cg^^AU*L|A#=?gu<>Vu}q#t9PgoYO%b)m>B&@b2GO=@EDCM zoqh_~^`%z~X0h*BnvIt35Ft9e)w?6Yj88`sT1G=A@UjZsKMej8yP@%G!RQy|nP&#T zzlsf&*j-jqV9wQ@amz-BVRnPBb`V<5#8KIqcrQ%0cw+z!Fz`T^ueCVrRS)uu3Xc{B-{_Ic!=Lhm;;Yp=Om zOyX@nJ~L79cOW`)YhRj;_1WKHi2-cJl)(6ni5b8NLv-t{38yz%rxxHWD(^IJKYP2H zWz@28`_AtD{D(w3A?=Z<7yqz8KzoJB;HzQi54*JqE4mHG>EZ>i4%$^X(BA5AT@5J@ zZ8AgW;TjhQ4#N2fCWI?L3$BV-&Y7)O>gz)hZM;;)*1_TwDoK^DIEzyAsZF0HXE?4W z%i^0x(3(V};`$0RhI3kQeuq@{i*U%_ArP}m(>iE6mbT*uP37HQ;Z5BcWTj?jqJw{W zaqtZ>x`fp@0~)+I=}jOElKRu$V6jCyQ-pj+_k-rttfD4?`fhVL03>-7WZsx z`|9OAgU=43mLV9IA;O*L9DGjya7*UPll#8OrszF&Z|WMwPS+611p=xqLbt7>u-&se zSZBzh_E;Zr;LTZqM2|{_+iS%eTLM@`^lND)=a|a+^o@Ed)ofQSFvAk2+9e{kRNY(*4G?}&vS9{wyNMG+9mBAg;s4m@^Ckr;F zltzY*92@K!=@Tee`pJY2X_KnswLt%%M6Gu{2CX4KyqYQVZQ+XMmb}>*t`?v;6gwnY zRq!>Px3~dXm4_Q8O!2r?*5dlXm;5}aV%0R}w-aATFExo{wSx32T9a5Q6mnz6A~^PU zfw#7Aif#)L*q+qfnw;6W)Ah${8f7e$mnWdeC)$?1)ade(dsT#rI2iC5vl?YLgaqIP zB671kQ!Fe1<{f$f{eC|ha77%|2Ui|cT~WHnJfKO!VWF!1V&^Q@SahUa1)Q9JdQXIP z=U^n^)F2)x#1~%xK2wJk6#dI;W7P=Cbm6qV$e+ku!T#Oou|GE?Dzms-cr7#b(09CF zHUv>Q{fylm;W50ZxofFA`u7_lnYPX%?ejtg>OD3brmgR^8$^jHYj6SmQJ#^KY-gI0>Vc-FhW==G@r7Jlp(=McH{tOcuxoZ=^e0+?P<}0j zx>VZXzBOgM<;1sKJWG#hcvFna3t);GaLJol0-}y7QlTM1CM_Fo}{e0`lpUHPaW&XS*m2@-a z?$et-*99Cor1oFc+WWTanbw)xLN+(DN^kHd;U6BDD`~z>-I__;X3VIMQj<(-{X6J5 zmyDFkWdxbgp-$4Iwx_BJbabbD>p0K=dq~#9blrCr?8L%kBa$ynn>Sb0 zWcv!?dtA>j)Av@>f{wP>*&!49m9p}}S-o-h=+A0!&AE$&IJ#I|s4BT>=t^%+hFAbZ zB=Ulo&*t6QYmMd$kO)<#(%yh|knixSBs`f%>@0EFVpw;=M)QQ{=ppQ9cr8-~6?*Je zvJl$O{0!&*kgKow&Tz&mbE=0k!eE$|n^1WhigjmB=b)sfZFyR&Nia!_F$0 zcAg7Dy*;VfE}Sh{PEwH>atW2wawqDXJ@WJ2Pw{(p9~oN8YdliDn;hWDt^ugO#BkoO zRcFmbBU`Z}fX0Av*+-r?I9HQ}O+dDcSTfOZ<&*8>&%<~Wmu0|$Jf0;U$9LZ9ZsvBD z9Fuqd>a4g|I3UN=tqJeLbr_Cx8F6+eG_XNi;~?yY4_`%goWmAyKX5)`d@H2`d9O5A zfk#<^wpv$7mZ^n&p4j=%*M)3*teTTUxlwBQRW}|ofv-ai2Dh9}{$#vtj2tLb@nfu( zgf^lI2d7jYZ;TXDIdztpNeO6q9e%zpPpXaQEl0n?3o>fJPkW0Sc+0wzoI}j`32Z{p zR~cw$#)13?0UajTM1;F<|Aioubr!(MgEIRzMVAAcbS8A~rFf9p<`pcMbqYHhBv@IJ zE}u~#aK^gqJq3FMrm0w1Ae%%>1qhUDIqol87e$xWnJnjE986SbXFYFm!vuCK2W3jG zK3bFz2h(!Z`Cz54H^0U?5ie(x9y7b#2TekvE5D$O9c&+*uK-0-YYLfqJ(yF43cA;b zhho2==FfWfa0kwh6vi_(Zjb#m-B>WM4Gtt!kMv>(tBAv7r8K}xD&|a4mxpFSXZv-B z&On>%_i9%zTP?}e+gma^yJ9JCfr#24@^<%bI)r%HYRz$P)z^F2p=-|$P|5lQWoyrL z{Xc574p++#Dg?2s2)F{cTfpXgc6sEIDLEU-8YB?l9|AIrP1XxvD90_^X5kNaYA6(; zeeB9F^(C|uW*eQO7RYVEOw?A=BpcfICCDK|fl48i&2+pw-|ZH5-JNyO%h;iO{@hAYN;w?Yk$>%3xOg%-%O&j+Sk8m#LaW5E#Rg^b0C@t zg~e(lXYi23*MJ9(8DiCqp-0g>X((J*eS*K7v*ry1E5iVy-}a-AYE!CqLP-;&Rp8oEdI+DQxQaNU}C{ha%#_ktii_ol7C}9@O@^ z-Onvh9R1Mk9b$A=bDJ^#=z!dPf{}LB;+*>3)YwQDRb||~VR-e>v|NmOc)fbM{nQ|8 zTE;GD<3~882eJTN55~<^ftb}XE_m3u_iTTZ!NldeGR~#^YLVuD4#mPs%LTrmj_RHi z2Lr*1_G~i;Al!alkkcf~@b7<4wd-3;{-1!hO<_^rZTK|gd^)HQ7*A){d zF8dWC%24;fH7j4nc>*e~N%r?f!fHuy54D;lXRupsX-Is3RDe2`{|LHz%FrXYdnGoY z#?f7v!3Y4P@<@vtW=A*g8N_j61Rb>f6TX#rztFK$2Wv~=^=DO7b9;_jdaadNj`lyT z^DwrMJ#HP#7UL3OLqZ{cK|OL~5B$o*ef->4wu<9WunnMUx@fch(cJb1R`MHrq}Me& zU1}9ho^1&~#5SG0;X% zL++-kS7BmJ18SgVlGLmu+{R7ko1vZ)nFT+!yVIwJ*K>CrfN8;6^W+~k9{S+>Gc^BW zx#}dk{0fU!(1IoG!mWiur51lCc63Tg`FIB4WWuxKIurg=jE)tU26r9-DnsmZq+y1^31T+4bw5G!eUsw(T58XLu@4V#r#9-Q`~MQ+Z$dKvGiebnQELE0^f zQ36*lm0;}(X*Xv@lMgZ}&m{ijoH_)Ea9y<%(nQYX+#INRB?hsmZ0{qv2UL#(l0Uvw zb5Wces6X%L@uekEbZj@_1_1@MO}AgyX6RUFxaA_6cY=PLYE8HA$m-}6WXO> z(RO*zssB4$Lg{duIT<>R$F{DkVwF&-cO6VVe{P_vzo<%R5uP=kk8>6*bGm^^U=@v2 zAGnS+tq|q96wR`bW<;IKczT>@nPunvA3^wQ>-zBZBU>^|@aZsYO^sww0?Dk{`tugH z90#|swieFVTFX{08IF4gnb$XdkhL-?Mz1jYs<9l@F@Dax@`hvvd{3#6gf@ruf^Nl* zl%)rA$SUN6jV*{Z#zkyJWFgEVC0{3unT_no8p2BOWDG!k<58{|Ka?tVcy9`YR$hzC zx7W6?TMj0;Sx@ytw6u_=4%2U5#q9Ju;fpr2sxe4Lt2w?)N^;}9(R}Lg(!F|Fcdsa^ z4qZr2{YcG%(mBmCnxGVl}p>%6pq^IH23vwJwhH>LRB|towSPx-$&rsn{ zqiV%v-`GGa>fhms@`q7d2ufhjo_GzckI9tWbTI zTH>YtPBUrX>Byq%To6xIvGuvk#0b~~6vlrHHCzf&%j*tS^RwB>=l_;QfBx%&j{RhQ z>rHG2loL!d^C9Z|F@PRkga!mIT92yc<-<=CG1KPgclkYP0H`Kh$^2-J`^aBUv#j;R z#%+|C4iHzL8#mvBh$r*6MZmAX_DVe3w60yZ7M9?MivQse)Mh>Czbl|-Qk2MxKY7{U zl*Q$UwfEU5LPewEp!rtqq#FKhSsP6eCQf}W*}3eStyY%rGbK5eZ>9aIzqJuv-F#H@ z93quCbT9Ftbd)_k6fw2r=fM;uQi>3r*M$^I($ZQ&c7$Q-cf4xGfyUN{c|TKQfPZ!K zbmG3x#?}KJ=M317Ym|%apYG=Gph08edaQrf7YZB_mHC$f@&nRE?R4J_FAjyqFX5-1 zy?fXziiJUjsh8e`t86D~G7^cw=yZZ**42hM^2uH1hY z@IOCZXxVqRF~c^T1aA`{W6l1#b^LWMXa(r1S;v4(ku!Fnu9=})MMJrv)O4~-0&>*uGCRIPycw5p7(Bt z*fE_asoeIu2!2`L{&4|$TZmvIGD@L(a-vtmZxipXg$=?pLMV2NeTO|E_Rcjzeq{%3&bv9 zPfQ*y47^?~w24h{D_$&-?Hn@CWDd>p#054;KH*Xy+nxVSLxK1%27a>|G&Pux7=Jdz z-@2!{2OL(|y4+=F>i;pax_9)hk8~JQaL>)d?77Z4h@ollIk5AD=;MJpxW7v$>|pN$ zx@d^SjsMyYo_8fKpw)=ZiwS$09f)7Kff9ej!3lv)VC*Q|VJRmD+`mGb{k6d*P_0Yi zc=|bUNMB#y;DVR7qWp>1(I0dkA@c8JAG_?(`}))K5vMS|Q)aT8;tL6*W|AY6q;go+ zdVFM6{m^t{gXPF`ABX zgAUZD^N~d&LQRgwQJ;z}Hnc#<&Sp8;TyF`Ade#H53-FdWg2}>YO11{cwSK1~(fQ)y%zP`h{z0cPuEjsM(r)dIP?<(ULW9QT zni2uY&;453k{9@no5fqdMgx5X?~Y^Q-~-Pfvv+h(O>bh;4WBBUY*oaA+!^@jU11R{ zjCuF#>)ts%KN@V$TWFS&yhwXMMZM?~;o&)*m^xh;F>|<&V`?eL!_Tq#Fr?q?VZH%( zbK;Xq@yxj9K(u!3p)GO7eDoe+DGol0UU06=Kmxd9Dx^1=_I8xCag1O)|Et9g;Iw&* zY9tub1qg10V8YU@`s`)WiD(Py$qe><09X-+TOlD=K zTLW3WWO!?ykx&s&s$O>+%GhwVPNH^b){<&t&nREC2m9qxO|ttR_;ZG{z2{H9;g_K7 zbzOdgeN()DX#e%BGF&hJ935!yUP453M+tp>FL`Y80<*&}NOW)^DiW{P^=Br-L0OQy zjbU15S1G%V7LM>uQTS*Jrcy=8xKMs2SGyu{$D`Hq#1V0}LW2F?cfD-0eix31(8s^u zs+Z5xaNSF`qpX79Yv|AR)ATwNAS<2v!!B2}+Pt!ZyN%l~F@LEv8Mu{Z^fkBHU_L)y zIj$qU>b16#ji=LLV^dw1k2U3r@07uX<%%6N!QqSJxObjLZwj4an;iyBRK0Flo=AHU zvK0vP{L?Z~QJn5&AI;ABU!`8tQI2X|CAMW}32W4o#9*LT;9DYB)z@<>y+x`u^b#7!r zu>5}R0HYj>RT={Prrl|9NAV9)?a*~Y1uM+Y_)+2EZ=T9pEQ-8Mup<1Jq8s`f`g!or zW;~~?uA5c5Rd&45YG*epB0jbklPfa37|<*izi7t9S-i6Rr2PD|`~@CHkg6k-3hS~v zSG};Gj^~exj+HS~-E_2_hk#>@GS&ibYgsO}^C(~QRaRKo0j2&kZm-%ixtG31DV-#= zs%euvSdAW^*bQvGZ2M9FtWTsn(9N!7tOhZGl1h1J%2D4n$X;aI`_}+i!@u6`9<$WCGHyc$Puxz=c=f%NZ&-?l zZ=yLck&8Phkq?I7=>j>GFnONktz!I+kE>;^p+I~eGGpWlUGCs{q%(NxA>55+u^45? zn)u$k7J>41LdMT5;ipc6UGWyfbK$fNEq{Y5am>c|?a~fNb(wBD^3$Wk`e8*u0D`PG zv|v{LpdsctT}t-c?;`8GPMzO?-w3V&b?rp}X0fm%wq<&7B)RyaQQOT3v8yB4d(?#} zB*;S-OCW|$u6!}LOuPK)n;m&P#GvC4y(uAfIH#of{9h(bx7nuq=p*ryDk{_3c0tYF zs+Y-rjo7(Hf8XHaO)bl$=(t)3zWt@2FA4_`2LQL1?8yoL@_6!#%RzSEeI7n z;5k57D`k;(deb{%2nl>$93?0A#r2FS zTZUDGRIZza9g~PVf8|x%wWn>8*L20Min+=f+foLOG+WKPBa-IC6-Ana)(6}7RvHqx z{ybS!{~m6;0RwOJ>?nnQB8|t!JG6zvbLl`vw|XfDG6_(qTGhqNdKzi0_n66vetFEx zy%DeE%8P8?TRH;$8<)(J1VC=9$V>D?l8GPj2~+5zrOkOOGIY|~0dG1bHgAQ0;7KA& z@2qcDCZgkH3IJma_WEGitIy_FzAP$}uGvskG^Zy-nxG4FevR@8=|ZK&cU%hh(N!SR zJ$Ecc3@j(+=<`8M2{HLe8GeIFzG3I&b~4DA#kIQW^O=s{>6G$+atb#5Ap)N~^i~3p znarsYzfe%k44)#zMv+y}Yp?do<9=_xUou!79OaGZH%Q&&_PvtPazJK6mN zwlQ4%krfn1t3fIW&cm}~iO)Mi;FCh=ksc2wD*=RsepWXEgnR4;Wcr!O6Sd)a zBNErAVM*J1+qUP+*XyD-XA(i}G&S*vEmK%E=Erp01!4~jJY?D1cqB)RtHETN3Nvn@ zDQ!*$DLt(f9e7_F?djsFEU|gw^7`AH;{2NA?_LwdHsI0Z=?XD$N6~C`zMq*JNFIv*Fh% z#PRv&^`;i#Ca18e!ffmosZHcSPN^mj)X<(L9UR%j=)&Qi#ZAu9OMt(gsC-mc4o%1F zK;-WRT?G^5mA10f<*Bf>%})K1H)|CJ8Yt1Tqn@)DG!X+(K)BRiW4!;pX6nDH9n>Np8W+$_n zBeP*^-fS=MC^2Fi1;x}P`x!72H%*cPm#$4s>FNxHH=nW#K2Mzenxs;N!vPsNwuzAg z_6BaFGBR0H(#j;`UI83C7U${G7C+qc?oiM`c}d4sS8 z(J2F=oNl-R^@`K6T&OBdGr8~7oTGaZ3=Pnh{Q#z27VQ}qntP|l+_tFMsP!-%Z8*I? z{R@1lyZHDa$T$d?>JHq?s$F>uhP7V+nZ%rN`PYWMYER@2yojHB6E)}pz*>1@?}$-M zXkJxYo0>J`QO(qH@uGCt<^J_V<;T{+&igS^(*Det4a$c*lk0i3NLK>e4vYsr-Vc{(S!_R?&xMY5^ z$x+Y#u28RQ@14wBqHx2lw5?AecX)+!wXEcUgU$1jghM^USc!;vUl$+6($Y?_FVtX3CxF zGc?ajaU#4zX)i>Z^rbVpjE|>745p3e>8jzP9?7_U;wH}(GAQ-uUN+l@veeUq7;A5c zslz8Vg`Zh>;p~5%gr0fg@yXW8gGm1croVfiTE1g;FcIKAl&G!G>dlFMCk=u}X>IPK z7!;7Yz}=uY=f-(x-)ae^7@0W|HdL5=Hi-PK?37LrJPnO%0e zW8$06e~ON7Y}S|;gf2@s?YeCbHmd{-7EK-h2KGIDPyWD!F72RPL;@RNYk(lEabD$< zBOZR|Q?qF2$G6f(Z&WsEkUOy-UssEkq>K8I?!6xM|1+ca@{IetY_W%5_QvH#An#5W z1CD7aWc5_k)-z)i!=Z_IddTET8c5i{v5`T14qB8JRf|jn$9jEcCgzmG z(wbHJnU{o5jj9Za-JZ1h`p-lC3$GBl$sM?xelnKt13k|%XSS8_yFGm?8Zuyh+RT*XzlVP^J3JqkrejxgChV=0K!&O+YT%@>%yUwhr?KSwbH|du29;1-8|70< z=BZ77hR^rDG9$o>E*(!#nk-JZ@q0M@|DoHwCl5!Tt;*Y3x8*%C*FX94@Va8$Ah?`y??R#A0h0y!fOHxKrh?HmFOQmZ8FbIAg zA)tcPe081nG4G#f_^0!;=iz`h^Y4ak5~CO*m90NZx?jB^Ns>=~7$q1fcM9D1OkxZ! zoJdLMBl!Y-Hp)jPCBqipN1ryHM7sFV%PwbFjpLhlt7>3GGE{=}o1UzxfSnO1mcu-k zKU?&soE1GJQg|;}`E+XVZNbVc6X-8+_dkB>I*7#BnihbgC^>t3%`mMV!n_<`j5!j?-Uwau^1TiErQO$pGkGXt@( zsB3{9EopiU64z0u9Xqc(I}Y@xWhYXg;F74;mnC@WBFlH8I ze+o)+a}w&8k(jXDCd$mpD>wOHQ_>?GTo1Jp$XvU;P5=D+dzSWa=$;)YcsGs+__9}5 zIU=T;QZJ(>mK@jZbojPl?NcL$!z%C{x338&nG~N&&tgs<>J*G2>7X+XGJ>#DerBxT ztA)R(8UH^bk8s@NC{h)fR_y5|! zM>wi=cg>@BhRzkNX#z&X{sxsd>@$_hlb*9)c&h3XmLR!Y zV2LUz#Qa(02i&8PJ*C4CA|tUvRNpDO^NCd734BIQ%`+JyXItL)KjkAP?Ecs5iJ&To|!qTq>vgt1^{HTP=V3A5j&%`=Jkz0DGXJ{ZVfLogQkTZgO-`CF~m%Qi!Q zK@V@dfVWAoZ}wFu0ppe>RSy6#_djK&QwWCewvRSaOy}O)r+P+b7izY%-lf{lso+FSR6;5 z1KGr4`H#-7;RBp$bbOV&X*wXmzkIxOgnTcc826z7_OGXx7U3Y5JyKadD=}c=FA`ER z7qXiVRp}TM)w~WxA2%Q-z_CgEWG~O>e+ltVN3Hc1+nU+C+8)0jb*`Y~ch+&`tl_SX z-3-(p>3CJ}mf!oIg(KJk6;#ywhV(z!9@_}p4;Thp~7mJj> zJ@^Z`kZkm$@0qlbWmf`SHuMjd*<}e61v@K7m2oE=`?AYS^R^f<$7G1vGpp;OP*|E; z(-+`6@+7lWiFxT!sfr(1#@b_2yIKj>F!~~+q+EaAmwk-kRWolM?&8E#Z~xXFil2Cv zPh4N}`ao)J+R}kqf}UntSYp&q6Wi8GVjtU=U-nlT9NHiAfu|6P!Le?!&)&>KQUe{+ zv|XO7R7Iw?ho#F-OV+n?!l`!s&qj;NQbx|WT@}Uz!(MI~NY5%Kc-6ue{Jj&76B1d5 z=>u1s4#%}+DX%Ln=v5J1n_PVe?fq_n-wqFYzt{>JKEzqx++?hP^!A5=MK7k0$f>zNJ3OnS(F*(nM(tCzLvMI`9Lo3~Tpgv=XKQatidp_nsbu*tD4USABWKP*KE&&YIi+*;Vn1g8JZmLm z9|}1*y%DBWkFv=$$@`<5`J;n+UoQq->kH3|7iNEqnFHyW^1B$oatTto=THIm`g>QGfr;UA_%;)GmzA$zbaBEx zAsf%nD>KTql?=ms`^|&6c~MDQH}eLIc?P1RPP@y>-qX$OIB;BGVTr9Whrd;>`W2Yy zU@ofzOiIx$^72+eI&TEcWAnYo2`E4>It1`fFg+1QX!;h7rKzA$1RiO+5cq zuRgBximh8pA^o^EclRlBr2E>M09Ub>Dnl)1wpWud!crcoJcqEV8z((1((}JL>5?wB zlvC>btJs{}x0}#xBh9~Gf+$)`_A3-duL@zjHbwwvw(%XVtBi0We^F6zZ_{7bIj2ku zgM06pSlMTa5n~esyUc8%0M$cmYqM}WxB?*JgqOCf<|bUAAT*j*W!6hYYaI*E!ka0Y z^0A46O@FZaW86V9x_2eGH0hNchsrCz!(T4597AP8YzALeO|_+dEbNdh?|uaZeg4Z$ z1x*M*nctLroUlx?_)mOjd}h0@9zGkKRH0crHu`M5ZLngPCv2&+MdLSpeLl!cQ>#A&7{TS5pw>f z-Gc&gO@}>hq=#^pp|w2zk;G*<3gEb2OarE_^*aQ~?-zB2+^-JGB!M)XCqJnNQ+fr? zPcJKl!Ib?C`it3s%S|l|jvGJZp~9N+*qZspryLx#s=t9k9^-QCKXq$x&o%E0cfwh7 z&Px&bD_c9a2-3V;&ys3zBkKi(qF0mZjAmVkybbArxiCOqBEkV_1JM@@?qUyvmlybu zsjtE2GuB$|hbXWI$yIk1`lDJlmaf}(aEUe3wpjq%YK4+qi`*Co_`y1#gyWDX09C0B zf~S8JzE|W2EtRet={FF5-*{s|`mNZ!Gs&bqX|=<{wTdj!7#Ziy$PrF*nok36O_Nd& zlNF?n4*A@syFsZhcm5n`@I`Ue_9j3pNkWUyN)}~a+}@!~!9_-B*mAha855A^2rv}^ z?oUA70fLK|#i){W99=U!lhTBU%0>NM`e{jA2myk-P}*HXVr~BZ`C#uCPcvJi^6`0^ zW{|?IId_?n)a9h61qZ^Hemh!Lz&B9a1 zAKlO*b7Qq$bqh%NHa95;OX&81tSOTM)~>wP2@corpH!}>O&jj@J5>Xaz#hoFNNn2f zzr(A>T1m+CFUmhJ0a*(=OVk(9ocl;j(!?tA_jolPclqQ9(Qm?}tTGP(Q~njqR>$`7 zEh1p>QlALmaDq&;Yf?v>=cPBf=^%C|2p;wfEB?0Mh&W&xF3-5S`4D1_l-dR)!9T1A z`A&Bqy2lCz*y|h~n+zVUMMpW%aRG$thSxCKGZ1b}L z>xpuWLxrc(?o%tg?`$lSJu zNLlBd8JSL%+f5c}@$qA~wjF!va*qK$x9r8k-qt6?AV{O7@B-i%O=*6a^cu6uE9DU%`kJIPl)-Jlr0CMg{2*k65`vuT4Z35VMu#R;0)LZ zw*}FzVr%ay3I1e4>0jE|Q9KtzlV{QH8{GgizU4WYbwSRcKgFgO)D;1TCxG)&tF<1= z=X=3ML7S(JH5j{EJiSg{6rQwviGtvP96%JwUO40roK|*0Yk<3Rtxv_&)0XdR0gAT_r%^=ly+=R^$o8>OurL*Dh_9>2@I6NVQk*Cp0JgiTz|Ef9u?wAjT z4EXfENlv)#eC00#=!QUcUL3Pzt0H+IaWXy6b6L1pSb9bg21VNuYyhm(Q|9K7Oz-c$ zyiRreFLC~O&ps2mi4M=_bX7?xw=qaR^XSfb3W|8UbNN~y^(3Tfa5!y zSw)WN0Q79Y;6f)b7W2_cdlFIfbnpgk2Xu*PzAMy8*>OOI`ynDuO#N|kPs-i(lM`Q8 z0TS2u8Sv#?aK5T;w8htBC!c6I9n?^Tn7K***#kFq(mM=~Z_>o{gKynX(Z*1Y}P+e%O66sU}kFCsupVU;FJnr(3Y+%e}EqUTAR{hVoxTBrO zaWze3|HR@oF-rV<7r&*QnO^zPLDc20Lo=SGZ;qJxmR(CN6V=%~x-~VGYkb^NCVJqO z=0Ss*6$U^`MBQApR$4pzW$6#)iq9(^+oalI7M4?Zv-bwY7`0#me_pB1&Ot5o#&L|k zV-)3iq<%@$Tw0mF4i4^I@!0xa>pJ^z^%EA`$LiZQs{+amz=adguka28bkBzyxohWQ zL$}5~IG*-sCz3SnXCzPUh9=E?&Cu9LSiUdiRAr4yQwqnj7;HbQw1=;QSp zR&Ov}y1wfPkk`sdG2q+=sOk{91Q zc6|@p09=P^-Qdcf*CKS)-^|aO07O?$(v!X00|Bv9L%rpf3EdF+eV3oeKH3JxtsN^R z$+*0-`Xmdy#>pww9FO@A*4DjmH6FR?fj)(6jC%pQ)nQiLy7A#+_?D+fw_Fg}qrjXc zzdH?0_#<}&6AY?Rvw;fFdk(s0E1ndz zq`u%!BPR#)x)*1mkQ+&7(g2biPVTQTa)9c{+ec&ldNhKSyGW_*Am z$$s9U_;S&K);N27j?jhZ%(VWLGt|xafhk z8lOhBgmZtWF-@SHwEOD(mx2AJS&Eo}@LF{7(W{`j#hYkx{&9~3e_Wh68u>mmzpspU zEymsVtr;lw^S&0AG=?Ib4`1lUNI}<%HNGdXq#XGkZE_bEM#nyXvrv9pM1P-x426FI zOTHi$ld=p{%I=&XjmahzEp6eJ;IqKmd-gz*hq3= z9gAu9t&&5xw=xl}29O2ot%|qPtcGf#L<}u=> zd6`qCtNI;rvtRU>HktC3^>QHQtGGGK^kthnvpdu~rKGV}$Z81-VIREnYF9G;Q_Q|~ z856GRL5Vbg30`juT*$+!&%T66C+|xBNpGj`A$;{|a}6%icHzT2^nMfBeE&@`QJ#EBxgJq_hqM?qaT_NhN&JtQM|dl&8`KZ7qZbG-{o8A9vs+uZ6`Wh z{peQlCZB#tUiscbCwV2#oGE=IwEEZFl`+ZF^Aa*7#pwHp?=VwTv&7UwA$zb;@zLJS zCn8rT#E#N`AivLWeAg zh_}@P?56{`t=QQy8oL|KSXxOEAHGt?oc*efF4IC>TmXho{#5iKZP3*&&i#)F`zm)YL1TCrYm>JjNaC|W6ckL^iZSWrTsziwKD#TF6SlG z68bkyaRaRpHRz{t_pf~+T`FpO;`OdD#wGDsqqMgnes#(EM5D$xzIg81F&V+=%4jcF zw8ScB!#kR|f7y1Ai7|ZkFyLRBGG?P~grC(|c2)JH$?n!Z$8jV{suQ~MNa&NdW2d$@ z2gl%4{Hx4yw`~Syy>QD^vLIoKvd%WTpy2+gH!PIq7QR~WUBap?JUR~V2ThIWv|Edj zmEX6*!Y?!N{skv8EiLnh1T{Pb=Du7{73leFwxll|-S*VDPy3-;M6sJ%(pdhX#v-5Z zFLc{eHw3(m8jS9$NZ@BX+r+J`vNeW(bRbxZcRL&y*4)3k3xM0oym@U{J;2`Zr(enJ} z_S)k%euOe5RsrNVc0ExO40UqLXpg0spB_Sl3o72T>C0wLnx+}1N6t6sWC~fIb(;?Y zYw;KS>NW)S?LKuSV$alxlj{ilEaF6n)4MZ=_eBaHmr+cZu=G;_MpNNKMdyyBJmS;- zD2d#gwa5FKhS_85*Y_1qX=qnF=7#5=F|c250%l`G!UjK4kI#wsjqq!S#}}{e83+e4u9>pJ<>Z?(;31 z6^8@9nyL3+Y*%d%stoYu0(aLxz{J=RnvAiscW8ibM{x=mDxYDq23p;c?+b zd)P{N-xb2NN;gs+qMN7vx=R}@Oz93h{f>)z#PpLOnqjPUzvszF* zAhpXMd{xR|t;}>>N~{0M+30ut$-wx18xMebVmPrMMOPzk zX;Z%R-S8#NHF^8EPsaI3Y_+~ggmi}Q*w_woduDkzo<{cO4i}Z&wj_4x?(jKoj}{+>f4QHlM+Wpu;AZjSh@r2pieY#VSiYF4(UgsTR>BD;$q zV<8!3_@T{Gp94g^Rqr)z%OmT$YgDu#n`R?+bUK{=7=&{7kZu z$&87_t@#ap6e(bwvdfE^x4xKXV~s3r4U32TC@-*n@K6cFbP zR3XDI&@d}>a3{l9R3Xs5V6?x4Rq?B!k%5MK14~_aFf|_Nr=W)uk~XjZTCyYuvukxp zn52$y-YGFWR*>|f>rSQA$+g_TI-^51u(ocJR0Vu(+$J(O2f8|NDtGy*Cni zyaJpe1)!eam6BH_tJ#;1on@CCK1OtLE;0XZ!6p^F?epfstv#vBl;1ng>vy-n%JG}i_qe`(eSXmXNqmIOh@{fpNn&3_gL)bkHpOmj%=c)^|O zDplN5sJ&loQVF)z)Je!(w8n@_6_k3^=DAsr6ba-3Za#cD-Jj<77>V^RVnm2e$H~6!;R={6U^Lb%{7bsrri>* z-@59#OfS|EKYICW4e4W{r2@Y!0;f+%9~@UusXL|5vSx9dcKYCNjqrGd4~T}m8?^E> zGPyav+>#!ob5C@bt6L7d-#PIu#72w)OQt6Vljx>)Lqgj}#~s9#)`nHomh#dOf#7QQ z*@9vZ7)_v*-HSjIeC}Cf=h>HF9CBa8)U#30z4_j(Eq>)rtN9~VCF*C+s6+-N@mvjZ zt%1>vb|sfgmO<9SYM_-BZ}`-oX6cknO(&>)ktK8N6_^4h!J&*0ZTOnT08Xs1Tu-=w z;Uw5ASHYSvBY1;sn39?xX7@T`UA$5#)_y!6%H2h7c{cOPHw-0vE#_sL13O9bZ38r~ z&#fA7L?|!awzbO93G&GSmcswsxocM{*zj2I@5O~8J83@l zBIm;eVc!>z`BE=QsM_joXD!#p=}up}@Rn5>$3^u#!Ffj~B);?vuR!ShooAeDE>Z_W zRn&)#ULq3?Bj4`qvNjw|-JKdUiePP(81FSlmhyA8#55<)ik)|{*L{vR_-nm-4bcEd zN^|10E%}x95VlzP;fW@F|8qtqr(qXgwP;ll@JOR0fdHapfZR$_aNExHQQmjO($8{= zx2tmUzNL1=Mte!8zGBHOPsJcis8qqd>$PO1nJ(BRKHf*Ll1e}RBSk-8mxrLRK*cLq z;UU*cH%KR=N-C;VH8p)ciB$7fISYIpYlm??6#v~u2ZuN%)fHNKKXD+86|t%Nou(u= zphCv-5BJ8WVjo)6iwK?dj+iu=Pf%R8IU#{f4c@9F*}`hn7M<*!F%yMWO|a!E}FQQB%E*1zYW<3px(pvT*d!#u`p zyiXG~1+`Z5ZE`8yA5CdB8<^LFR#0-;3YsBtaZP@C8a%1f7L!bTB%?y4XltEzf7&?t zYeIZ=RLZG3~|u) zDc=|5(AtIKUvS-s^_jw*uPjWh%JL3SQiQkt|n zrB_uS{%K6TB|c-M^jo;j7}&GNv4G@sVq&O&(xmF_SP_o+QiJ`Fw0$7^Iq1c{w9EC+X| z_#0!I1WQD^H8-Yzyc)kHQJKQ2X6aw{AjuyYs5e(7Y@!jGJ20BeIN_KmICiYR5WSaG z(jJjk27hK+ZcuKsO53I3s5Q^&6A4WYy4vf59yTe2U- z$3bkI5?jhro!OL?JDb`?=w)u{Ty(;`n)tH(r#tiM(kWrn#Yt`vEEG^UTJII*FFwVNCb%Qo3WzGPQA*7 z=SkeyPTwgBeHd-XEWAME^I#_;|9mllcbwDSYmAJ@!ak8Qo#ri|-%z1=d%nE5n{=|| zLmkg^K;I6J$RQFWdtb49++|-_x5sHZSr|1Kh!#})mCfDFHaxl8s}A*l!d&5AZYpz3 z9W3V=)Ioe$QGOk}B!h(3`tr94@I(uMVf$a0V zFX@N+6L87*rCdc9(&)u6+B0?{yyKqFWKK>Fs!AsYA5^6iFTT?DjL0dW-kt4BU7+%) zT(=O{r1up7J=bKhmXSCOsM3LmNOwNuS4o(y^6>FHt*@1r+4D2-HrVeLs?v({#l{i8 zJ~tWlsaYo7z;;}W_9(!&Qb)hLZrp3OTpz!uxcu28fp*b$VjwW$(MKijC;{HeFYOH^ z`qu8`+E%)2Y#ptf?g8>(WP4(Xc)A~k=zFR!@UDjQx6SRzcoWcg^OuNg#ab%GYt^6N zIzmQP&9HEjk3yK$!EM5IaTk@cJJR{Q;!BP189!BYpe)vxjl6zaM;w$sw^L?~Q;I$VQQ0=FU3&U}E%EdkvdE zVG!zyBMF|{juyLU1Og)8r4ovC)WLD(Q4&!epyes!SGH?8p>s}jB7K9=?VlcQws~s_ z{0J1l-yfV4;8ZyBYvr3k=+xyhBcSJH^aGwVy`q+u2P&_^Frx1`a!XMBAa%=@m!LH|okP zF8DPMT7TbvH=tHwx@?u>nEdL>eMn#TQfU5QRY*imOP9C!D;oc=b&k>&VaEkpxl*}IQAHaCt6JlLjzimi|@RELuv#$#qNr9J@ zmDR<06(~BikDt0tK(=V~#jk9MBEotMZF z+OB&+#0{Exy3uz&UrC4E-T5l%jCDtSXq4B6BNPA{CFq%F39%!ri7PLUxupvUR!56Z z)F#DhOcFmfPyY!F%+#tR&GbdCF0=M-%W`4$L%@S%{AXG5B4G8g5UKWBv*w9Uu9vPh zrrzy4hKtw0T^|ivzD>QEr!krVDG+IW>YZ^_y&x0t*$^qbwP5CXCq*tSB0&ta^IBY< zwcVxk?x11z2T_1o09fR-DS5^>xwmL=5XyB6!RYa9b+vJrAk48x5j&OvUGFmq5xRLq z5!mpQ*gyf!u=tb%qZ1ZE+L;UhTma^x<2_3%o{E+x-iy6Fuv)o*bp~nfWFI&NE3h$l zi&d+{;x}R}mpIP2;Pmq$CV>-{)iJ*wx-nulVTfIud=`C^jwbSy~9SqSePxb1A>Vy5S-br$PSMapieQ8uAgFh6}c?tZ*dvc^c z;x5GVLxYm~FIy$xzCwXKqb#z{w}P$pY1Bz&;%{WJIQX~X^_<^0)wEr7M|Stokqq>- ze<2OJ-JN-(+o-hBVwp9qFVX#H;&QyPM6qzVXEM?m8?e+(Y-y5om7HdDEtPMpEdLs% zyrt;|SP~_aHr1s!a}vtcu`m9tn-XhxPdhGY2fls|dk5`soV`T+ECDP^yQ?CsCN_N^ z-bdwa#ZjVM5!s$X@*${Wos8D)1Fw#8{~YgjZI<>bhlSh-T9KZ0h;a|-_4gW+k#+=A zVM9d4Jlhoba^_5sotkPF;?$!HCE^Ep=JR_!z@*|ruc^{7*gq$9Z zYp<_xm}`(yzJ$TEm_C(JZPY*WPT?n2Ma2(2oDffg@@ye{&q=$JH4RzkaW1~y`M!|h zMWQe1*LUTNB4q)Vvg24#_tUH1W-bgjU**Q(_Lb_U2L`yM<<)`yeAhonufrSVLd}E* zfDM1+Xw-&yee8DZUtZt&gp>GrG$XE)wSv<>7uF_K(|1(#tkWwFS)On3)7fI9?9OI9 zAb6sqIQ!lBa^8mZz621kl$uJdB1V zcTvbsJ}O7!X$gQm(fbrbhq?8bI$A{>kCFUtl_Hu;wz||IPdp*Q$-i*`rlyL8(#XDbG^r3p%@H za?0yRHZBD#+@>$pdn>o8Dii`?X*2YTu7w`mPE#|qo5z7Hdc^Ow1}jJ_%t4~65@|t> z-IeP3A=MBu=0}7h?`ztds5VHR0{>2>zO7HsG`%ajar@%L-aV$8P$~QA$vnU^L9M4h z)`EVb{T8Z$bbG3`fQ**+I@7X5<^0Mc*vGd4h}MV*3#Cj+>I9NCsPDwtB6}r1gJUNy zj^M8(C?p4;ix$x--G^!OL^2v`>`C8KR7Hy66Vkr2G`O1!w40l9LGBrPpUNYn zGVvzTI0Va+y}c9PrShnSXH_{g8JtSwYF7>GOUrcStkj=af$Z{(MxZ;# z*@@l2p%jHGb6*Lc#}_Jnv+B;x)Q#<{K3twkv$su&*`7dl6?&hMNCT%!E!Pv1)q(&G z#Wivlibb=(C_UY}Vmc zfx1i(oqvBBk%>=b;gVW+uI0=JTL_If=JRX~i=l)E!=uDmg3gnUDVX*hTt!HzM}l|% zl9==2z{QVvUi$C0G3-q}CThhwTG}X~D&6s#;n)bWITqX<0~3*@MjOK>=egOeZ04WcXjQCK2?xI8V9or~iQ#BJ zGz62lGq8T}KKzB^R}hXU<)}MbxtF6SgYxe#@cP}jCrk|GZ%&OREEOgx2)Cu1(jB+A z^Jx(_KNldMa;e7I_P5@9t6M&0_x4&S_LqnvbQc~7Y#ZCGzVeK#iEuGb`ct;Vm5t)&ALkc;QZO}+U-$hpUqj_S!?a5X<9=oX{fQwJ@A zLTK38^s!UkutY=lAl@zerCUx4y6d4oNjFzMqGHnG5bzW6k4pr#9$RO5lyLFf73+G$ zyc$UKSo`?q6i<4esOe7wGZnBs$D5%Qg)tLInn>aWBFaA z=a9f?XUe{$#pbQaHE#v+Jwa2Z@zd)So93i3T;B4+doMShF^LkvF(Hb5R#1FKQh!XK z=bP2Ol;=J?fHcu!oPoiBen7@|>5~pp$TU}F4dAHJr-{!P%BNDa&9VL~XH_C{gs6{a zyHkZEDZo!HH^UTnqmME7|9}}lzWwM$yC4B>t=QPA9Qsm~tT4B9aEtA(b01}#MSwLS zUU4RoCEKFFXalrhyZSyHLxXR$Jdob;@;p16UzJ!J^pnqUJD&i!k}z9kM3rWVJyURw zs#f>O8dd1VnTR(zq|xu_B{F2MNmJbgWIr9)T}NltVKKK@SyF^onbUfhdOqpK?hp<$ z0m4;@m)3!Rq(a(W;>cGiMQsw?)+Z&mpm*zsj5G0G9;v4QTqPdadnMt=%4={Bvilu; z)Sy+NSZEg5N>=uoGad+LKhDP0*a?|x5@{|BcaZp*V#q&Q&cA7Qcf;tB)K+SP#p~sq zsJFh!_O)_?j|Q*0IZ11?|5DCxJfLy(=-a%LU}`y9KV-bGZwU?ZqC6=<-goKx63!Os z_x#DuQ|>Fvd=8nWo|L@|?{|&frDbI|q959k_&Tj0mdc0ag-3X*yN0)D&MhQ&I)f0U zl%y91$4Tw%H$GW{)l+aZ{hw$TMD@#O1_4qEUSqiP0j;hvVALSJKKIN?-a*fvxFknm z$$Nb3hkMx5Jh9sunCNY5&8K*q)OeFteuuhxk4CxD)P{(Hn0LD~<@u>yJ`bR2*6u>g^a3wtU4a=+r5eR=}TnH+$!G)BdN^7v(~cQ>&Ct zPh=)fKZBdQ6}JF!K2O~%Qdv97ZM74pNd9ivI)Ui@ zI@>K(szW52o>YZT8fP1WH*5l;mB7EWIaCnsPw@&^1I(8MW_L7XSXu)G8LWvbv87z~ zD&0;%Ok7myIIlmo7CO?UK>Cmecsp2dRD7O*Tu7UcHg>Ubsl@;u7R#-qu2Sia;!G>U z?Q~J>nd8*c7ScxSsQq}tVLhegcJIWfDdP32NNhCX50x3#P7B{sK;823;u-t>QN4V3 zwN3$qknL99IKZ(@Z3HlVzbvEbwff}H+q><<|hjq8(A zaJOygzAs zxi0b=(j*_60V5VFh@cxwy^$o%d-!05+U^24nt%Sv03O?ugfz|verM__^>y#EFn6)e zbOACzIx=mxXI=K<@p* z>AA`PybV;VS&~766Hz&`7DJL#MiG*0f92fM2B6J!YD#}|{v|bidgCjp$J(fgH#|q; zUg-V05)AKExdgj<2Ot@o_7&Pn7nrKUfT#8>dUOiB=?{h8n%G$!Pl(*LjI3iIUSrgV zn$oZVvx@DY-)HX?hdkY z?8U2JP&cO8xF9pQ(&m%orbYNG%>EC|v-IPFMi*?rHV?JgKJg8`$wXUVCLWP#I$H-p zr&QV#F9e}<3%+6BnVEQD_HGw+z91m36hFVH#U@bY?xBGay!(*7sO$*eL;z5k)*gbY zil+o4@VT7|2OSD9mHqK3jaV^DGJ8V<$1@uXM{+eMS-Hq!ZH}VULki=NXSYGV zmdM}QyomfMcZ~(z0Pe>09=}-O6|W^iJo~idG<%IJ-%?2x35+3w%i#1k`Aa?h%7eTM zkp52a`eEJCh^2xNi>Me`zk8%PekD$4eW7!96H>2Y&8la>kmty!>YH}U&NX@;d3Enn z1J&zlNmbq0#Ek>`uY{(B&j9R%Y9s}(j@rNFiTAMCSTRH?N*j2}#T)78iGW}r;>m9t zOGavLrs6sN@$ON^tqBg-FsrQaE06w8rXI7iAcfgc)$~!l^_!~7sye9mY@`MGPyuTl ziOMwRFd+DM|72}$ZDE+SNN>l}f{=<|8-x&=PxkbjOGAf1#m}i!|M83O0i@>JQ=cMH zO?c}cmKU29WiywCo-cnzkjnIyUmz4u&->=r5JvXunYqPu6Oo#=69sRUt1*l(_2!jHItGpy5ooz`{4wG7jc0A{B9&tNpU&oMw?k?Z`yJWZ{Hl4?j_}^p zml92L=hV1}kJBM7=<7EDjgA#$3&67`U?Ct zd^_BXm-b6IG-`0Q81qF`N}F#OL?KyDb-~7lEv!n+>?DqkMJ3iY?XxfwJHG_a-n}oI zv)Vwu;GXuj$Anz4|ECgrb+7-C)x>8)rLjeh$F7UUeu0rrWieSu$qI^*j@P_t^6XKR znqyg+`>RIp@{XiaUb>@_KlnaRYSR4knYR7PRqcYJC2w}K#|F?X-8ZJ)J=j}b^9CUR z(k~&<04Q}(qBtW%V3wj{ zv$-AbQ&0j}_)O#X(*(pn?QuPb?XlnyCwUn=$Gj_e-T+uBbiBle?e=@cEV`i&X z1Qz5Hm2~j@G9?*wKFRmas9awjeDoGHfs9j_J;^`6^q0KBil^jTaP_Q4r zy+uiDKlO3ZiY2)nV->!;ubO+W?Bnr0l=0ZAGTE zB;&6te4h@f)VK@2OrMYzw$Di%l%K)8yGi)eJ@vHPz~`qw%`&((5>upGQlvpt;&RTm zQZ950QJPFX9kruV3O>CUF`-H5f5b}QuB)zzKLjDgUeW_9GNdgVvV?CbF}92Np`) zjTrSJZxOzwi;E-o-ItVYmiC?NG)1IUKIsZh-WQah^6L=!lS=jGrj(3m3*L1t_xRL^ zNd!+B{SQFOeaq)v>eFr_);1}&)R%@LzwSO}Z+_uaB-5j-ln#WvN||5>6jFH6*uTHJ!+H1d*0*0wLWl zlC3$GCI_9{`L!#qu6G^Jp%g)UjoABYFrSV>BUH5A3d{FT#U$D^xqWt|R1t*J5iFc_bn2|JL2cPJm0MAy3%pkzSJo-zw>b8 zD2>bP`kVvZJs}s8M&RAwY`0iKKKRCY(=qsiNEUD<^t5MjRhsdP>dmCsQ3o%bTeJOB12=+gP7ecSPBh2dYN-SW=ajs^JS#sNH8U_P;`#{56ny=IScQXp&Ik^8|1u z7jGUReM-l!+*6j&Kl8*ZoQ0>ZOT(|-pU;;A@vd1+OMT+2u;2&n74C|s4vb5{anwo|7`z=_6}(Wv|EjU`C;%pT)*3K18m6#_vA)VQLyqRiStZ*^Jw& z*@((r){UNqVw{fOejJV~woR9dKS6U+|$Rv|8xJi;O2jg#;h^VX8axO1ifDyd^qZe&lZWL4kb3 zxteJ2yE_|eDU;-+GhtweS*gy;n{jQPiRU%ie{I7{{MvJIjd5VG|I58k_LJ|G%mPb6 zNyYb1qefDHQ!a$Q+H+0_coY<3Y~ye8A$PP2URUtwACcw%=g>w>Z0im+~wM-i4+S`jNMW>eDPS2G5ZDC4ax@6pspV>oy=&vNSfWd z%xV9zA_hVb!RP|tI%;YpNx7d%8Cqj@&m`MJ8SZGOJ8Nb zPAMI9;YhoBVRj>XljCyQHY~Hs6b4YP`j}_$@lvTH2Qa)nFr70=#T~-Ir?;oSg#!wC zytF%n!YihW^s>0pk$}Cbvd9|eyZ%ntl%O?{2JoTmXIeK`G`weeuuD)^nr$*A8ShV46#+~DWJLg%YHFB&_emRjr+W5*Gm=wcz3xJI5FSPDLVLKnaZBk^<28y_L z$GrX^)UtK#l+;D7X4knehHAO}Q@&#EDf4}^m!+1$X@3%naeqU!nf zZdw{blw&C;Ubda!6uxW*I;;N2PeGB7t>4z)70#}CS2gy15${hNIk^|AF1Va&WHCaf zkXSh8mM)U0OfJ?pVt73|xN%a46r*H0 zS?4hsCv#Q5NAVlHgPi&cHA0a=`$Z)Xv+WEJJ=t{cU)nW5!eI9i!BCUK+0&PjMA1Al^Iz+4}FusYY zeX$f{*5!k-rXqFFly&P>uTQMrF_*F?Sq&ak!zLz~ui#_lF~;S>;dA-5QKt_2M@)y$ zE|*uudzT<7MHTjJQjlQ@k6kSg1s8k_;j=3AA+o!r>WCC-#&Xo$%O;+|?tPPr+MKEfz3>vm2F3Dd z`HMQv62pZwEI`yxJG7jXOxx+LNg%QQh`lx3I7`=>$>4lO6WPpFsPMO&u-kvtqJ_VC z!I7x7wf=J9AgX|q48K|XZ|yfyj4eJ@awY{1(fpvjnXhO`^v|QSC{~A=jI~^-jvwo4aYFxdPZ1sXQF~2zTBJB!M=(R~ZFaG$f)1=3 z_gC`dcB6o=wUhrx1`CsAdXYU*K0n zt4rnoqNe;y2>;gvkWI$quQr7il0ux92NyVN$+23SgVYxkD zRgpu45xB{EtY`k!gv89;x$ze474b05$V(#c z?8MY)U|Vjohwn^rcF!wR^2`1AA=<%s4B{FxM6_M9n6;dC^{;Df@y!KK`Ff^$Nq7$H z`_*vC*2eWsDD;g_S@##ZFbO7Rj~QpY6FQEo2?4p2v1W1FJ+~QCh0OO%)!O7`f{U_* zgY%46EBWGRV}#tP_qx?p>C|)~hVjeEd-9$|`2QRI@vr~X7I-JVdsGFxU(8k`pz#%x z%AZBNmwPb^w%H7UwKYa&aEpz2c(dp3>OqLLHNl{wK2+;D;pAp$I$O2|d?*R)JE^Aq zu{uj&(wE79cXB_(tWm)8-p1vp9zyMVvU^=ZMf9}Rx2Ei>w@rn-EXk=!b~(0+N^exb zXH%lmW`f@Kdp>_}D!jqEWv-#VtL(6(Hcun3#2sUEnGCI`=PQ=WnMrfhQd>~1OioDNWN zAPM{%zwz(eF5TvZGBVn|q1tZRAcfOJL3^xMY>c zy@t@Zfeoba1W$IHR{7`K_QjkLj$I3Twmxc$iE~|GJ10riLBdG#s_CR~{|`fh;BN>y zjgsFt;U5n|5~`B!fGDHB6(iGqin(90D_0VXB6IwFryq5_|OGPc?`X&xm{3cA8JkEeK*tY*~1hb;>lS z0hM42D$=4P^Y`45_g#9My#Bc5jnRlrhEM)CCm`_Z@)qj?p!&W2in%Od9Lm>8Ql?eZ zJKzz`+%4;#=HEl9tt$2f2u}9c{*UIG@6v5kzPYCWAU*-f{S}t8kTG?#A-&-_Z4|0uvGSru)eyFFzrDuf9HOy7ULXr!s%rx8{ z1V~LUPU7gwjq&fo|8`#Om+UHwW<(HC3wmbj=7glcfllvP z)H8~#;o6UXJaP2Xl2gwW$?bA{(7kFbyZfMtOHY*b`f5{rb+a5)oEtQCsJ@O=W74prIzVk{XUp!;!=+Pk5p=$gzOQ(10m4_YviI+{5mPo04 z$UY5hljh%u4fkp?awuoF6#Lu^f?3zoUM*H zF$oyIRZVcp&e?zP4{w@dY`}8ertk&Cd^GnfA;i|p&Ku>vNef}uFTb3_ ztn5`|{hS?7hEdE@!kZm)_p9zoYiv8Eo0jV&&pn>$S2tOip6)M*I8Rnm7efYghYokN zKuklOK5VUvo1m-Pq9|@hQ9tlp3w8qEpN>ZM zy{wg81ypc((zB|CawjfK_3t9D@EbtxgF?l_vZ}QG%tEpBDx+brQ5=ZWjl5SM?L~iG z_NCGrwZ}5CGVI*&j-)NHGCIz(Z^YAB>A`;}2@en0-;VH@%Yb+BAg?>!>!AiY=4&6I z0rAPw753k6Drn$&d~5`YS)NksN-Wl3z7pyy@7xuh-|nSg|M1Jf;D4lN73-=}Uu&OK z{pnJ5eZ1^%>NWBt+g(-xF@{AdJ{M6MQ6l~l;L=oiUXFFXzXp_r{yfWzW8;_Vq#v__ zoRzU4+y3wIrWVBeEOz4_W@5=l1lqiSV1Y@~30xFCx!hs#{u-g_Lx`Xr$&vAXPJUtT zH|zPweaMWY?eJw5x3M%k03^26MdJS#Dwms`^ofyFfwHK{j~Mo0(UTYr&n$0z`gaQy z@%5M3i0}FkFdSy; zXx8}eRjp5i#C5D{*kaI{m6(!~dtkT%Po{4eFfSr1BH;J>X!!midoFjohqT|>+p~kb zB82Ks0WSVwr4b6xosdNDJh%DgFBeua?LA1wTa`%^rLI@0R_K$9{XhOaFrH z=E-AS8bH;E>-K)ES;jx-1^cG++t$m;CX0I2(^sc^c@pLQA#ZS-f#*$ocaq7ZUMQ5M zijclu)0-Bgg)fz^8FH(7`2R~m`@gL}+8(~R*)WqOtBnykttPhT+{-VcLwYTxY+?Yw zEmj$UV4txp=xqPhC%=}ip2~i^iZ^F1AVkR;`+IwVF-ay;|AfE(Yl8pJJNd_l^F0zj z8?gO$n|^SPkXgmnY|^_MaHr>8z4*|Dw4V1)OSA#!rvAQgn~f07*ziOdz`%rx61CfS z65sD=0dz8xpIx5R*SGHb{14BLe?OZ4h((#L@ZjY-=l*XuP*UmacaE^JbH0u%e|TK@ zOX~ea;?cItC(nx=7d#zV^x&SAExSs?C3a4Zf-ugn7f+mwjrBF`n76j(;##`bqqY3F zHl9*8=>h^L3iCOZ-yj268h-S8#dsKDNOF8GdqS3c<=FkGM}MBVd`zsQjVe#Zrsx3c zSu%AJ0!nV4P_`+7Zil9*k#k_30wxR^m45*p7k}8#9o` zPYynRwGU%_vpDgNt?=fR2mixii+Wy6nvneyent~X`O*7LC);ZqI+}(R6OXgmhg-?nSqbW z+a2&5wRKLg%&?yvvNK;;<`Q$N5uK`~bX;We)+&k6(CW&pVaMVBpO1vqU=NPKo9()3 z;ZAcL>EsV8yBd(Lu8^e@s{&Q7VP)Dbzy{={cBuY z+fwXV?KCVyKRm!!Sz(5N7^wbAP834Dyqv!PuzUW_U6#-fIv}9|2m4s2)xi-6@d^BK ziP`_+ywxX43D2NHn@r-NPZ4P3%OPS!l@I_uL-2K`^vxYhnA6yKHl`iPj&CVyC3nm! zNUIQ?XHwKsq)Ze+$ph%wZzQvVNv+VKvMfnR-iI(80nGfnFaMj1a6i0= zLt6a-9>f>}foqNIFxvRsP286J6Sc^ES#*~x&q_mz|%pAHknI5`7ISMQt z+7TY4{MEK4hiohA3~7;}^FDj(!$Znn@7n+Q5eYrGNpOL}@@a=gNv+gImj4OUObWqb zoovH#FT*3qhKajgTFZ#*Zye?QzB)3T71ft>NCZlUw#^H@sJM*)70!K%Zcv2&< zBvfQ1_3*-&fmwUOI@HfP)TjHaL2&G@g539TP^ljrtMK#XXVB6Mkqr^btd&9``82mv zgVnYbMD~}SP9|RoWyhZzN~N)oGt9lYdhm2Tc#DByG6)Jx;%F=7b^iYANai8)D*rD; z7Ya-#BAa?aXyomX-|JX~H>9z{DeLoz2v%V^T1PGDoyGotZ&QHT3C{`}G`TGQ8sY%H zmjVrz*2o7P=zb+ISRgkdYmvmFa4_+tYQ_i-;~VKsf!+(z>DQdP_FjL9INL|YTH(SK zyjp%CLe|f0e+xtz!hOhkTh7F~Gl=N{j*=&M?g4iwvuT6I+%aYD%#lp{Berx|NQwM| zDVBO3bTGlPxnk1nFuQh4#-Vc*GuV*Pi8Ex@HUsJSq6Fj*HRs)%a$pO2!23C9NbcAd zxz!EeHz5S4#$5h{qK_agk0e+D@2U84PJHpp5?CNyVQuM*e~+BS*TC}g-^=o#8cnhh z!w;jx363@M0ODht5V4XUBY=;~AL=3aazP#J5T?Sdw>?}X0SK@JfCVj^J6f|`GwbBf zBWX?fW4*o6b#taq^k#l9ZXUu86I@i?6U;+5l1_anLti}~ik(~eQ(prJ>L{Ka{{$8` znXHALnDoS{kFFMLA>3PhT4zC-&h>$s8n2%{xpw2o99qGn#K@z;0R}oQUl;f%y4<)9 z`3SgdRgvuhw|~B4r!Hh1aLO>Q|F;b=qt10U=|}?ns~x25MR;R!;GRZ0-eU)(2o-%l zzJ_2q+uCHytD>tr)*V-g0d|Yt3q?G%XRU>`v)m&fvSDUfm_>8eLuv=`6MK%Rt?>$qHxle8_&0@lzRv`dcmJokY9+21mnEPxgNF~mr!yM!-C_1gO8fF zpi{3}SMKrHZJXyCvj8yU-qsa%Z#(Aj=(63Kmd6RpQ_ib(4(}m3y8zqG{wG+m$-0=a z((j<~vZBnKx{hNY9AGXuT#+p6VFWZ-x{G{wf?htza{t& z%@+;s>a4=%EkGKE75z76))9RHWp3StsBZYWJH#b+Ynb_S*RtHeuR?!P%VOo~Ak~_o*^Lg+ef{*L zrpiA?%7>m*ll%BV%SFr%+rTI9Y%U>2vrYwF0sOMm%pY^mhyZ)1U4F&sw4Y#h=q&*K&1ja9Kt*d z_%O^N7JZFLs?njJEPEFsX>%|ASaE(d8VU?@ z9mgl9<$qst4y?{>v7u;e!B#?Bpdft9ZyY(+z-VODS+xJ(cT^~}s?qYm@>Hv)5 z5fC)#om;>3e7~%v0qXH&+SX^Jx#EY)?2wl`IRP>ZXcqV0*%Xp{zKOg=_Q+(M)UTi($0hgCNVJ$mWW3D6j3QV1#7~K-m{S>m_M_ zt$Sawi)MYLptW4n)O--|N}4#eYo?FNBX6Judr9lzH%Q0aSM|$oWH*m2rqDG$WB4PA z6Do!jnwzDsEtfZYW2D@}A!J+%Fl>?E_&EeLGYuyX#FwNGJfPAyxmEYfb8?F|7s%n5 zhhRGT>z3`eh%mA$1$CzBx=GRW=b+a0+JkemRNykixmD*HeHSI101m=50P82~ItApl zcuX-0>%94eFNbICv;&_syEb_zF6WoczTAP&SZ)*sSrTwsBie&PD?g?frzqR042oz{ z$iW#`)BrC04o+yy?r6Xha@j7tscMI^+5yhe(Jg7#aoj9{(OlnfFb*m`_twcU*X9bL zpJ+Il=C=ojWPKduiF7$lfW+zW$bBd!oU-*GE4;1H4^`g-H!!GTq%;DiWJ@8lt^)Ah z3XBf1e)h36oJd2Dkk7Fn*_t%03X50BKl_HL;12)-|70RbBY1H+g)t`XkR6HnD_V@C z&9Y3DnXsRTCOYqqDr1$!d6GF~%~ApxPBffza~RbykkSW^s2X)9)^ksVEGaiXut;{- zu-}^1*Gb4286uz2EPcIC+{q5PW;N64bi+>@e}mG6Paqi@0mrxZvvz0JK)|LFWLzt~ zzm-loT>6MJ2MP4#gOY~dS&1|SP=|w!zc%6EwjJ5h1Stm@sA$_-utIvEthRF^M4!%p z(xExqQbl7W$P`8dEMycOJdO(X)#ewKyL79YgyV1r-g{- zd%O<+y?$-0QGQEGab{u~JHeAoZC0=ilGImh{{CSfDDyrr8MXI;9ulG7AE&Hg6GGU1 z8`1jw2hpRrC}KwYS4-Z8d`o_Olqt|EpI}RwXHnSWbiEz+cgR#u9f!Sr0Cciis@XuE zj-HyWNSds!sA~STul|iD6-@Xsej`*H2n8uaxbuBQrx$74QYWkEJt@j8^{yObT)bQj zXt`c|gXciZ65duDrijA#)j7Cu>v~g&YU0UTo1MO;etg(ntD}TwwK=>`#!=Jc3F7`d zxsuP+i0}{)vfSw`5~2R!WTj7;OiFxbh8|=O+XdB#quDequLto;DixC zvS^I^8#=>-*vs7+*qef+wYzO>T2VvfsU7>C6(vPh947-wK%1zAqb-{%Omj^+w6jh(qq%fc0{?D>sW`9q|37nRKflR54@$BYEw3go#E zDu2Iz*}|jrA0{~l-uqpP8t<(H6VWLoQ38UB4>-7 zXvb4po@Nv)NOKvK(5L@oit9TMakAV7*-0zwiXgaCnr1j0@T;J0IE z&UfaUGpFZ!-}kTAf7tGsgx$%J3S##76-WQ-%{7#)(xbFePre=$@=q-;0%GEz2X8xLtt4;`!Zg;X^S zq|*u@j)T{GQVrc3HJ$x7_kKPD;&#l(H{*@AMTso5CWfqSyy>q4EA7SE zI?&DJXYEk#dkxEvele=^1Kw;bmyz7K=cWs%m^-Lpa(*hmo>z<#HJVKc+8H5lXoPX& zVaJi4ggj*OWhN7=t=GBl`zyd%a;eZ6X56r?x9ZPWSe=St2=;}rE_&Ph+XwV3u})R{KD=}SnUJBg9LrkU!K0^ z<*B;^GLn}A+rT#cN|1>(h7))kzlSoxf~s1zTs8)NeVKvOUfBF-j*H$Ie@`X~;iR@M zAV;z{B|RQt3X%*ot_WdZ_zJPB*FYFA!D5|N=x22R(aXb4AlGwbu?5=w1)V`Q! ztehVTCcN=IT$TOBjiDsrOElTVhFiZFIcdkA$7;`zZ*Y^Q3?;{7^J0|DosW=Rk=MFV|YnbXp59j`77@C=_N2OZ)*@wnfGp9$q#3Sy0qRqEWtL}rCuC1Ay1_K2Tw(k z;GIIEUYMwh|07|Lx4BUt6V{CTMTEjo`x@A*QSaRlgF)G~+0Js6VO7 z;{Q7ydfIb45=q*Ah2p4xSQ@%h_Tl!w5eLHVdlBa3+UxD?1&X6U@698tMo>^v%TDXs z6C~+8`N?@$-yDWd&i8O{l<%*21LgekEBkD?V;IWKa@7=0?Z;TtcA{~2fnlqo6Y$=A zTo?@gNcdEiy}lo1PE|$z_q&w(S~Vvf^`D|J8LJzTq|BB=8L#ysh1TSl&PM57$$ zxOlT1s8rCk3m0)?T)!OF(e{w`y~8$lQeFmT7n5!co?KVC_rCCVf16>pFcw+(g`6ev z7NhoOJb+tD#xke;uFoFJ{?y4oeQ_k)+$f#neX6@*W%lB@>-^Ku?7QIn_L})}q>V|G zslfWyPZO&IDC@?tkVE@r9+_nZPI+zM!W{32psx3f+#*CZ-@Jvd%FQztWfq4p#F*>J zqIAtzByJuZ$$ z2+ftWAybE~*d7ZcR~rjpM6nHG4CyZ7xf9D8HEoVx-M2(-iJ9HUiCF^*WdE(bK7%bFd3hluyF z$xmlI7F2WK?LW#rjp;3wzB9Jmlc(0m6-A$(2+&SF*!!v_=8?!obaiT=+4v~;O!6>1 zB>*Xc$(ES{@I^?nD08+^g(UX!k`U9olL7VMD-@i3r2Qbcex*zSm2{4qWbb<;x7ok4 zZFm(X-W7;iL}a{x^raL3_C0=~fFyfL>J38QRp5Y*NcZSrGhb{x;NNaXmo$7lUB(v} z+?71;|0;hxeN(<#dVVGVVytGidWsk!$&Y&qyV0q1e3aPmn3JDZ#PwTYE7JpT*8AoEzHmK#J4JFyjF^p5Ct8KXE2%X(ZLg&+!M;^`pYlq#dMXZVatI#Ff?WdloKU$K04_qBcm2f1$%5iv3Voz4e~Oo&`nm`+vG* zC(l4j_8WK(WH+JK3vcCm=Jrx&VFx^0V!Gkic&B1#zWJ2=dwSvI$a!nI2{9@{>`QR+ zTD4-ILw03lURK9R=E6goSUazJf9;=o|F3EOzjv)QgWXnB{8~LpnGT|ac3_Wg^|2`= zkYu1pdh_L5AWR#zg$BY(r?l7 zZO`_(eAa%(b+s45Kj35f71Ic%)!CHDMQ5IW_PKZvwFO{wQBCXz>}wRl^O8F+B9GR6~M4(?Bm>PvbG zslU|m1AthVk&jyv29UZ=LD+lDi(AJF9)8!q;snJgm;D@r7G+20&tfSX^ZV1%I=8da zRe^Zr5p*qk@@|W?-at!(65eV}ZBtnJwfjX_<#R^ay7@a{T@_+`wn?+c_>C1qD4D0hE%KoZv4Mo^Q@35I{y&fa6&Nxad8JTZXm9|pWQO8*6_GDX; zOi~}j2BNik0V@0kc`8i1T^#r<(<&$~kFL&X28U=*xHGBv%gl?~d(dTjdEYm4eVFn6 zB6~Jp&Hk}1R^bz9>2?8AtbW59(Kh%*=pk&p-mhA3dj!-537uT`M$DSv#LDy>>iBz_ zxKf6j?!7R_4(9!&T2oBg!m`x#R9)xycNyYZqA!=XvJjkyZt2k2ulh)!?u4!T(Lm6? z?66k><&dk}&J9&VKK_3N^1p5rv|fpiIeYKb&Kz~{aTo@B(2L_J;4QmwKM`OL5&;c9 zic)+tzK6z1wWT`_aZ)RYvJYDm#%9;Qvh-m`T8k3zpU$D4vwAr%Z1XCkjrWCH=k34< zTQ)Ov=fA!ee9f#&6PSf<4g><(+qcb(wSl9jN4V;=AI(rn;fGwpyT_y<5v&t z)~9I`a-=Y5Y#ZB9_mz8;&bfW8(qF`6BKNm8ep*g^1;e2Fe;bB@vN(mHb!9QW=)UB@ zr6(@7vVF5$!vSVXtxopQJwNwWg0Si-_|B{cot-_c!L3w2s@DZc7SopYT=w=D~LlZ3O&!zz_x)&o>YAM}@Zc=CxmQ z3{nr|;8vSqI|1tiKHJaC zM>07Uz73pMI&244{9@PtD(sL4XLovd?Jp2=Rb1(oEf%{WQ`%)@bh*qA#wt>7WZV$L zlvtg9tF2*7Pa&`xtQ#A)r|;klC828L(M#c0pCE*Z!o`16z2hU>b5RJNuU-CymBKst z%Z3ntG`V+UwNM9kbGL_qG#2cMW~+HOGZw9i=PtGmZn<|MyV9pq_|6T(J}-q6_dWGa zmG~jDSxUUXRU)dxKElz1`QNjkDyu?;yV8B&Y*(snafF+^;!&HpRAH_KeLIrw7S(|E zRxLkx559LQVI!%@xo_jp3$UvQib6Yfk$}K)*5^arwG{W2(U@2JhIf5Wp@ge_)PhMC}>s?d?PvxQd^;*TfL>cQ(?EtCT9-Y*%%^Rf84G+^K855}}x@PD5{L3YMpV__= zT8pJ3J0rbUPwZ*CV~!>jq*4XIqRvosqRl+am5ry|Vt*OR1$#UB_dyzUlJA$0;)D2o zP9tVdTtn1-uQA$;l%@i*_o)iLz3lJght|b8{*38c|8h8CJ8q@pvXpt}=sAqYRy;xY zf~+8%3~5`4RbvssA4$txGpOACiF0l3#O?W*qvlCYZ;I8{Y|V>XW-8S7+ZEuaUfCE^ zf-f7|MC($FKdamlBIm3OY_|@VXoG(b*)c?2KHoN)zkQ}+Z}ow;B`DFDQPF6?oWhgs+yC;ZbCg8nbZm3=%4%TqCmAb|caHJ%tb z2u?tlYdVRMl0h1BuD#+Ypnh^pH#n%G%4M1fFoKK{e%yJtCjd&!2v{~>i7UT*z)Tcl z%})7cIo!2-&1Pd0VOsr%h1$kS>BvWNcUb>=lH145XW_p78=<@a`-xlSCL5|38`f-x zzcyJxPpy`<8ENfXa?g#v`@?w0JmFoDlX4M%8b0eb>_o#psx%7SaZcC%l(o@+l?yJ) zYPX=%?wm;T#hyd88zhRf((KLa9~dAiK9)8aj?QP|*fl{k2&?-81A3r&(kysp zP`JnJ5rNYEt@&o&#W$_}&vSJ6+_of5C)Qkoi^!eSQeq_6&)BPOo#Q8x{m)ikSGM8Z zkwqopKZ;kCQ~Qc}HYi3c8&hoSTWR7+DPE^R=dz2|-fzAQo4GT!xoJsV@9?10R&6TY zNXd>)U7l-cM$o7)%HM3bzTq|boOJf5E7C8TRz6_R3Pa$bclr3JPeer&)EssCa)%n)Gt+3=yK%=jAMw-!@$w^3{bS$1I~NsIA+-|`H1&kA z@TgR*Z_Ev8$H2-(X5)Z*yCkeNe&wfIo6iDz)JmfN8`GWXR+ZaJkG+i`PPian|FcHb z2^Nof3}i&bTzbvsSGf?ki15CvyyyWixK^jRP~sSyXM=J~>;nym8xT$9qhj&#Q`yE7 z+Rmu-q|NuTAjJP+bGhWYiOu}YbNmMkl_qBHy}MNB@V@YpGKhAm>qDyA%TamGQ}q=Z z9-Ov~89$6<(z3y0NSd`ri`iE8etPx6FXBjNUL?Z3aU{Nnl`l>B?v7uM!asj0vHL4% z?S(6_rE*AC(Z92vUFhhGYA!Iy#F4qwNpp@xt+D2kC2A9yb_&z24yqun*;ka#DF zIhM9zSqcTHk9JZgg2udTL>rpPn?n(t0e-o_)pB!rJCqrMRtkZZtQ0Npz;j&UJx3666K2Qsur`(aO;JPsa z(T$=k2KqqGYJoN7T)1VCBqHqC-*_!H(S1vuNF4Jr(_QQEjx|Na=D;Y@XQ-lZFB>RD zN6Xfjd-}7DM97e_m)}9Fn2*!J?;0p;O^SLb_ZVke<2{x})y+|jZS$-!ObKZ1;zUkx zsBhiygGG1kfXoXIT+R*^r=|nK`VH1p=TF~6S=;o^Uj$u}1l}nsG&Mfl*@gx(wjM-5 zjQ#vj2v#D^k+z{0K{iiCzYX z7lvYYZNdx?+RXuPt&*(yG3zyya}J&~PL{$cRN^I4T{kES8sC*Pw|^Hu2dD-a7bJ^rz zYABbNHt;qhnJQrAD{4>oA;EUZi=WZh2|*%3&+TLVoC zyPIpwX%>Ae`gaoTo%LE;>j&s-H_vWcwGu?J)k&R8ZQr!;<$UR-))S5NGth`t`|b3F zro5NM^^xE4n>nyj#31Jrz9%I{YtLTy044D5Q1!VtvJVcE(gGRv#F|2ZI1R4C zEP@H4`t!>Q*9ZL0=<&Aaev2kjUWIpu1SIXzq(f+kh#0XS^L%#R^-f|Up|t{ z?{}BniUCf)%@6Z%vUQdrwBo+*_HOqfr-|A^ zMN=MK`Qrh!6qMajgem$y1DrGI;Fg>M&}jM4m~MP|u2sU<8>QyN#mwsl-swB6;Qi8c zVBC}aJ&-Pk6@^B@&34T<2-zwK{j=(r(xvk?2T^Gz;>5+f$uf4Y?Up028R|rEobJgr z-wr345y!6-lpX%_=?P52Ld}58jTT&YI7#<)?i;Sz<^4&;6~&nOQ#CN6G};PYXbHNO zhzxrs$(!5&3*CN}>QHa>^85?Sp_!kHD#2Q~e4etpB>DO`O1Oem>=#Ctd8y#!RjHG% zgBLy67fXHVq8P?S@>jP@!R7`x@HzKTQ0?%;iK2JC{iPp?uqg73b8n~T%Ox=6!K)TL ze3sJWXK(vsOzI}vJ%ClrJ0-z+^`^3uEnkJg`c@zk-D)3T@gzM*u~W)i{HmIPYp^H_kv{TicOJ5$I^PEtZ@m?fo*QdrH zboEv6`5H8*?5M1alWOE9y;~aAjdcnPl8(AAzE7ZAA;lgvivf54THbo$g^~)0BU93q z3%>=M9!N(c!tS3q&BV|qorWJ&Ls~NhOrg#8ZQN4rNgfhd;hCRV$A0S_LCqhB=WDAV z>7e7SN<9xj_~*Zw1pe%^}S7FT~0u4<|F(;gvkjP!!6|iJo{b84{|h z#SR|eZlx&H*L@tfzXw0!t(ZgKX0QkIA}P}T^z-cDx8x5s2oS2~)53T?3=w*w`dl7X z_d1~^BbB$|JIJZZqZAz+Eq=4C#GKM@uo=2`+qiLfl|z&DC-^zjZ6N1k|PxNz+;mDTf#quqPiZc%s|Bu(Ld&2s>tt(HvP#DF6?E^p-h+oLPHIEXIbrSXhp%NFN{s5b06S%CL-Bp2^Iy(5KB{~6lXr2@u}Q3l0{Mc5iP zHpx?jRhnQYv}A#W%OY{H5HWlvp6+KqylHMY5kp|RdE9>++G?7Dn0>?ZMOIMYc1~cF zZqUTaT+=PYUW6X|-?>qc!?Oyk0VTzq%FD*}#Ea!GiewE^9 zKMe--a&|=<=Ah3TMt>h(Ur5O*pz8U{i;sY-pXItSFVujzY0OczHUD>})pm|e5~i_R z5NY{>z((q_ZPoQ5C)O@Kh<(In5e$#<7i7m`vT2+Jfj5Q!6;fFF{@7pSiA?-pdQL{S zhyUJ4VE&uDW?DYuge9`qwhysXQFH_uob+>(pIya)^zM*)gwL-jH~%VPH_NR4R`~Xc zhVVI1UiFhCGxcWMx%W#7l_3ld6W&5`{vaOa}n@6 zKK{!iS=z#f`61G-GnS&NjRj^Irtj*xDjc!lSS^(kWGn^!;J1id-(}&7ld8nb>$iyW z{@_hDV&OP>ZEt5vj8I=W@aRhW`0oT4nb=&9mXCX-?qAC<|FUbP2n?K_3HLhWsP3ap|mk#L(=90-v={5g`F=yI895%3PLvWveU}q|Otm5bngmE$s4OjPCl!}k$BlhNm+j*uGRi$S zU^34+>Z;M3Mj%w^sj{vbne?=zqnmcSy!jkLR@w%28<^wvZak7#!^OC5c@^vWE&gF$ z+A3UGV(jlsY)q)Rv}&Go;p-Sny1gOk*?~s98?+MmAYVB(>a;*akn0eH_^22*Z)E(j1NEqt1r5vOplM*4tuWWS6e0hTL6A3lEA36H zliS~$h#PBy5TGF9wK!Jv0E*AI;UXZ8Bu-I7fmraOvHt#6u$a-mPHV9{P^W!zY=nH zpyEO3;DOf5+7phNHQA^{(Lz;bsMnTt)&csp@*o<3c|-%AKJI-_o$~j9#M)H4DJj z>;Fu*Dy4m|*?R9mf?s3M8h)2hpT>j5=4EEBh2!g|WGQ--OD(J+Yk8dL!lDFkV@l|f zHivfb|65IozNVv4S%IAtr-h$lG;ng0pBC%|axS_vxCWVOeBQ=3t({XwQIo-mR&`up z(IjnbsX|$fVTJu&CU=G>auJ9osI8eG)ojnLW31pcbh{%5`;DS-vO)omAJ#8h`6M_X z2+ysVimPSFyqz;3T7XF#+uBwnme9kQ#k>^qpkmy6CCHCg3w5bTci6TtKE*gXh%Q0c z??(m;Pxihn`lC#2zWq5{57Dq=N2Q+gjE#$Qu9}FJ@AKuSqHtskC>7-B}Bx=7E zH!o2y9FcxJky`*?8EJX2IlS0i%mKp+>T`nu#cxc=7AOfF&qWwT{&@e|9Nx92=V9v9 zZ-5IltG3TPKNp&PlIMr`@5dy4Lr=aIdnq?McN2*-lM^Rvl401!vm}vwr5pj|Xd;rhPap zcyPV{-ow<~T>_ylnwE;(q9{#b7owDfKZa4_D_+getFzKO%B z?uY(%Nw~r%i1nnac37#?GX8YwxflsHYAunuT?hw>PKc6GHN!Dl?6x~+*Ufq&0-{8T ze`Uw=AJ}n@i0y{{Cas(FwNbI2TY1u_v|lf`ma0vV(`COsBJk~H*6bzvswD{aDAuwd z&W)ND@(#Qx9Q0q<#YujoW`U91kMcBtn>Fe9Ales4T0YVdQSXY#3(e_A$@EEhY>HSQ zdNN%mmFV7G8E-Qn_omvnxkBui&(auync@lMzyWH4r613F$L$RVQe?Bkb}Oz;Wz`C9 z5!N>X{ju>4nAuNU2Y|gh3TJf=NBP8rI&7L{k+3Xw20_1QXDUhxo7P%~aT1x63 zNTHB1Ba~B==e2WTm3aLf|ZW3n>f%Ia3SX*Cn>8x@#H9 zGX{Q?G*Aai7`L5RQcNflnkE91t;pSf;I8}ZrP+xo9y;r4O3Fhyn0I>L*|F2G8_VYxGaOnAO8=*_`??#cZNt zgij`lZN-;g2t;PyVFBIs7Z?HQvRf4g5*Hd*w!Sc`s3a!hHWiPOkMwSg)ja8^)+XcG zi!lwF)p^$JK!Xb9MDZh;evxf(x0H2!20bh*q=Oh$73+|BkZ-r`R?*R7%xq+OQ_xVl zy+~^^T5%QB51f_2%HX9btM-6W(OYlE*1;{mb!`cjUw!zbJ1YqqkHHQ3;Su1y-nFa zNEZe&aH~B)|0u}ZE*@0oc32*;;0BIje986NYlqhi16X*l7dZG6DC3%1FuNWAoO(rK6*yz*Pur>Gzm4O z>6{XENtw2L1aCimz^mR+G~jN4l%dwX-(CL$-VhQW-MbPVp$7`^F~rzP>grr49?B!o zO>)FwimvkD#z_H2;!Oc8J3JTd%&aB|4LhLH8oX10Ah}stmQ&6VQB4dM0W=JhFSh2H#I#A4d!a9?Dd?sCx-xa}WNeN#*%1LY z78H#>0TEeXKOwDa5)d-byk0}_Y*>NqFhkQOC*lZNi@hKRuT>$XYTNK7$Vx-~G@5(^ z*)@))E+C^_l4}WoO$9Fjdj;#@GJV<6wW~@1j9uo7q6ApE&d_YA<}!|P59GZ%hnjBxF6fi39Td)gKkO%innFv$I-5Yr!pkH(fuo7ua;$MuT(QcKda; zY^Hodc}O8JC+dDlgTZbk0(PZJs^pAgs**-D!!hGD73 zIQDo5vD{dCRU2l3I)B75SN&~!x5e6YXQZ}3)>Cy~D)AXCIAP2KlAc5cy2V*?Vk^Z1 z8O5)+pi*~_5_){f1z~4m51(r(GG{F1$r&Ft{!D6b+XFwVU_Ie#P7;lG_Uue)-ikM_kY$@!H{UCx zSoT~M)#KO0Rv^oQ&fXn#WlZAWO{n|Q+zh(9C+k2JF#fLEEyC8}w=(FT9duLqD*N_J ztR`Xxf#NOC_kfyOm*<`<;zTZQv96{|o3C-5u^=y;Ofo(k<22C*%3j;cjzc-kyk80Q z5!DAxiQLYIz7Tu$rR!%MxTBf(Ikdx)t`2o$3I%{is_jq2@RAmBE1^P=$b@Q#m;npGWhLY>MrukgY;mU)=lg$5;!Tswo9xCv-1 z^4SS2GxuZGMCnCV-^n87voEcCf5;zK5_8U#QV!lY;Sdbw$J8FvjC^J7hXhYIc`Y%* z&P#FP-TmH9?soNXb~22zQLZzT5)cvP?ld7fGb`75zVE}7!@K4>2VsC4hz?ekAHW36 zOEN?2?)a>_Y&-e$Dj5kLV-1(G;jRN&nGaKQ`gLBslU`1ywB)|G#cou%B296?$x4iY zp}`1Qp)54169h8wJcYW?!EZ`W=9tBF2QGRv-aBAm<6mCdmMqd?M{Q_9RgwK z0EZX7USpAW$TTM+X=J<7zv>>arx6+>#hFy+2*%y)yuHE?4YJ4!w=e>XwmUFQnDwe@ zU^Ia!je6?W@<8z}6;%=}rK-s*0yLGz`K@5}P1!OuK} zY68REoTO>tUX;Lrl%vWY9B1lzclLi1 zj@mHE?U|lp# zVz_`gC+&@4401|Cni_kX_HmJXyHjYn?svpYMhR}QIbXLO)c)$gJ zKAeoe*|qX@4`rB;#mD)=%Zv>6cwhf-=fEdqlDYy4j9_sA`M$sKO5_dRScKtAZmoR^C9rLuWV>@s5nQ;#$=a!kT0%j>{iKshs8e6EClFJa?dB5@K@f> z_fQ%llL$^5L~{38u4?^UvZxlN8J^xKMCol_2u^cbQ06Pd5Z5<3Ux}F3J7_=6eKDJN zS=j+1u^Xk-bpm`Y=7tWz>@fg6G@;wQkaYYXP@xqzX)8hw;Y*-6xf}xv9kiUohDuQ) zC9CA?QVPz2grN`@kSgB$dVpsW;YN()i0h~Ww;UR}(w%6kwo??FI;d`1yNa>yN>GkR zu6Z6#rd~KZHGDrb6ijXC?0V>X%FzxNVVAZNxI!>RH097G-(~rf6rclFx&zn8YR3RO zVgi`1@wRckhZC!2>{jh;Ii_4OWkP1y5Qh>)(gqE9qhxvmrD4(5ox4c%srk$@3NDTZ zodfWld_#Z~m2FJ(m;fQR--%>zhrwomLVE;APP(;2P&#L#6VWj?AR%CpL+&07SViDe zR^m)7)(#iz=w}=r;-XNiJ&O_=9`+- z_%WC`${inBUy!YYH?ge7e!jeBl2|s+Pn)am!Mh?t+Ol}jL2>cb;70;&<}kw4wQ-1) z?Iv^;g7u;ToY@6c=3$doBH8K#2$pIKDJUf>H4$Mw8es@IWq9}zKL|n4vE>y=R^dT= zb!p3p)Go}6{mXrHt!rZ4Yzz<*`HRG*_2k$^#X|xkAU>-USVOmRNFg3$a&QQQ-hz5q z*j{lH1F!fpV@+DZiX?>rQ&sgywd>{7HEx_^b1RPS0)?-6#7Tw@60?|qg(y=r>qZpjE-6~e-MLRj(j1RX!Hu7C5W z!D2m*AIjcwPoxVbor72Ebydfgl8OXJKF!BfDX*_6S$mI`<*ofZBYw)2RD6jfn`0Ji z+Z&L9=Yn}WAY#+x#(c3B&>~X(wtPvwZ%y6BSC|(Ga}B?OT19ky=DM z%TD!ns}0LxW%zTG5{4&c>FN1kAurO^jwQ-iKHY6+~AjKRAhE%|cP!N=Ie#}U^Z z_X&;mrP*`T(YwCnp?QekD zK~8SHvvj?#T{c7b>|OHj%@}|ohp?)&w0-#zLS@_oh5Q>Y6PH+O=7!H)o?7vN$N5=V znHKXgRoAbUdO(u86RdkN0L%&(o%m*Y!c*nvr*c4KD9b=&D0bfdyc)A)QhTAeC>)aI z=NF;)%%LmIe)vd=A^fqEfuYmH#xM>6rh1WYyaugGW_cUaElEvIicrQKtZy&x*lelg zT$d7FY_>6I@CMz>2`9yxua8hv9UV5k$IsU4y1~`&MCmGXtX+pBS)02By4@Doq(Ioy z!c}yx6+DOkto5A0Nz+-k(`O)K^@U?{tp>$T1@()28XO~Z`7FT*3uUquS z%nCZgP17Q3Xg2vEw~pNWy6 zIe=*zAmmytJU-CHtxWDfA=0H?UEZg1=AIw60ynORv_hPNrq4zJ+5$IkIfdf8x~`S^ z8agtE_d&G_CC0{wot$p?#HWEf*R8q8iRM{rdfUcaxb@NAgynaQ_tQL_+6Fswo$+ai zZ40wgF%7_wW=zqKr2v0210oSPX_KENqM^rzuKr_wc-taOIj12qK=_(lpyH&_;g|uL zhHN6Pf0v|NP6Jr+o2*PAUfG`s?@Bd7kPf!`t-28#*?!r6!rD#!^KT06A(C~Nk-N0> z0|OD}Sgp&o@S~+&ug%vpufK7$m(rDb7~A6}D*~}P^P@IN z-~ecIP}KjQqQZ^ygKckQ?kj5oPKF&DP8P{jyMM_1;LQ^>w-+~gD+Ke5GP^x1#Bc#6 zOeRX;ndX|&!=KK)#Q<&L`L@!)xIemV#q^+*Rfv0zzoAg4p14|=dOJbAci`pC==q!^ zFh=3L^-cJeP|%RJNixyBK+eg{I`%2v7DKe_5kgFOuv>JX(z`aHCh-wxb6?S~adRgh zoKaxJl)us7TXaOATdiw4K9g4|UAIPV8Q4^aHQ@V!0jr`(7o!vaj^ zPE@BLhkw2?w2m&NNg@<*JNQKy6hW$`6u8#{$Q35v%Uefs8rAQ1U{g z5==MjKGb|^4s(uwt5*6roOMIt%u8oW3Gb5YF4R1cbx$Ub)u6k8`%*8_1`D(W{;>y| zLW|CX+M5RvIepSEss6YmjTK=S{LVZ#cI{NC?FD zfgyzL2+PAxV@LAb<}s^8t(9jUvHSbfN}`ea(m5Nm+HT5g+3G`Ve&0!1L7pSU2-hf& zf4p{=m{)q^;L&ZXvjLPg9hm1CksDek^l>&yj{t2H{JYSc2+JN~)h(YH6^vc8z%pyD z1X0aBct0W|{qGWGo;z>TODnyh@7+tPr74^>BiA~fR3E_b&UE456~)jth&OZBcV*76R>JYNgbRWnQhnkp`QE#+21%1>$EeJnC`fc5=lhtT z@DOQi)wsezi`x56x4I8PI`i_mW)=S_OsFX(TqFTWiHlZ<3Fr`22e~EM5@2c6sTkzX z$=!M^JBLK+)_(;FEkgYOEy!iz@;V+wSrqeLpE< z5C8JJ-@TLe#pj=WEz%6=)9c&gl4gp)zeu+7o)btjL$J`~>Zu#q5eE<>F9F*m?GsK+ zI`9iz*f=GvNnJzX+uwJQr(X13@a3G@S-x@L-KbRePUN-m53llv26k?79rT`q|Gq3` zeBJBVun4HcvIjL1rL7gsX-@0jPDMxQu7kll)XRs;L|VkqLXT>#N#KEH4LtpxC3=<$3{$sgJXL+`@Kl(MXe$Ou5IkSK!{6(hV)D_gJ{`$e?^cWI z2GXBi-eK|td& zx?}n!SH<#H>Hk`LHvBjLpTnS{g!^Hh2M}9mLhfc^$=guR;~VILslxSI;DyY2y9Tzk zG{|f#O+N0$1S=HgdvaxJNR`uJ&w)2m^9(@uC%EkRa_RdY381CZ*v|k|XxAzTYf4Ui z2?32y;%c+~aBUQ}lS7-Hcd|R zSOj8kiDnU(;zFFdW7 zw5d|J-_*2-rti<5Y-%TzG&^L(`zQ*@j>DwUj84J6+4#@Aud9pZNb4*r&}#s^m;mt8 zQOG19s7jwq##8zL$t^=qqi}QyZ&hDSA*_`S;`%dk;vVYU1=t|!7%PQ-Zq{ihRa=<8 zP_KWbd0zie6~n)UK1#|{|3wf3xPytvWxev5m>@Rjr-_>qo*G~Be8F&*j;mPv@%112 z8m+7i54lZwJanQK`4nHX`N0v?wLG#O*XurLmcQvBP#l#!@MgB~RL1s)pXmoLyyV23 ze$XC7Dh#Uy3cIBXtyY*<$g*j>iYvcf^KfF)C3FeTTL337Pi;(R8O4txKR)1}@eb~dVQ^aFA0gkTYb4G^rkJrIA zwr>lt5xa%+2oI|@m5YqL8N5I2oxxAm8(!{xnenKA@cPp*$Mlzvhc%PU-*6_a0e>Bq zpAh@}jS>2FGx-@r9HikKRXfr&p86y5+Gx&dN3;Zme+R~e7LI~>mefsRNJ{*9jBN%l zMxP)lUNx=0N8R!F>V$UGZQF{#L`D`GeRz&~p$)qkvg40Xg(%<3`2FY#gP1KE0PyLT z!8}VPZ6qE{wCs!TvEDH`Rne~cTh61&-dnu{@AjT}iFNxyDwqvfwKveHsUkA+`Q939 zbA`n&n5wBK#*J62iD0IuVups~D%6iAK+d|Rnamy5-V=RhXf0Ns8A`Ub0{IBuy{9Jz zW_9L*JqlslATg-6Dh=f08+8C1Bt~Ghxq$4a@s{+&78>V4J|2ySX+dHNwdw`Pz8GGr zm+X${HcDe%;GZD@C1dlsF(CUnKn@v{?4OAJmno!lbzc&r`lEg5udlA|F2hAU_L2&FKf^Sm zb2rB*{&kx@$+M!G(IumL-Q%x-o_lg&Jh^UKpR_arhv_#0a>MAQIPk>GxWY4Z1s5%S z?bG}E(+nzrb?Hw$tY_|`K6eQP5Z?}6+k5Yc9Iz7r&iJ>xTPtjYKJ-E@Y(~Fby*U34%@g)wD4~9>R4aXdIuL|3uI9iAyUZO}a^Wrb z=!xQ>y~5_fZrXApRlpm}%B&JlZI6M+32=sI_|CZeqr{ovOJE=YyQpEcn2AS#wLu)X z<(@K5jM8Ekj~^gB;C5A z3fk!OGZz*MTR942Y|4$Zt)<;gx;|YBb&3h>76b=uPPesINBB1e?VaoY&kX;sd0 J-!5GHe*oGOECv7o literal 0 HcmV?d00001 diff --git a/packages/repl/package.json b/packages/repl/package.json index 3fa0abebe..d019a0719 100644 --- a/packages/repl/package.json +++ b/packages/repl/package.json @@ -36,7 +36,9 @@ "@codemirror/lang-sql": "^6.6.4", "@codemirror/language": "^6.10.2", "@codemirror/view": "^6.28.1", + "@uiw/codemirror-theme-github": "^4.23.0", "@uiw/codemirror-theme-xcode": "^4.22.2", + "@uiw/codemirror-themes": "^4.23.0", "@uiw/react-codemirror": "^4.22.2", "psql-describe": "^0.1.5", "react": "^18.2.0", diff --git a/packages/repl/src-webcomponent/main.tsx b/packages/repl/src-webcomponent/main.tsx index 00070e349..cf2ccba82 100644 --- a/packages/repl/src-webcomponent/main.tsx +++ b/packages/repl/src-webcomponent/main.tsx @@ -1,5 +1,11 @@ import { createRoot } from "react-dom/client"; -import { Repl } from "../src/Repl"; +import { + Repl, + defaultLightThemeInit, + defaultLightTheme, + defaultDarkThemeInit, + defaultDarkTheme, +} from "../src/Repl"; import type { ReplProps, ReplTheme } from "../src/Repl"; import type { PGlite } from "@electric-sql/pglite"; import type { Extension } from "@uiw/react-codemirror"; @@ -9,6 +15,13 @@ import css from "../src/Repl.css?raw"; export type { ReplProps, ReplTheme }; +export { + defaultLightThemeInit, + defaultLightTheme, + defaultDarkThemeInit, + defaultDarkTheme, +}; + export class PGliteREPL extends HTMLElement { #mountPoint: HTMLDivElement; #root: ReturnType; @@ -19,6 +32,7 @@ export class PGliteREPL extends HTMLElement { constructor() { super(); this.#mountPoint = document.createElement("div"); + this.#mountPoint.classList.add("PGliteRepl-root"); const shadowRoot = this.attachShadow({ mode: "open" }); const style = document.createElement("style"); style.textContent = css; @@ -101,7 +115,7 @@ export class PGliteREPL extends HTMLElement { ) : (

PGlite instance not provided
)} - , + ); } } diff --git a/packages/repl/src/Repl.tsx b/packages/repl/src/Repl.tsx index d223a7114..a41136ea5 100644 --- a/packages/repl/src/Repl.tsx +++ b/packages/repl/src/Repl.tsx @@ -4,6 +4,7 @@ import CodeMirror, { type ReactCodeMirrorRef, type Extension, } from "@uiw/react-codemirror"; +import { type CreateThemeOptions } from '@uiw/codemirror-themes'; import { defaultKeymap } from "@codemirror/commands"; import { keymap } from "@codemirror/view"; import { PostgreSQL } from "@codemirror/lang-sql"; @@ -12,7 +13,7 @@ import { makeSqlExt } from "./sqlSupport"; import type { Response } from "./types"; import { runQuery, getSchema } from "./utils"; import { ReplResponse } from "./ReplResponse"; -import { xcodeDark, xcodeLight } from "@uiw/codemirror-theme-xcode"; +import { githubDark, githubDarkInit, githubLight, githubLightInit } from "@uiw/codemirror-theme-github"; import "./Repl.css"; @@ -24,6 +25,13 @@ const baseKeymap = defaultKeymap.filter((key) => key.key !== "Enter"); export type ReplTheme = "light" | "dark" | "auto"; +type ThemeInit = (options?: Partial) => Extension; + +export const defaultLightThemeInit: ThemeInit = githubLightInit; +export const defaultLightTheme = githubLight; +export const defaultDarkThemeInit: ThemeInit = githubDarkInit; +export const defaultDarkTheme = githubDark; + export interface ReplProps { pg: PGlite; border?: boolean; @@ -37,8 +45,8 @@ export interface ReplProps { export function Repl({ pg, border = false, - lightTheme = xcodeLight, - darkTheme = xcodeDark, + lightTheme = defaultLightTheme, + darkTheme = defaultDarkTheme, theme = "auto", showTime = false, disableUpdateSchema = false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44955bb4e..643d13d27 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,11 +13,21 @@ importers: .: {} + docs: + dependencies: + '@uiw/codemirror-theme-github': + specifier: ^4.23.0 + version: 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1) + devDependencies: + vitepress: + specifier: ^1.3.1 + version: 1.3.1(@algolia/client-search@4.24.0)(search-insights@2.15.0) + packages/benchmark: dependencies: wa-sqlite: specifier: github:rhashimoto/wa-sqlite - version: github.com/rhashimoto/wa-sqlite/f1ab3d5d795fb4156e0b8e20ce2f58c05dfee74a + version: github.com/rhashimoto/wa-sqlite/f5092b5bce7b7edb6371ca53ec8b9ebf332d82c2 devDependencies: '@types/better-sqlite3': specifier: ^7.6.9 @@ -106,9 +116,15 @@ importers: '@codemirror/view': specifier: ^6.28.1 version: 6.28.1 + '@uiw/codemirror-theme-github': + specifier: ^4.23.0 + version: 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1) '@uiw/codemirror-theme-xcode': specifier: ^4.22.2 version: 4.22.2(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1) + '@uiw/codemirror-themes': + specifier: ^4.23.0 + version: 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1) '@uiw/react-codemirror': specifier: ^4.22.2 version: 4.22.2(@babel/runtime@7.24.0)(@codemirror/autocomplete@6.16.3)(@codemirror/language@6.10.2)(@codemirror/lint@6.8.1)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.28.1)(codemirror@6.0.1)(react-dom@18.3.1)(react@18.3.1) @@ -167,6 +183,156 @@ importers: packages: + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.15.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.15.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.15.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + search-insights: 2.15.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + dev: true + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + dev: true + + /@algolia/cache-browser-local-storage@4.24.0: + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + dependencies: + '@algolia/cache-common': 4.24.0 + dev: true + + /@algolia/cache-common@4.24.0: + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + dev: true + + /@algolia/cache-in-memory@4.24.0: + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + dependencies: + '@algolia/cache-common': 4.24.0 + dev: true + + /@algolia/client-account@4.24.0: + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + + /@algolia/client-analytics@4.24.0: + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + + /@algolia/client-common@4.24.0: + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} + dependencies: + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + + /@algolia/client-personalization@4.24.0: + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + + /@algolia/client-search@4.24.0: + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + + /@algolia/logger-common@4.24.0: + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + dev: true + + /@algolia/logger-console@4.24.0: + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + dependencies: + '@algolia/logger-common': 4.24.0 + dev: true + + /@algolia/recommend@4.24.0: + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + + /@algolia/requester-browser-xhr@4.24.0: + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} + dependencies: + '@algolia/requester-common': 4.24.0 + dev: true + + /@algolia/requester-common@4.24.0: + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} + dev: true + + /@algolia/requester-node-http@4.24.0: + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} + dependencies: + '@algolia/requester-common': 4.24.0 + dev: true + + /@algolia/transporter@4.24.0: + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + dependencies: + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + dev: true + /@ampproject/remapping@2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -489,6 +655,49 @@ packages: w3c-keyname: 2.2.8 dev: false + /@docsearch/css@3.6.1: + resolution: {integrity: sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==} + dev: true + + /@docsearch/js@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.15.0): + resolution: {integrity: sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==} + dependencies: + '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.15.0) + preact: 10.23.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.15.0): + resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.15.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@docsearch/css': 3.6.1 + algoliasearch: 4.24.0 + search-insights: 2.15.0 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + /@embedded-postgres/darwin-arm64@15.5.1-beta.11: resolution: {integrity: sha512-5m96qe7TFR/wzL05fyl1TRKfm+I73gIdDea+vXh60MQzUUfX9FXSiR8id6TI4aRhomUrd/l8hLTq8E2ymTCIFw==} engines: {node: '>=16'} @@ -1574,6 +1783,18 @@ packages: - '@types/node' dev: true + /@shikijs/core@1.11.1: + resolution: {integrity: sha512-Qsn8h15SWgv5TDRoDmiHNzdQO2BxDe86Yq6vIHf5T0cCvmfmccJKIzHtep8bQO9HMBZYCtCBzaXdd1MnxZBPSg==} + dependencies: + '@types/hast': 3.0.4 + dev: true + + /@shikijs/transformers@1.11.1: + resolution: {integrity: sha512-e6DUvZRylv+V8htF5q3ZuNyPaxJYQnsLyTd2S/K6ePs8t132NJS82LG2vARmtfSFP3I3CcBXfJ73FaCgI9kAMg==} + dependencies: + shiki: 1.11.1 + dev: true + /@sindresorhus/merge-streams@2.3.0: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -1626,6 +1847,27 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.2 + dev: true + + /@types/linkify-it@5.0.0: + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + dev: true + + /@types/markdown-it@14.1.2: + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + dev: true + + /@types/mdurl@2.0.0: + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + dev: true + /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: @@ -1656,6 +1898,14 @@ packages: csstype: 3.1.3 dev: true + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + /@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1)(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1803,6 +2053,16 @@ packages: '@codemirror/view': 6.28.1 dev: false + /@uiw/codemirror-theme-github@4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1): + resolution: {integrity: sha512-1pJ9V7LQXoojfgYXgI4yn8CfaYBm9HS919xC32/rs81Wl1lhYEOhiYRmNcpnJQDu9ZMgO8ebPMgAVU21z/C76g==} + dependencies: + '@uiw/codemirror-themes': 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + dev: false + /@uiw/codemirror-theme-xcode@4.22.2(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1): resolution: {integrity: sha512-pHOeWHMK7lmxGjrwBnvaIsFppMaKjDbZ6fgWCItWUFI+JeO4/Orrn+q0r1tRbsbRAMPaVuxl+SUZUhPGuo8GCw==} dependencies: @@ -1825,6 +2085,18 @@ packages: '@codemirror/view': 6.28.1 dev: false + /@uiw/codemirror-themes@4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1): + resolution: {integrity: sha512-9fiji9xooZyBQozR1i6iTr56YP7j/Dr/VgsNWbqf5Szv+g+4WM1iZuiDGwNXmFMWX8gbkDzp6ASE21VCPSofWw==} + peerDependencies: + '@codemirror/language': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + dependencies: + '@codemirror/language': 6.10.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.1 + dev: false + /@uiw/react-codemirror@4.22.2(@babel/runtime@7.24.0)(@codemirror/autocomplete@6.16.3)(@codemirror/language@6.10.2)(@codemirror/lint@6.8.1)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.28.1)(codemirror@6.0.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-okCSl+WJG63gRx8Fdz7v0C6RakBQnbb3pHhuzIgDB+fwhipgFodSnu2n9oOsQesJ5YQ7mSOcKMgX0JEsu4nnfQ==} peerDependencies: @@ -1894,6 +2166,17 @@ packages: - supports-color dev: true + /@vitejs/plugin-vue@5.1.0(vite@5.3.4)(vue@3.4.34): + resolution: {integrity: sha512-QMRxARyrdiwi1mj3AW4fLByoHTavreXq0itdEW696EihXglf1MB3D4C2gBvE0jMPH29ZjC3iK8aIaUMLf4EOGA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.3.4 + vue: 3.4.34 + dev: true + /@volar/language-core@1.11.1: resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} dependencies: @@ -1923,6 +2206,16 @@ packages: source-map-js: 1.2.0 dev: true + /@vue/compiler-core@3.4.34: + resolution: {integrity: sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==} + dependencies: + '@babel/parser': 7.24.7 + '@vue/shared': 3.4.34 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + /@vue/compiler-dom@3.4.29: resolution: {integrity: sha512-A6+iZ2fKIEGnfPJejdB7b1FlJzgiD+Y/sxxKwJWg1EbJu6ZPgzaPQQ51ESGNv0CP6jm6Z7/pO6Ia8Ze6IKrX7w==} dependencies: @@ -1930,6 +2223,58 @@ packages: '@vue/shared': 3.4.29 dev: true + /@vue/compiler-dom@3.4.34: + resolution: {integrity: sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==} + dependencies: + '@vue/compiler-core': 3.4.34 + '@vue/shared': 3.4.34 + dev: true + + /@vue/compiler-sfc@3.4.34: + resolution: {integrity: sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==} + dependencies: + '@babel/parser': 7.24.7 + '@vue/compiler-core': 3.4.34 + '@vue/compiler-dom': 3.4.34 + '@vue/compiler-ssr': 3.4.34 + '@vue/shared': 3.4.34 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.40 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-ssr@3.4.34: + resolution: {integrity: sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==} + dependencies: + '@vue/compiler-dom': 3.4.34 + '@vue/shared': 3.4.34 + dev: true + + /@vue/devtools-api@7.3.7: + resolution: {integrity: sha512-kvjQ6nmsqTp7SrmpwI2G0MgbC4ys0bPsgQirHXJM8y1m7siQ5RnWQUHJVfyUrHNguCySW1cevAdIw87zrPTl9g==} + dependencies: + '@vue/devtools-kit': 7.3.7 + dev: true + + /@vue/devtools-kit@7.3.7: + resolution: {integrity: sha512-ktHhhjI4CoUrwdSUF5b/MFfjrtAtK8r4vhOkFyRN5Yp9kdXTwsRBYcwarHuP+wFPKf4/KM7DVBj2ELO8SBwdsw==} + dependencies: + '@vue/devtools-shared': 7.3.7 + birpc: 0.2.17 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + dev: true + + /@vue/devtools-shared@7.3.7: + resolution: {integrity: sha512-M9EU1/bWi5GNS/+IZrAhwGOVZmUTN4MH22Hvh35nUZZg9AZP2R2OhfCb+MG4EtAsrUEYlu3R43/SIj3G7EZYtQ==} + dependencies: + rfdc: 1.4.1 + dev: true + /@vue/language-core@1.8.27(typescript@5.3.3): resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} peerDependencies: @@ -1950,10 +2295,121 @@ packages: vue-template-compiler: 2.7.16 dev: true + /@vue/reactivity@3.4.34: + resolution: {integrity: sha512-ua+Lo+wBRlBEX9TtgPOShE2JwIO7p6BTZ7t1KZVPoaBRfqbC7N3c8Mpzicx173fXxx5VXeU6ykiHo7WgLzJQDA==} + dependencies: + '@vue/shared': 3.4.34 + dev: true + + /@vue/runtime-core@3.4.34: + resolution: {integrity: sha512-PXhkiRPwcPGJ1BnyBZFI96GfInCVskd0HPNIAZn7i3YOmLbtbTZpB7/kDTwC1W7IqdGPkTVC63IS7J2nZs4Ebg==} + dependencies: + '@vue/reactivity': 3.4.34 + '@vue/shared': 3.4.34 + dev: true + + /@vue/runtime-dom@3.4.34: + resolution: {integrity: sha512-dXqIe+RqFAK2Euak4UsvbIupalrhc67OuQKpD7HJ3W2fv8jlqvI7szfBCsAEcE8o/wyNpkloxB6J8viuF/E3gw==} + dependencies: + '@vue/reactivity': 3.4.34 + '@vue/runtime-core': 3.4.34 + '@vue/shared': 3.4.34 + csstype: 3.1.3 + dev: true + + /@vue/server-renderer@3.4.34(vue@3.4.34): + resolution: {integrity: sha512-GeyEUfMVRZMD/mZcNONEqg7MiU10QQ1DB3O/Qr6+8uXpbwdlmVgQ5Qs1/ZUAFX1X2UUtqMoGrDRbxdWfOJFT7Q==} + peerDependencies: + vue: 3.4.34 + dependencies: + '@vue/compiler-ssr': 3.4.34 + '@vue/shared': 3.4.34 + vue: 3.4.34 + dev: true + /@vue/shared@3.4.29: resolution: {integrity: sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA==} dev: true + /@vue/shared@3.4.34: + resolution: {integrity: sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==} + dev: true + + /@vueuse/core@10.11.0(vue@3.4.34): + resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.0 + '@vueuse/shared': 10.11.0(vue@3.4.34) + vue-demi: 0.14.9(vue@3.4.34) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/integrations@10.11.0(focus-trap@7.5.4)(vue@3.4.34): + resolution: {integrity: sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^4 + drauu: ^0.3 + focus-trap: ^7 + fuse.js: ^6 + idb-keyval: ^6 + jwt-decode: ^3 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^6 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.11.0(vue@3.4.34) + '@vueuse/shared': 10.11.0(vue@3.4.34) + focus-trap: 7.5.4 + vue-demi: 0.14.9(vue@3.4.34) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.11.0: + resolution: {integrity: sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==} + dev: true + + /@vueuse/shared@10.11.0(vue@3.4.34): + resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==} + dependencies: + vue-demi: 0.14.9(vue@3.4.34) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true @@ -2003,6 +2459,26 @@ packages: uri-js: 4.4.1 dev: true + /algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2207,6 +2683,10 @@ packages: file-uri-to-path: 1.0.0 dev: true + /birpc@0.2.17: + resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==} + dev: true + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -2542,6 +3022,13 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.16 + dev: true + /corser@2.0.1: resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} engines: {node: '>= 0.4.0'} @@ -3046,6 +3533,12 @@ packages: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true + /focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: true + /follow-redirects@1.15.5: resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} @@ -3302,6 +3795,10 @@ packages: hasBin: true dev: true + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -3486,6 +3983,11 @@ packages: engines: {node: '>=18'} dev: true + /is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -3663,6 +4165,10 @@ packages: semver: 6.3.1 dev: true + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + /matcher@5.0.0: resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3781,6 +4287,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dev: true + /minisearch@7.1.0: + resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==} + dev: true + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -3789,6 +4299,10 @@ packages: yallist: 4.0.0 dev: true + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: true @@ -4025,6 +4539,10 @@ packages: engines: {node: '>=12'} dev: true + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + /pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} requiresBuild: true @@ -4172,6 +4690,15 @@ packages: source-map-js: 1.2.0 dev: true + /postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + dev: true + /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -4194,6 +4721,10 @@ packages: xtend: 4.0.2 dev: true + /preact@10.23.0: + resolution: {integrity: sha512-Pox0jeY4q6PGkFB5AsXni+zHxxx/sAYFIFZzukW4nIpoJLRziRX0xC4WjZENlkSrDQvqVgZcaZzZ/NL8/A+H/w==} + dev: true + /prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -4364,6 +4895,10 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + dev: true + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -4450,6 +4985,10 @@ packages: loose-envify: 1.4.0 dev: false + /search-insights@2.15.0: + resolution: {integrity: sha512-ch2sPCUDD4sbPQdknVl9ALSi9H7VyoeVbsxznYz6QV55jJ8CI3EtwpO1i84keN4+hF5IeHWIeGvc08530JkVXQ==} + dev: true + /secure-compare@3.0.1: resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} dev: true @@ -4514,6 +5053,13 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true + /shiki@1.11.1: + resolution: {integrity: sha512-VHD3Q0EBXaaa245jqayBe5zQyMQUdXBFjmGr9MpDaDpAKRMYn7Ff00DM5MLk26UyKjnml3yQ0O2HNX7PtYVNFQ==} + dependencies: + '@shikijs/core': 1.11.1 + '@types/hast': 3.0.4 + dev: true + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -4591,6 +5137,11 @@ packages: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} dev: true + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -4692,6 +5243,13 @@ packages: ts-interface-checker: 0.1.13 dev: true + /superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + dependencies: + copy-anything: 3.0.5 + dev: true + /supertap@3.0.1: resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4728,6 +5286,10 @@ packages: engines: {node: '>= 0.4'} dev: true + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} dependencies: @@ -5053,6 +5615,112 @@ packages: fsevents: 2.3.3 dev: true + /vite@5.3.4: + resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.21.5 + postcss: 8.4.40 + rollup: 4.18.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitepress@1.3.1(@algolia/client-search@4.24.0)(search-insights@2.15.0): + resolution: {integrity: sha512-soZDpg2rRVJNIM/IYMNDPPr+zTHDA5RbLDHAxacRu+Q9iZ2GwSR0QSUlLs+aEZTkG0SOX1dc8RmUYwyuxK8dfQ==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.15.0) + '@shikijs/core': 1.11.1 + '@shikijs/transformers': 1.11.1 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.1.0(vite@5.3.4)(vue@3.4.34) + '@vue/devtools-api': 7.3.7 + '@vue/shared': 3.4.34 + '@vueuse/core': 10.11.0(vue@3.4.34) + '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(vue@3.4.34) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 7.1.0 + shiki: 1.11.1 + vite: 5.3.4 + vue: 3.4.34 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + + /vue-demi@0.14.9(vue@3.4.34): + resolution: {integrity: sha512-dC1TJMODGM8lxhP6wLToncaDPPNB3biVxxRDuNCYpuXwi70ou7NsGd97KVTJ2omepGId429JZt8oaZKeXbqxwg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.34 + dev: true + /vue-template-compiler@2.7.16: resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} dependencies: @@ -5072,6 +5740,21 @@ packages: typescript: 5.3.3 dev: true + /vue@3.4.34: + resolution: {integrity: sha512-VZze05HWlA3ItreQ/ka7Sx7PoD0/3St8FEiSlSTVgb6l4hL+RjtP2/8g5WQBzZgyf8WG2f+g1bXzC7zggLhAJA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.34 + '@vue/compiler-sfc': 3.4.34 + '@vue/runtime-dom': 3.4.34 + '@vue/server-renderer': 3.4.34(vue@3.4.34) + '@vue/shared': 3.4.34 + dev: true + /w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} dev: false @@ -5218,8 +5901,8 @@ packages: commander: 9.5.0 dev: true - github.com/rhashimoto/wa-sqlite/f1ab3d5d795fb4156e0b8e20ce2f58c05dfee74a: - resolution: {tarball: https://codeload.github.com/rhashimoto/wa-sqlite/tar.gz/f1ab3d5d795fb4156e0b8e20ce2f58c05dfee74a} + github.com/rhashimoto/wa-sqlite/f5092b5bce7b7edb6371ca53ec8b9ebf332d82c2: + resolution: {tarball: https://codeload.github.com/rhashimoto/wa-sqlite/tar.gz/f5092b5bce7b7edb6371ca53ec8b9ebf332d82c2} name: wa-sqlite - version: 1.0.0 + version: 1.0.1 dev: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 18ec407ef..59a60bdc2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,3 @@ packages: - 'packages/*' + - 'docs'