diff --git a/.github/workflows/build-docs.yaml b/.github/workflows/build-docs.yaml
new file mode 100644
index 0000000..518da21
--- /dev/null
+++ b/.github/workflows/build-docs.yaml
@@ -0,0 +1,75 @@
+name: Deploy VitePress site to Pages
+
+on:
+ push:
+ branches: [vitepress]
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: pages
+ cancel-in-progress: false
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - uses: pnpm/action-setup@v4
+ with:
+ version: 10
+ run_install: false
+
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: pnpm
+ cache-dependency-path: vitepress/pnpm-lock.yaml
+
+ - name: Setup Pages
+ uses: actions/configure-pages@v5
+
+ - name: Install dependencies
+ run: pnpm -C vitepress install
+
+ - name: Build with VitePress
+ run: pnpm -C vitepress docs:build
+
+ - name: Run preview job on the background
+ run: pnpm -C vitepress docs:preview &
+
+ - name: Wait for the preview job
+ uses: iFaxity/wait-on-action@v1.2.1
+ with:
+ resource: tcp:4173
+
+ - name: Generate Library PDF
+ run: |
+ pnpm -C vitepress docs:print
+ pkill -f docs:preview
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: vitepress/src/.vitepress/dist
+
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ needs: build
+ runs-on: ubuntu-latest
+ name: Deploy
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/build-lib.yaml b/.github/workflows/build-lib.yaml
deleted file mode 100644
index bd4ea92..0000000
--- a/.github/workflows/build-lib.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
-name: Build documentation
-
-on:
- push:
- branches: ["main"]
- workflow_dispatch:
-
-permissions:
- id-token: write
- pages: write
-
-env:
- INSTANCE: "Writerside/biblioteca"
- ARTIFACT: "webHelpBIBLIOTECA2-all.zip"
- DOCKER_VERSION: "242.21870"
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Build docs using Writerside Docker builder
- uses: JetBrains/writerside-github-action@v4
- with:
- instance: ${{ env.INSTANCE }}
- artifact: ${{ env.ARTIFACT }}
- docker-version: ${{ env.DOCKER_VERSION }}
-
- - name: Save artifact with build results
- uses: actions/upload-artifact@v4
- with:
- name: docs
- path: |
- artifacts/${{ env.ARTIFACT }}
- artifacts/report.json
- retention-days: 1
- deploy:
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- needs: build
- runs-on: ubuntu-latest
- steps:
- - name: Download artifacts
- uses: actions/download-artifact@v4
- with:
- name: docs
-
- - name: Unzip artifact
- run: unzip -O UTF-8 -qq '${{ env.ARTIFACT }}' -d dir
-
- - name: Setup Pages
- uses: actions/configure-pages@v4
-
- - name: Package and upload Pages artifact
- uses: actions/upload-pages-artifact@v3
- with:
- path: dir
-
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v4
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d95ec13
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+node_modules
+cache
+temp
+dist
+.idea
+.vscode
+.temp
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
deleted file mode 100644
index a55e7a1..0000000
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/competitive-programming.iml b/.idea/competitive-programming.iml
deleted file mode 100644
index 6102194..0000000
--- a/.idea/competitive-programming.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index ae8bede..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Writerside/biblioteca.tree b/Writerside/biblioteca.tree
deleted file mode 100644
index 11b9030..0000000
--- a/Writerside/biblioteca.tree
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Writerside/c.list b/Writerside/c.list
deleted file mode 100644
index c4c77a2..0000000
--- a/Writerside/c.list
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/Writerside/cfg/buildprofiles.xml b/Writerside/cfg/buildprofiles.xml
deleted file mode 100644
index c7b7355..0000000
--- a/Writerside/cfg/buildprofiles.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- caecomp.png
- icon16.png,icon32.png,icon96.png
- false
- true
- deep-ocean
- vivid
-
-
-
- false
-
-
-
-
diff --git a/Writerside/cfg/glossary.xml b/Writerside/cfg/glossary.xml
deleted file mode 100644
index 22bec6b..0000000
--- a/Writerside/cfg/glossary.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
- Description of what "foo" is.
-
-
\ No newline at end of file
diff --git a/Writerside/images/completion_procedure.png b/Writerside/images/completion_procedure.png
deleted file mode 100644
index 3535a3f..0000000
Binary files a/Writerside/images/completion_procedure.png and /dev/null differ
diff --git a/Writerside/images/completion_procedure_dark.png b/Writerside/images/completion_procedure_dark.png
deleted file mode 100644
index a65beb0..0000000
Binary files a/Writerside/images/completion_procedure_dark.png and /dev/null differ
diff --git a/Writerside/images/convert_table_to_xml.png b/Writerside/images/convert_table_to_xml.png
deleted file mode 100644
index 2518a64..0000000
Binary files a/Writerside/images/convert_table_to_xml.png and /dev/null differ
diff --git a/Writerside/images/convert_table_to_xml_dark.png b/Writerside/images/convert_table_to_xml_dark.png
deleted file mode 100644
index 4716122..0000000
Binary files a/Writerside/images/convert_table_to_xml_dark.png and /dev/null differ
diff --git a/Writerside/images/favicons/icon16.png b/Writerside/images/favicons/icon16.png
deleted file mode 100644
index bfc1353..0000000
Binary files a/Writerside/images/favicons/icon16.png and /dev/null differ
diff --git a/Writerside/images/favicons/icon32.png b/Writerside/images/favicons/icon32.png
deleted file mode 100644
index c693681..0000000
Binary files a/Writerside/images/favicons/icon32.png and /dev/null differ
diff --git a/Writerside/images/favicons/icon96.png b/Writerside/images/favicons/icon96.png
deleted file mode 100644
index f91fb25..0000000
Binary files a/Writerside/images/favicons/icon96.png and /dev/null differ
diff --git a/Writerside/images/new_topic_options.png b/Writerside/images/new_topic_options.png
deleted file mode 100644
index bc6abb6..0000000
Binary files a/Writerside/images/new_topic_options.png and /dev/null differ
diff --git a/Writerside/images/new_topic_options_dark.png b/Writerside/images/new_topic_options_dark.png
deleted file mode 100644
index bf3e48d..0000000
Binary files a/Writerside/images/new_topic_options_dark.png and /dev/null differ
diff --git a/Writerside/snippets.tree b/Writerside/snippets.tree
deleted file mode 100644
index 600d8b8..0000000
--- a/Writerside/snippets.tree
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Writerside/topics/biblioteca.md b/Writerside/topics/biblioteca.md
deleted file mode 100644
index 183e1ab..0000000
--- a/Writerside/topics/biblioteca.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Sobre a Biblioteca
-
-Este é um projeto do CAECOMP - IFCE, com o objetivo distribuir implementações de algoritmos comumente usados em contests ou maratonas de programação, como por exemplo:
-- Algoritmos de grafos;
-- Algoritmos de busca;
-- Estruturas de dados eficientes;
-
-etc.
\ No newline at end of file
diff --git a/Writerside/topics/estruturas/dsu.md b/Writerside/topics/estruturas/dsu.md
deleted file mode 100644
index 5ee4648..0000000
--- a/Writerside/topics/estruturas/dsu.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Disjoint Set Union (Union Find)
-
-```c++
-```
-
-{src="estruturas/DSU.cpp"}
\ No newline at end of file
diff --git a/Writerside/topics/estruturas/estruturas.md b/Writerside/topics/estruturas/estruturas.md
deleted file mode 100644
index 1ff6b73..0000000
--- a/Writerside/topics/estruturas/estruturas.md
+++ /dev/null
@@ -1 +0,0 @@
-# Estruturas
diff --git a/Writerside/topics/estruturas/segtrees.md b/Writerside/topics/estruturas/segtrees.md
deleted file mode 100644
index 257b3dd..0000000
--- a/Writerside/topics/estruturas/segtrees.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Segtrees
-
-## Segtree iterativa
-
-```c++
-```
-
-{src="estruturas/segtree-iterativa.cpp"}
-
-## Segtree Recursiva
-
-```c++
-```
-
-{src="estruturas/segtree-recursiva.cpp"}
-
-## Lazy Segtree (recursiva)
-
-```c++
-```
-
-{src="estruturas/segtree-lazy.cpp"}
\ No newline at end of file
diff --git a/Writerside/topics/grafos/ciclos.md b/Writerside/topics/grafos/ciclos.md
deleted file mode 100644
index dacdc1b..0000000
--- a/Writerside/topics/grafos/ciclos.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Detecção de ciclo
-
-## Grafo não direcionado, usando [Union Find](dsu.md)
-
-```c++
-```
-
-{src="grafos/ciclo-nao-direcionado.cpp"}
-
-## Grafo direcionado, usando DFS
-
-```c++
-```
-
-{ src="grafos/ciclo-direcionado.cpp"}
\ No newline at end of file
diff --git a/Writerside/topics/grafos/grafos.md b/Writerside/topics/grafos/grafos.md
deleted file mode 100644
index cd4cc1d..0000000
--- a/Writerside/topics/grafos/grafos.md
+++ /dev/null
@@ -1 +0,0 @@
-# Grafos
diff --git a/Writerside/topics/grafos/menor-caminho.md b/Writerside/topics/grafos/menor-caminho.md
deleted file mode 100644
index 581c564..0000000
--- a/Writerside/topics/grafos/menor-caminho.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Menor caminho
-
-## Floyd-Warshall
-
-
-\mathcal{O}(n^3)
-\Theta(n^2)
-
-```c++
-```
-{ src="grafos/floyd-warshall.cpp" }
-
-## Bellman-Ford
-
-```c++
-```
-
-{ src="grafos/bellman-ford.cpp"}
-
-## Dijkstra (para grafos esparsos)
-
-```c++
-```
-
-{src="grafos/djikstra-esparso.cpp"}
\ No newline at end of file
diff --git a/Writerside/topics/programacao-dinamica/mochila.md b/Writerside/topics/programacao-dinamica/mochila.md
deleted file mode 100644
index d5166d0..0000000
--- a/Writerside/topics/programacao-dinamica/mochila.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Problema da mochila
-
-## Mochila binária
-
-```c++
-```
-{ src="dp/binary-knapsack.cpp" }
\ No newline at end of file
diff --git a/Writerside/topics/programacao-dinamica/programacao-dinamica.md b/Writerside/topics/programacao-dinamica/programacao-dinamica.md
deleted file mode 100644
index 0b3fecd..0000000
--- a/Writerside/topics/programacao-dinamica/programacao-dinamica.md
+++ /dev/null
@@ -1 +0,0 @@
-# Programação Dinâmica
\ No newline at end of file
diff --git a/Writerside/topics/snippets.md b/Writerside/topics/snippets.md
deleted file mode 100644
index 422f9d8..0000000
--- a/Writerside/topics/snippets.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# snippets
-
-
-
-
-
-
- Complexidade |
- Temporal |
- Espacial |
-
-
- |
- |
- |
-
-
-
\ No newline at end of file
diff --git a/Writerside/v.list b/Writerside/v.list
deleted file mode 100644
index 2d12cb3..0000000
--- a/Writerside/v.list
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg
deleted file mode 100644
index 1e185cc..0000000
--- a/Writerside/writerside.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vitepress/package.json b/vitepress/package.json
new file mode 100644
index 0000000..88500d3
--- /dev/null
+++ b/vitepress/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "competitive-programming-handbook",
+ "version": "1.0.0",
+ "description": "Um projeto do CAECOMP - IFCE para ajudar participantes de contests de programação competitiva.",
+ "main": "index.js",
+ "scripts": {
+ "docs:dev": "vitepress dev src",
+ "docs:build": "vitepress build src",
+ "docs:preview": "vitepress preview src",
+ "docs:print": "tsx src/createPdf.ts"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/CAECOMP/handbook-competitive-programming.git"
+ },
+ "author": "CAECOMP IFCE",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/CAECOMP/handbook-competitive-programming/issues"
+ },
+ "homepage": "https://github.com/CAECOMP/handbook-competitive-programming#readme",
+ "devDependencies": {
+ "@types/node": "^22.13.14",
+ "@web-printer/core": "^0.4.0",
+ "@web-printer/vitepress": "^0.4.0",
+ "markdown-it-mathjax3": "^4.3.2",
+ "tsx": "^4.19.3",
+ "typescript": "^5.8.2",
+ "vitepress": "^1.6.3"
+ },
+ "dependencies": {
+ "vitepress-plugin-tabs": "^0.5.0"
+ }
+}
diff --git a/vitepress/pnpm-lock.yaml b/vitepress/pnpm-lock.yaml
new file mode 100644
index 0000000..ce4943d
--- /dev/null
+++ b/vitepress/pnpm-lock.yaml
@@ -0,0 +1,2338 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ vitepress-plugin-tabs:
+ specifier: ^0.5.0
+ version: 0.5.0(vitepress@1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
+ devDependencies:
+ '@types/node':
+ specifier: ^22.13.14
+ version: 22.13.14
+ '@web-printer/core':
+ specifier: ^0.4.0
+ version: 0.4.0
+ '@web-printer/vitepress':
+ specifier: ^0.4.0
+ version: 0.4.0
+ markdown-it-mathjax3:
+ specifier: ^4.3.2
+ version: 4.3.2
+ tsx:
+ specifier: ^4.19.3
+ version: 4.19.3
+ typescript:
+ specifier: ^5.8.2
+ version: 5.8.2
+ vitepress:
+ specifier: ^1.6.3
+ version: 1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2)
+
+packages:
+
+ '@algolia/autocomplete-core@1.17.7':
+ resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==}
+
+ '@algolia/autocomplete-plugin-algolia-insights@1.17.7':
+ resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==}
+ peerDependencies:
+ search-insights: '>= 1 < 3'
+
+ '@algolia/autocomplete-preset-algolia@1.17.7':
+ resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+
+ '@algolia/autocomplete-shared@1.17.7':
+ resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+
+ '@algolia/client-abtesting@5.23.0':
+ resolution: {integrity: sha512-AyZ+9CUgWXwaaJ2lSwOJSy+/w0MFBPFqLrjWYs/HEpYMzBuFfGNZ7gEM9a7h4j7jY8hSBARBl8qdvInmj5vOEQ==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-analytics@5.23.0':
+ resolution: {integrity: sha512-oeKCPwLBnTEPF/RWr0aaJnrfRDfFRLT5O7KV0OF1NmpEXvmzLmN7RwnwDKsNtPUHNfpJ6esP9xzkPEtJabrZ2w==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-common@5.23.0':
+ resolution: {integrity: sha512-9jacdC44vXLSaYKNLkFpbU1J4BbBPi/N7uoPhcGO//8ubRuVzigH6+RfK5FbudmQlqFt0J5DGUCVeTlHtgyUeg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-insights@5.23.0':
+ resolution: {integrity: sha512-/Gw5UitweRsnyb24Td4XhjXmsx8PxFzCI0oW6FZZvyr4kjzB9ECP2IjO+PdDq1A2fzDl/LXQ+u8ROudoVnXnQg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-personalization@5.23.0':
+ resolution: {integrity: sha512-ivrEZBoXfDatpqpifgHauydxHEe4udNqJ0gy7adR2KODeQ+39MQeaT10I24mu+eylIuiQKJRqORgEdLZycq2qQ==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-query-suggestions@5.23.0':
+ resolution: {integrity: sha512-DjSgJWqTcsnlXEKqDsU7Y2vB/W/VYLlr6UfkzJkMuKB554Ia7IJr4keP2AlHVjjbBG62IDpdh5OkEs/+fbWsOA==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-search@5.23.0':
+ resolution: {integrity: sha512-XAYWUYUhEG4OIdo/N7H/OFFRD9fokfv3bBTky+4Y4/q07bxhnrGSUvcrU6JQ2jJTQyg6kv0ke1EIfiTO/Xxb+g==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/ingestion@1.23.0':
+ resolution: {integrity: sha512-ULbykzzhhLVofCDU1m/CqSzTyKmjaxA/z1d6o6hgUuR6X7/dll9/G0lu0e4vmWIOItklWWrhU2V8sXD0YGBIHg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/monitoring@1.23.0':
+ resolution: {integrity: sha512-oB3wG7CgQJQr+uoijV7bWBphiSHkvGX43At8RGgkDyc7Aeabcp9ik5HgLC1YDgbHVOlQI+tce5HIbDCifzQCIg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/recommend@5.23.0':
+ resolution: {integrity: sha512-4PWvCV6VGhnCMAbv2zfQUAlc3ofMs6ovqKlC/xcp7tWaucYd//piHg9CcCM4S0p9OZznEGQMRYPt2uqbk6V9vg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/requester-browser-xhr@5.23.0':
+ resolution: {integrity: sha512-bacOsX41pnsupNB0k0Ny+1JDchQxIsZIcp69GKDBT0NgTHG8OayEO141eFalNmGil+GXPY0NUPRpx+5s4RdhGA==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/requester-fetch@5.23.0':
+ resolution: {integrity: sha512-tVNFREexJWDrvc23evmRgAcb2KLZuVilOIB/rVnQCl0GDbqIWJuQ1lG22HKqvCEQFthHkgVFGLYE74wQ96768g==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/requester-node-http@5.23.0':
+ resolution: {integrity: sha512-XXHbq2heOZc9EFCc4z+uyHS9YRBygZbYQVsWjWZWx8hdAz+tkBX/jLHM9Xg+3zO0/v8JN6pcZzqYEVsdrLeNLg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.27.0':
+ resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/types@7.27.0':
+ resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
+ engines: {node: '>=6.9.0'}
+
+ '@cantoo/pdf-lib@1.21.1':
+ resolution: {integrity: sha512-ggPKdexF9Aa2hpDLL57dmydcEG28JWYXVFij2Tc8WwlQVhcYw7Tr/uvNf8NcPNcjyt2yeuWfV+/nCtSf5HCSlA==}
+
+ '@docsearch/css@3.8.2':
+ resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==}
+
+ '@docsearch/js@3.8.2':
+ resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==}
+
+ '@docsearch/react@3.8.2':
+ resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==}
+ 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
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.25.1':
+ resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.25.1':
+ resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.1':
+ resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.1':
+ resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.25.1':
+ resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.1':
+ resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.25.1':
+ resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.1':
+ resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.25.1':
+ resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.1':
+ resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.1':
+ resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.1':
+ resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.1':
+ resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.1':
+ resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.1':
+ resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.1':
+ resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.1':
+ resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.1':
+ resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.1':
+ resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.1':
+ resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.1':
+ resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.25.1':
+ resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.25.1':
+ resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.1':
+ resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.1':
+ resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@iconify-json/simple-icons@1.2.29':
+ resolution: {integrity: sha512-KYrxmxtRz6iOAulRiUsIBMUuXek+H+Evwf8UvYPIkbQ+KDoOqTegHx3q/w3GDDVC0qJYB+D3hXPMZcpm78qIuA==}
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@pdf-lib/standard-fonts@1.0.0':
+ resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==}
+
+ '@pdf-lib/upng@1.0.1':
+ resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==}
+
+ '@rollup/rollup-android-arm-eabi@4.37.0':
+ resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.37.0':
+ resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.37.0':
+ resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.37.0':
+ resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.37.0':
+ resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.37.0':
+ resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.37.0':
+ resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.37.0':
+ resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.37.0':
+ resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.37.0':
+ resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.37.0':
+ resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
+ resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.37.0':
+ resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.37.0':
+ resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.37.0':
+ resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.37.0':
+ resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.37.0':
+ resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.37.0':
+ resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.37.0':
+ resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.37.0':
+ resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@shikijs/core@2.5.0':
+ resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==}
+
+ '@shikijs/engine-javascript@2.5.0':
+ resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==}
+
+ '@shikijs/engine-oniguruma@2.5.0':
+ resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==}
+
+ '@shikijs/langs@2.5.0':
+ resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==}
+
+ '@shikijs/themes@2.5.0':
+ resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==}
+
+ '@shikijs/transformers@2.5.0':
+ resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==}
+
+ '@shikijs/types@2.5.0':
+ resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==}
+
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+ '@types/linkify-it@5.0.0':
+ resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+ '@types/markdown-it@14.1.2':
+ resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdurl@2.0.0':
+ resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
+ '@types/node@22.13.14':
+ resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@types/web-bluetooth@0.0.21':
+ resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
+
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@vitejs/plugin-vue@5.2.3':
+ resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0
+ vue: ^3.2.25
+
+ '@vue/compiler-core@3.5.13':
+ resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
+
+ '@vue/compiler-dom@3.5.13':
+ resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
+
+ '@vue/compiler-sfc@3.5.13':
+ resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
+
+ '@vue/compiler-ssr@3.5.13':
+ resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
+
+ '@vue/devtools-api@7.7.2':
+ resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==}
+
+ '@vue/devtools-kit@7.7.2':
+ resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==}
+
+ '@vue/devtools-shared@7.7.2':
+ resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==}
+
+ '@vue/reactivity@3.5.13':
+ resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
+
+ '@vue/runtime-core@3.5.13':
+ resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
+
+ '@vue/runtime-dom@3.5.13':
+ resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
+
+ '@vue/server-renderer@3.5.13':
+ resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
+ peerDependencies:
+ vue: 3.5.13
+
+ '@vue/shared@3.5.13':
+ resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+
+ '@vueuse/core@12.8.2':
+ resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
+
+ '@vueuse/integrations@12.8.2':
+ resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==}
+ peerDependencies:
+ async-validator: ^4
+ axios: ^1
+ change-case: ^5
+ drauu: ^0.4
+ focus-trap: ^7
+ fuse.js: ^7
+ idb-keyval: ^6
+ jwt-decode: ^4
+ nprogress: ^0.2
+ qrcode: ^1.5
+ sortablejs: ^1
+ universal-cookie: ^7
+ 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
+
+ '@vueuse/metadata@12.8.2':
+ resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
+
+ '@vueuse/shared@12.8.2':
+ resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
+
+ '@web-printer/core@0.4.0':
+ resolution: {integrity: sha512-7f4f8revjNs9IN7nIIK066i4wJ5k81fKrcFrR04PS+h4TdfR71dsDh+WCttk8PYSk7mor9Gv148J8Os87t8ZDA==}
+
+ '@web-printer/vitepress@0.4.0':
+ resolution: {integrity: sha512-+J1k1G+lVEkCr+6et6PxGvccbTXKgNUmsxEKWY1sm284fJu7kHNGwg/Qh38lh49ZzdlOdqK7iv8gNynPhsnSlQ==}
+
+ algoliasearch@5.23.0:
+ resolution: {integrity: sha512-7TCj+hLx6fZKppLL74lYGDEltSBNSu4vqRwgqeIKZ3VQ0q3aOrdEN0f1sDWcvU1b+psn2wnl7aHt9hWtYatUUA==}
+ engines: {node: '>= 14.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+ engines: {node: '>=0.10.0'}
+
+ birpc@0.2.19:
+ resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ cheerio-select@1.6.0:
+ resolution: {integrity: sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==}
+
+ cheerio@1.0.0-rc.10:
+ resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==}
+ engines: {node: '>= 6'}
+
+ code-point-at@1.1.0:
+ resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
+ engines: {node: '>=0.10.0'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ commander@6.2.1:
+ resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+ engines: {node: '>= 6'}
+
+ commander@9.2.0:
+ resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==}
+ engines: {node: ^12.20.0 || >=14}
+
+ copy-anything@3.0.5:
+ resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
+ engines: {node: '>=12.13'}
+
+ css-select@4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+ dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@3.3.0:
+ resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==}
+ engines: {node: '>= 4'}
+
+ domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+
+ domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+
+ emoji-regex-xs@1.0.0:
+ resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
+
+ entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.25.1:
+ resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escape-goat@3.0.0:
+ resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==}
+ engines: {node: '>=10'}
+
+ esm@3.2.25:
+ resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
+ engines: {node: '>=6'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ focus-trap@7.6.4:
+ resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-tsconfig@4.10.0:
+ resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
+
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+ html-entities@2.5.3:
+ resolution: {integrity: sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==}
+
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
+ htmlparser2@5.0.1:
+ resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==}
+
+ htmlparser2@6.1.0:
+ resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
+
+ is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+
+ is-fullwidth-code-point@1.0.0:
+ resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
+ engines: {node: '>=0.10.0'}
+
+ is-what@4.1.16:
+ resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+ engines: {node: '>=12.13'}
+
+ juice@8.1.0:
+ resolution: {integrity: sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
+ mark.js@8.11.1:
+ resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
+
+ markdown-it-mathjax3@4.3.2:
+ resolution: {integrity: sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w==}
+
+ mathjax-full@3.2.2:
+ resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==}
+
+ mdast-util-to-hast@13.2.0:
+ resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+
+ mensch@0.3.4:
+ resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==}
+
+ mhchemparser@4.2.1:
+ resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
+
+ mime@2.6.0:
+ resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+ engines: {node: '>=4.0.0'}
+ hasBin: true
+
+ minisearch@7.1.2:
+ resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==}
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
+ mj-context-menu@0.6.1:
+ resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-html-better-parser@1.4.11:
+ resolution: {integrity: sha512-rXYKBD30q6Iw/Y8o2ueJILB29Z3RrqQQN/U2PDg4Iz2TSZP/KmqdcGp+pl8o5uYZlvIKh+A4UfOK98pKIb3cRw==}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ number-is-nan@1.0.1:
+ resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
+ engines: {node: '>=0.10.0'}
+
+ oniguruma-to-es@3.1.1:
+ resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==}
+
+ pako@1.0.11:
+ resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+
+ parse5-htmlparser2-tree-adapter@6.0.1:
+ resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
+
+ parse5@6.0.1:
+ resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
+
+ perfect-debounce@1.0.0:
+ resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ postcss@8.5.3:
+ resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ preact@10.26.4:
+ resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==}
+
+ property-information@7.0.0:
+ resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
+
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@6.0.1:
+ resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rollup@4.37.0:
+ resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ search-insights@2.17.2:
+ resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==}
+
+ shiki@2.5.0:
+ resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==}
+
+ simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+
+ single-line-log@1.1.2:
+ resolution: {integrity: sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA==}
+
+ slick@1.12.2:
+ resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ speakingurl@14.0.1:
+ resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
+ engines: {node: '>=0.10.0'}
+
+ speech-rule-engine@4.0.7:
+ resolution: {integrity: sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==}
+ hasBin: true
+
+ string-width@1.0.2:
+ resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
+ engines: {node: '>=0.10.0'}
+
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
+ strip-ansi@3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+ engines: {node: '>=0.10.0'}
+
+ superjson@2.2.2:
+ resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
+ engines: {node: '>=16'}
+
+ tabbable@6.2.0:
+ resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tsx@4.19.3:
+ resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ typescript@5.8.2:
+ resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
+ unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
+ unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+
+ valid-data-url@3.0.1:
+ resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==}
+ engines: {node: '>=10'}
+
+ vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
+ vite@5.4.15:
+ resolution: {integrity: sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==}
+ 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: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vitepress-plugin-tabs@0.5.0:
+ resolution: {integrity: sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==}
+ peerDependencies:
+ vitepress: ^1.0.0-rc.27
+ vue: ^3.3.8
+
+ vitepress@1.6.3:
+ resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==}
+ hasBin: true
+ peerDependencies:
+ markdown-it-mathjax3: ^4
+ postcss: ^8
+ peerDependenciesMeta:
+ markdown-it-mathjax3:
+ optional: true
+ postcss:
+ optional: true
+
+ vue@3.5.13:
+ resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ web-resource-inliner@6.0.1:
+ resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==}
+ engines: {node: '>=10.0.0'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ wicked-good-xpath@1.3.0:
+ resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==}
+
+ xmldom-sre@0.1.31:
+ resolution: {integrity: sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==}
+ engines: {node: '>=0.1'}
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2)':
+ dependencies:
+ '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2)
+ '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+ - search-insights
+
+ '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2)':
+ dependencies:
+ '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)
+ search-insights: 2.17.2
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+
+ '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)':
+ dependencies:
+ '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)
+ '@algolia/client-search': 5.23.0
+ algoliasearch: 5.23.0
+
+ '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)':
+ dependencies:
+ '@algolia/client-search': 5.23.0
+ algoliasearch: 5.23.0
+
+ '@algolia/client-abtesting@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/client-analytics@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/client-common@5.23.0': {}
+
+ '@algolia/client-insights@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/client-personalization@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/client-query-suggestions@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/client-search@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/ingestion@1.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/monitoring@1.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/recommend@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ '@algolia/requester-browser-xhr@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+
+ '@algolia/requester-fetch@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+
+ '@algolia/requester-node-http@5.23.0':
+ dependencies:
+ '@algolia/client-common': 5.23.0
+
+ '@babel/helper-string-parser@7.25.9': {}
+
+ '@babel/helper-validator-identifier@7.25.9': {}
+
+ '@babel/parser@7.27.0':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@babel/types@7.27.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
+ '@cantoo/pdf-lib@1.21.1':
+ dependencies:
+ '@pdf-lib/standard-fonts': 1.0.0
+ '@pdf-lib/upng': 1.0.1
+ color: 4.2.3
+ node-html-better-parser: 1.4.11
+ pako: 1.0.11
+
+ '@docsearch/css@3.8.2': {}
+
+ '@docsearch/js@3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2)':
+ dependencies:
+ '@docsearch/react': 3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2)
+ preact: 10.26.4
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - '@types/react'
+ - react
+ - react-dom
+ - search-insights
+
+ '@docsearch/react@3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2)':
+ dependencies:
+ '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2)
+ '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)
+ '@docsearch/css': 3.8.2
+ algoliasearch: 5.23.0
+ optionalDependencies:
+ search-insights: 2.17.2
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.25.1':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.25.1':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.25.1':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.1':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.1':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.1':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.1':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.1':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.1':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.1':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.1':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.1':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.1':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.1':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.1':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.1':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.1':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.1':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.1':
+ optional: true
+
+ '@iconify-json/simple-icons@1.2.29':
+ dependencies:
+ '@iconify/types': 2.0.0
+
+ '@iconify/types@2.0.0': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@pdf-lib/standard-fonts@1.0.0':
+ dependencies:
+ pako: 1.0.11
+
+ '@pdf-lib/upng@1.0.1':
+ dependencies:
+ pako: 1.0.11
+
+ '@rollup/rollup-android-arm-eabi@4.37.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.37.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.37.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.37.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.37.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.37.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.37.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.37.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.37.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.37.0':
+ optional: true
+
+ '@shikijs/core@2.5.0':
+ dependencies:
+ '@shikijs/engine-javascript': 2.5.0
+ '@shikijs/engine-oniguruma': 2.5.0
+ '@shikijs/types': 2.5.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/engine-javascript@2.5.0':
+ dependencies:
+ '@shikijs/types': 2.5.0
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 3.1.1
+
+ '@shikijs/engine-oniguruma@2.5.0':
+ dependencies:
+ '@shikijs/types': 2.5.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@2.5.0':
+ dependencies:
+ '@shikijs/types': 2.5.0
+
+ '@shikijs/themes@2.5.0':
+ dependencies:
+ '@shikijs/types': 2.5.0
+
+ '@shikijs/transformers@2.5.0':
+ dependencies:
+ '@shikijs/core': 2.5.0
+ '@shikijs/types': 2.5.0
+
+ '@shikijs/types@2.5.0':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@10.0.2': {}
+
+ '@types/estree@1.0.6': {}
+
+ '@types/hast@3.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/linkify-it@5.0.0': {}
+
+ '@types/markdown-it@14.1.2':
+ dependencies:
+ '@types/linkify-it': 5.0.0
+ '@types/mdurl': 2.0.0
+
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/mdurl@2.0.0': {}
+
+ '@types/node@22.13.14':
+ dependencies:
+ undici-types: 6.20.0
+
+ '@types/unist@3.0.3': {}
+
+ '@types/web-bluetooth@0.0.21': {}
+
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@vitejs/plugin-vue@5.2.3(vite@5.4.15(@types/node@22.13.14))(vue@3.5.13(typescript@5.8.2))':
+ dependencies:
+ vite: 5.4.15(@types/node@22.13.14)
+ vue: 3.5.13(typescript@5.8.2)
+
+ '@vue/compiler-core@3.5.13':
+ dependencies:
+ '@babel/parser': 7.27.0
+ '@vue/shared': 3.5.13
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.13':
+ dependencies:
+ '@vue/compiler-core': 3.5.13
+ '@vue/shared': 3.5.13
+
+ '@vue/compiler-sfc@3.5.13':
+ dependencies:
+ '@babel/parser': 7.27.0
+ '@vue/compiler-core': 3.5.13
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ estree-walker: 2.0.2
+ magic-string: 0.30.17
+ postcss: 8.5.3
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.13':
+ dependencies:
+ '@vue/compiler-dom': 3.5.13
+ '@vue/shared': 3.5.13
+
+ '@vue/devtools-api@7.7.2':
+ dependencies:
+ '@vue/devtools-kit': 7.7.2
+
+ '@vue/devtools-kit@7.7.2':
+ dependencies:
+ '@vue/devtools-shared': 7.7.2
+ birpc: 0.2.19
+ hookable: 5.5.3
+ mitt: 3.0.1
+ perfect-debounce: 1.0.0
+ speakingurl: 14.0.1
+ superjson: 2.2.2
+
+ '@vue/devtools-shared@7.7.2':
+ dependencies:
+ rfdc: 1.4.1
+
+ '@vue/reactivity@3.5.13':
+ dependencies:
+ '@vue/shared': 3.5.13
+
+ '@vue/runtime-core@3.5.13':
+ dependencies:
+ '@vue/reactivity': 3.5.13
+ '@vue/shared': 3.5.13
+
+ '@vue/runtime-dom@3.5.13':
+ dependencies:
+ '@vue/reactivity': 3.5.13
+ '@vue/runtime-core': 3.5.13
+ '@vue/shared': 3.5.13
+ csstype: 3.1.3
+
+ '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ vue: 3.5.13(typescript@5.8.2)
+
+ '@vue/shared@3.5.13': {}
+
+ '@vueuse/core@12.8.2(typescript@5.8.2)':
+ dependencies:
+ '@types/web-bluetooth': 0.0.21
+ '@vueuse/metadata': 12.8.2
+ '@vueuse/shared': 12.8.2(typescript@5.8.2)
+ vue: 3.5.13(typescript@5.8.2)
+ transitivePeerDependencies:
+ - typescript
+
+ '@vueuse/integrations@12.8.2(focus-trap@7.6.4)(typescript@5.8.2)':
+ dependencies:
+ '@vueuse/core': 12.8.2(typescript@5.8.2)
+ '@vueuse/shared': 12.8.2(typescript@5.8.2)
+ vue: 3.5.13(typescript@5.8.2)
+ optionalDependencies:
+ focus-trap: 7.6.4
+ transitivePeerDependencies:
+ - typescript
+
+ '@vueuse/metadata@12.8.2': {}
+
+ '@vueuse/shared@12.8.2(typescript@5.8.2)':
+ dependencies:
+ vue: 3.5.13(typescript@5.8.2)
+ transitivePeerDependencies:
+ - typescript
+
+ '@web-printer/core@0.4.0':
+ dependencies:
+ '@cantoo/pdf-lib': 1.21.1
+ single-line-log: 1.1.2
+
+ '@web-printer/vitepress@0.4.0':
+ dependencies:
+ '@web-printer/core': 0.4.0
+
+ algoliasearch@5.23.0:
+ dependencies:
+ '@algolia/client-abtesting': 5.23.0
+ '@algolia/client-analytics': 5.23.0
+ '@algolia/client-common': 5.23.0
+ '@algolia/client-insights': 5.23.0
+ '@algolia/client-personalization': 5.23.0
+ '@algolia/client-query-suggestions': 5.23.0
+ '@algolia/client-search': 5.23.0
+ '@algolia/ingestion': 1.23.0
+ '@algolia/monitoring': 1.23.0
+ '@algolia/recommend': 5.23.0
+ '@algolia/requester-browser-xhr': 5.23.0
+ '@algolia/requester-fetch': 5.23.0
+ '@algolia/requester-node-http': 5.23.0
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@2.1.1: {}
+
+ birpc@0.2.19: {}
+
+ boolbase@1.0.0: {}
+
+ ccount@2.0.1: {}
+
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ cheerio-select@1.6.0:
+ dependencies:
+ css-select: 4.3.0
+ css-what: 6.1.0
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+
+ cheerio@1.0.0-rc.10:
+ dependencies:
+ cheerio-select: 1.6.0
+ dom-serializer: 1.4.1
+ domhandler: 4.3.1
+ htmlparser2: 6.1.0
+ parse5: 6.0.1
+ parse5-htmlparser2-tree-adapter: 6.0.1
+ tslib: 2.8.1
+
+ code-point-at@1.1.0: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.2
+
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+
+ comma-separated-tokens@2.0.3: {}
+
+ commander@6.2.1: {}
+
+ commander@9.2.0: {}
+
+ copy-anything@3.0.5:
+ dependencies:
+ is-what: 4.1.16
+
+ css-select@4.3.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+
+ css-what@6.1.0: {}
+
+ csstype@3.1.3: {}
+
+ dequal@2.0.3: {}
+
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
+ dom-serializer@1.4.1:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@3.3.0:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domhandler@4.3.1:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@2.8.0:
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+
+ emoji-regex-xs@1.0.0: {}
+
+ entities@2.2.0: {}
+
+ entities@4.5.0: {}
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ esbuild@0.25.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.1
+ '@esbuild/android-arm': 0.25.1
+ '@esbuild/android-arm64': 0.25.1
+ '@esbuild/android-x64': 0.25.1
+ '@esbuild/darwin-arm64': 0.25.1
+ '@esbuild/darwin-x64': 0.25.1
+ '@esbuild/freebsd-arm64': 0.25.1
+ '@esbuild/freebsd-x64': 0.25.1
+ '@esbuild/linux-arm': 0.25.1
+ '@esbuild/linux-arm64': 0.25.1
+ '@esbuild/linux-ia32': 0.25.1
+ '@esbuild/linux-loong64': 0.25.1
+ '@esbuild/linux-mips64el': 0.25.1
+ '@esbuild/linux-ppc64': 0.25.1
+ '@esbuild/linux-riscv64': 0.25.1
+ '@esbuild/linux-s390x': 0.25.1
+ '@esbuild/linux-x64': 0.25.1
+ '@esbuild/netbsd-arm64': 0.25.1
+ '@esbuild/netbsd-x64': 0.25.1
+ '@esbuild/openbsd-arm64': 0.25.1
+ '@esbuild/openbsd-x64': 0.25.1
+ '@esbuild/sunos-x64': 0.25.1
+ '@esbuild/win32-arm64': 0.25.1
+ '@esbuild/win32-ia32': 0.25.1
+ '@esbuild/win32-x64': 0.25.1
+
+ escape-goat@3.0.0: {}
+
+ esm@3.2.25: {}
+
+ estree-walker@2.0.2: {}
+
+ focus-trap@7.6.4:
+ dependencies:
+ tabbable: 6.2.0
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-tsconfig@4.10.0:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ hast-util-to-html@9.0.5:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.0
+ property-information: 7.0.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hookable@5.5.3: {}
+
+ html-entities@2.5.3: {}
+
+ html-void-elements@3.0.0: {}
+
+ htmlparser2@5.0.1:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 3.3.0
+ domutils: 2.8.0
+ entities: 2.2.0
+
+ htmlparser2@6.1.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ entities: 2.2.0
+
+ is-arrayish@0.3.2: {}
+
+ is-fullwidth-code-point@1.0.0:
+ dependencies:
+ number-is-nan: 1.0.1
+
+ is-what@4.1.16: {}
+
+ juice@8.1.0:
+ dependencies:
+ cheerio: 1.0.0-rc.10
+ commander: 6.2.1
+ mensch: 0.3.4
+ slick: 1.12.2
+ web-resource-inliner: 6.0.1
+ transitivePeerDependencies:
+ - encoding
+
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ mark.js@8.11.1: {}
+
+ markdown-it-mathjax3@4.3.2:
+ dependencies:
+ juice: 8.1.0
+ mathjax-full: 3.2.2
+ transitivePeerDependencies:
+ - encoding
+
+ mathjax-full@3.2.2:
+ dependencies:
+ esm: 3.2.25
+ mhchemparser: 4.2.1
+ mj-context-menu: 0.6.1
+ speech-rule-engine: 4.0.7
+
+ mdast-util-to-hast@13.2.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+
+ mensch@0.3.4: {}
+
+ mhchemparser@4.2.1: {}
+
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-symbol@2.0.1: {}
+
+ micromark-util-types@2.0.2: {}
+
+ mime@2.6.0: {}
+
+ minisearch@7.1.2: {}
+
+ mitt@3.0.1: {}
+
+ mj-context-menu@0.6.1: {}
+
+ nanoid@3.3.11: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-html-better-parser@1.4.11:
+ dependencies:
+ html-entities: 2.5.3
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ number-is-nan@1.0.1: {}
+
+ oniguruma-to-es@3.1.1:
+ dependencies:
+ emoji-regex-xs: 1.0.0
+ regex: 6.0.1
+ regex-recursion: 6.0.2
+
+ pako@1.0.11: {}
+
+ parse5-htmlparser2-tree-adapter@6.0.1:
+ dependencies:
+ parse5: 6.0.1
+
+ parse5@6.0.1: {}
+
+ perfect-debounce@1.0.0: {}
+
+ picocolors@1.1.1: {}
+
+ postcss@8.5.3:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ preact@10.26.4: {}
+
+ property-information@7.0.0: {}
+
+ regex-recursion@6.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ regex-utilities@2.3.0: {}
+
+ regex@6.0.1:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ resolve-pkg-maps@1.0.0: {}
+
+ rfdc@1.4.1: {}
+
+ rollup@4.37.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.37.0
+ '@rollup/rollup-android-arm64': 4.37.0
+ '@rollup/rollup-darwin-arm64': 4.37.0
+ '@rollup/rollup-darwin-x64': 4.37.0
+ '@rollup/rollup-freebsd-arm64': 4.37.0
+ '@rollup/rollup-freebsd-x64': 4.37.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.37.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.37.0
+ '@rollup/rollup-linux-arm64-gnu': 4.37.0
+ '@rollup/rollup-linux-arm64-musl': 4.37.0
+ '@rollup/rollup-linux-loongarch64-gnu': 4.37.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.37.0
+ '@rollup/rollup-linux-riscv64-musl': 4.37.0
+ '@rollup/rollup-linux-s390x-gnu': 4.37.0
+ '@rollup/rollup-linux-x64-gnu': 4.37.0
+ '@rollup/rollup-linux-x64-musl': 4.37.0
+ '@rollup/rollup-win32-arm64-msvc': 4.37.0
+ '@rollup/rollup-win32-ia32-msvc': 4.37.0
+ '@rollup/rollup-win32-x64-msvc': 4.37.0
+ fsevents: 2.3.3
+
+ search-insights@2.17.2: {}
+
+ shiki@2.5.0:
+ dependencies:
+ '@shikijs/core': 2.5.0
+ '@shikijs/engine-javascript': 2.5.0
+ '@shikijs/engine-oniguruma': 2.5.0
+ '@shikijs/langs': 2.5.0
+ '@shikijs/themes': 2.5.0
+ '@shikijs/types': 2.5.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ simple-swizzle@0.2.2:
+ dependencies:
+ is-arrayish: 0.3.2
+
+ single-line-log@1.1.2:
+ dependencies:
+ string-width: 1.0.2
+
+ slick@1.12.2: {}
+
+ source-map-js@1.2.1: {}
+
+ space-separated-tokens@2.0.2: {}
+
+ speakingurl@14.0.1: {}
+
+ speech-rule-engine@4.0.7:
+ dependencies:
+ commander: 9.2.0
+ wicked-good-xpath: 1.3.0
+ xmldom-sre: 0.1.31
+
+ string-width@1.0.2:
+ dependencies:
+ code-point-at: 1.1.0
+ is-fullwidth-code-point: 1.0.0
+ strip-ansi: 3.0.1
+
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
+ strip-ansi@3.0.1:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ superjson@2.2.2:
+ dependencies:
+ copy-anything: 3.0.5
+
+ tabbable@6.2.0: {}
+
+ tr46@0.0.3: {}
+
+ trim-lines@3.0.1: {}
+
+ tslib@2.8.1: {}
+
+ tsx@4.19.3:
+ dependencies:
+ esbuild: 0.25.1
+ get-tsconfig: 4.10.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ typescript@5.8.2: {}
+
+ undici-types@6.20.0: {}
+
+ unist-util-is@6.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
+
+ unist-util-visit@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+
+ valid-data-url@3.0.1: {}
+
+ vfile-message@4.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.2
+
+ vite@5.4.15(@types/node@22.13.14):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.3
+ rollup: 4.37.0
+ optionalDependencies:
+ '@types/node': 22.13.14
+ fsevents: 2.3.3
+
+ vitepress-plugin-tabs@0.5.0(vitepress@1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)):
+ dependencies:
+ vitepress: 1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2)
+ vue: 3.5.13(typescript@5.8.2)
+
+ vitepress@1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2):
+ dependencies:
+ '@docsearch/css': 3.8.2
+ '@docsearch/js': 3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2)
+ '@iconify-json/simple-icons': 1.2.29
+ '@shikijs/core': 2.5.0
+ '@shikijs/transformers': 2.5.0
+ '@shikijs/types': 2.5.0
+ '@types/markdown-it': 14.1.2
+ '@vitejs/plugin-vue': 5.2.3(vite@5.4.15(@types/node@22.13.14))(vue@3.5.13(typescript@5.8.2))
+ '@vue/devtools-api': 7.7.2
+ '@vue/shared': 3.5.13
+ '@vueuse/core': 12.8.2(typescript@5.8.2)
+ '@vueuse/integrations': 12.8.2(focus-trap@7.6.4)(typescript@5.8.2)
+ focus-trap: 7.6.4
+ mark.js: 8.11.1
+ minisearch: 7.1.2
+ shiki: 2.5.0
+ vite: 5.4.15(@types/node@22.13.14)
+ vue: 3.5.13(typescript@5.8.2)
+ optionalDependencies:
+ markdown-it-mathjax3: 4.3.2
+ postcss: 8.5.3
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - '@types/node'
+ - '@types/react'
+ - async-validator
+ - axios
+ - change-case
+ - drauu
+ - fuse.js
+ - idb-keyval
+ - jwt-decode
+ - less
+ - lightningcss
+ - nprogress
+ - qrcode
+ - react
+ - react-dom
+ - sass
+ - sass-embedded
+ - search-insights
+ - sortablejs
+ - stylus
+ - sugarss
+ - terser
+ - typescript
+ - universal-cookie
+
+ vue@3.5.13(typescript@5.8.2):
+ dependencies:
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-sfc': 3.5.13
+ '@vue/runtime-dom': 3.5.13
+ '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2))
+ '@vue/shared': 3.5.13
+ optionalDependencies:
+ typescript: 5.8.2
+
+ web-resource-inliner@6.0.1:
+ dependencies:
+ ansi-colors: 4.1.3
+ escape-goat: 3.0.0
+ htmlparser2: 5.0.1
+ mime: 2.6.0
+ node-fetch: 2.7.0
+ valid-data-url: 3.0.1
+ transitivePeerDependencies:
+ - encoding
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ wicked-good-xpath@1.3.0: {}
+
+ xmldom-sre@0.1.31: {}
+
+ zwitch@2.0.4: {}
diff --git a/vitepress/src/.vitepress/config.mts b/vitepress/src/.vitepress/config.mts
new file mode 100644
index 0000000..cb49fe3
--- /dev/null
+++ b/vitepress/src/.vitepress/config.mts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'vitepress'
+import themeConfig from './config/themeConfig'
+import markdown from './config/markdownConfig'
+// https://vitepress.dev/reference/site-config
+export default defineConfig({
+ lang: "pt-BR",
+ metaChunk: true,
+ base: "/handbook-competitive-programming/",
+ title: "Competitive Programming Handbook",
+ description: "De competidores, para competidores.",
+ themeConfig,
+ markdown
+})
diff --git a/vitepress/src/.vitepress/config/markdownConfig.ts b/vitepress/src/.vitepress/config/markdownConfig.ts
new file mode 100644
index 0000000..cb17866
--- /dev/null
+++ b/vitepress/src/.vitepress/config/markdownConfig.ts
@@ -0,0 +1,15 @@
+import { MarkdownOptions } from "vitepress";
+import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'
+
+const markdown: MarkdownOptions = {
+ image: {
+ lazyLoading: true
+ },
+ math: true,
+ lineNumbers: true,
+ config: (markdown) => {
+ markdown.use(tabsMarkdownPlugin)
+ }
+}
+
+export default markdown
diff --git a/vitepress/src/.vitepress/config/navigation/navbar.ts b/vitepress/src/.vitepress/config/navigation/navbar.ts
new file mode 100644
index 0000000..828f530
--- /dev/null
+++ b/vitepress/src/.vitepress/config/navigation/navbar.ts
@@ -0,0 +1,7 @@
+import type { DefaultTheme } from 'vitepress'
+
+const nav: DefaultTheme.NavItem[] = [
+ { text: 'Explorar', link: '/explore/guide' },
+ { text: "Baixar a Biblioteca", link: "/handbook-competitive-programming/Biblioteca.pdf", activeMatch: "/library/" }
+]
+export default nav
diff --git a/vitepress/src/.vitepress/config/navigation/sidebar.ts b/vitepress/src/.vitepress/config/navigation/sidebar.ts
new file mode 100644
index 0000000..4e2e1b2
--- /dev/null
+++ b/vitepress/src/.vitepress/config/navigation/sidebar.ts
@@ -0,0 +1,86 @@
+
+import type { DefaultTheme } from 'vitepress'
+
+const sidebar: DefaultTheme.SidebarItem[] = [
+ {
+ text: "Explorar",
+ base: "/explore/",
+ items: sidebarExplore()
+ },
+ {
+ text: "Biblioteca",
+ base: "/library/",
+ link: "/",
+ items: sidebarLibrary()
+ },
+ {
+ text: "Por trás dos panos",
+ base: "/learn/",
+ link: "/",
+ items: sidebarLearn(),
+ },
+ {
+ text: "Dicas e paranauês",
+ base: "/tips/",
+ link: "/",
+ items: sidebarTips()
+ }
+
+]
+
+function sidebarExplore(): DefaultTheme.SidebarItem[] {
+ return [
+ { text: "Introdução", link: "introduction" },
+ { text: "Guia", link: "guide" }
+ ]
+
+}
+
+function sidebarLibrary(): DefaultTheme.SidebarItem[] {
+ return [
+ {
+ text: "Programação dinâmica",
+ base: "/library/dp/",
+ collapsed: true,
+ items: [{ text: "Problema da mochila", link: "knapsack" }]
+ },
+ {
+ text: "Estruturas",
+ base: "/library/structures/",
+ collapsed: true,
+ items: [
+ { text: "Disjoint set union (UnionFind)", link: "dsu" },
+ { text: "Segtrees", link: "segtrees" }
+ ]
+ },
+ {
+ text: "Grafos",
+ base: "/library/graphs/",
+ collapsed: true,
+ items: [
+ { text: "Detecção de ciclo", link: "cycle-detection" },
+ { text: "Menor caminho", link: "shortest-path" }
+ ]
+ }
+ ]
+
+}
+
+function sidebarLearn(): DefaultTheme.SidebarItem[] {
+ return [
+ { text: "Segtrees", base: "/", link: "TODO" }
+ ]
+}
+
+function sidebarTips(): DefaultTheme.SidebarItem[] {
+ return [
+ {
+ text: "Debugging", base: "/tips/debug/", collapsed: true, items: [
+ { text: "Debuggando variáveis", link: "debugging-variables" },
+ { text: "Debuggando crashes", link: "debugging-crashes" }
+ ]
+ }
+ ]
+}
+
+export default sidebar
diff --git a/vitepress/src/.vitepress/config/searchConfig.ts b/vitepress/src/.vitepress/config/searchConfig.ts
new file mode 100644
index 0000000..3faffad
--- /dev/null
+++ b/vitepress/src/.vitepress/config/searchConfig.ts
@@ -0,0 +1,32 @@
+import { DefaultTheme } from 'vitepress/theme'
+
+const search: { provider: "local", options: DefaultTheme.LocalSearchOptions } =
+{
+ provider: "local",
+ options: {
+ locales: {
+ root: {
+ translations: {
+ button: {
+ buttonText: 'Buscar',
+ buttonAriaLabel: 'Buscar'
+ },
+ modal: {
+ displayDetails: 'Mostrar detalhes',
+ resetButtonTitle: 'Resetar pesquisa',
+ backButtonTitle: 'Voltar',
+ noResultsText: 'Nenhum resultado para ',
+ footer: {
+ selectText: 'para selecionar',
+ navigateText: 'para navegar',
+ closeText: 'para fechar',
+ closeKeyAriaLabel: 'esc'
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+export default search
diff --git a/vitepress/src/.vitepress/config/themeConfig.ts b/vitepress/src/.vitepress/config/themeConfig.ts
new file mode 100644
index 0000000..0dc13fe
--- /dev/null
+++ b/vitepress/src/.vitepress/config/themeConfig.ts
@@ -0,0 +1,28 @@
+import type { DefaultTheme } from 'vitepress'
+
+import sidebar from './navigation/sidebar'
+import nav from './navigation/navbar'
+import search from './searchConfig'
+
+const themeConfig: DefaultTheme.Config = {
+ // https://vitepress.dev/reference/default-theme-config
+ logo: "/caecomp.png",
+ siteTitle: false,
+ search,
+ nav,
+ sidebar,
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/CAECOMP' }
+ ],
+ darkModeSwitchTitle: "Usar o tema escuro",
+ lightModeSwitchTitle: "Usar o tema claro",
+ docFooter: {
+ prev: 'Página anterior',
+ next: 'Próxima página'
+ },
+ outline: {
+ label: "Conteúdo"
+ }
+}
+
+export default themeConfig
diff --git a/vitepress/src/.vitepress/theme/index.ts b/vitepress/src/.vitepress/theme/index.ts
new file mode 100644
index 0000000..59fc68d
--- /dev/null
+++ b/vitepress/src/.vitepress/theme/index.ts
@@ -0,0 +1,19 @@
+// https://vitepress.dev/guide/custom-theme
+import { h } from 'vue'
+import type { Theme } from 'vitepress'
+import DefaultTheme from 'vitepress/theme'
+import './style.css'
+import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'
+
+export default {
+ extends: DefaultTheme,
+ Layout: () => {
+ return h(DefaultTheme.Layout, null, {
+ // https://vitepress.dev/guide/extending-default-theme#layout-slots
+ })
+ },
+ enhanceApp({ app, router, siteData }) {
+ // ...
+ enhanceAppWithTabs(app)
+ }
+} satisfies Theme
diff --git a/vitepress/src/.vitepress/theme/style.css b/vitepress/src/.vitepress/theme/style.css
new file mode 100644
index 0000000..4c561c4
--- /dev/null
+++ b/vitepress/src/.vitepress/theme/style.css
@@ -0,0 +1,148 @@
+/**
+ * Customize default theme styling by overriding CSS variables:
+ * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
+ */
+
+/**
+ * Colors
+ *
+ * Each colors have exact same color scale system with 3 levels of solid
+ * colors with different brightness, and 1 soft color.
+ *
+ * - `XXX-1`: The most solid color used mainly for colored text. It must
+ * satisfy the contrast ratio against when used on top of `XXX-soft`.
+ *
+ * - `XXX-2`: The color used mainly for hover state of the button.
+ *
+ * - `XXX-3`: The color for solid background, such as bg color of the button.
+ * It must satisfy the contrast ratio with pure white (#ffffff) text on
+ * top of it.
+ *
+ * - `XXX-soft`: The color used for subtle background such as custom container
+ * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
+ * on top of it.
+ *
+ * The soft color must be semi transparent alpha channel. This is crucial
+ * because it allows adding multiple "soft" colors on top of each other
+ * to create a accent, such as when having inline code block inside
+ * custom containers.
+ *
+ * - `default`: The color used purely for subtle indication without any
+ * special meanings attached to it such as bg color for menu hover state.
+ *
+ * - `brand`: Used for primary brand colors, such as link text, button with
+ * brand theme, etc.
+ *
+ * - `tip`: Used to indicate useful information. The default theme uses the
+ * brand color for this by default.
+ *
+ * - `warning`: Used to indicate warning to the users. Used in custom
+ * container, badges, etc.
+ *
+ * - `danger`: Used to show error, or dangerous message to the users. Used
+ * in custom container, badges, etc.
+ * -------------------------------------------------------------------------- */
+
+ :root {
+ --vp-c-default-1: var(--vp-c-gray-1);
+ --vp-c-default-2: var(--vp-c-gray-2);
+ --vp-c-default-3: var(--vp-c-gray-3);
+ --vp-c-default-soft: var(--vp-c-gray-soft);
+
+ --vp-c-brand-1: var(--vp-c-indigo-1);
+ --vp-c-brand-2: var(--vp-c-indigo-2);
+ --vp-c-brand-3: var(--vp-c-indigo-3);
+ --vp-c-brand-soft: var(--vp-c-indigo-soft);
+
+ --vp-c-tip-1: var(--vp-c-brand-1);
+ --vp-c-tip-2: var(--vp-c-brand-2);
+ --vp-c-tip-3: var(--vp-c-brand-3);
+ --vp-c-tip-soft: var(--vp-c-brand-soft);
+
+ --vp-c-warning-1: var(--vp-c-yellow-1);
+ --vp-c-warning-2: var(--vp-c-yellow-2);
+ --vp-c-warning-3: var(--vp-c-yellow-3);
+ --vp-c-warning-soft: var(--vp-c-yellow-soft);
+
+ --vp-c-danger-1: var(--vp-c-red-1);
+ --vp-c-danger-2: var(--vp-c-red-2);
+ --vp-c-danger-3: var(--vp-c-red-3);
+ --vp-c-danger-soft: var(--vp-c-red-soft);
+}
+:root {
+ --vp-home-hero-name-color: transparent
+ --vp-home-hero-name-background: -webkit-linear-gradient(120deg, var(--vp-c-brand) 30%, var(--vp-c-brand-dark))
+ --vp-home-hero-image-background-image: linear-gradient(-45deg, var(--vp-c-brand-light) 50%, var(--vp-c-brand-lighter) 50%)
+ --vp-home-hero-image-filter: blur(40px)
+}
+
+.dark {
+ --vp-home-hero-image-background-image: linear-gradient(-45deg, var(--vp-c-brand-darker) 25%, var(--vp-c-brand-darkest) 25%)
+}
+/**
+ * Component: Button
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-button-brand-border: transparent;
+ --vp-button-brand-text: var(--vp-c-white);
+ --vp-button-brand-bg: var(--vp-c-brand-3);
+ --vp-button-brand-hover-border: transparent;
+ --vp-button-brand-hover-text: var(--vp-c-white);
+ --vp-button-brand-hover-bg: var(--vp-c-brand-2);
+ --vp-button-brand-active-border: transparent;
+ --vp-button-brand-active-text: var(--vp-c-white);
+ --vp-button-brand-active-bg: var(--vp-c-brand-1);
+}
+
+/**
+ * Component: Home
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-home-hero-name-color: transparent;
+ --vp-home-hero-name-background: -webkit-linear-gradient(
+ 120deg,
+ #bd34fe 30%,
+ #41d1ff
+ );
+
+ --vp-home-hero-image-background-image: linear-gradient(
+ -45deg,
+ #bd34fe 50%,
+ #47caff 50%
+ );
+ --vp-home-hero-image-filter: blur(44px);
+}
+
+@media (min-width: 640px) {
+ :root {
+ --vp-home-hero-image-filter: blur(56px);
+ }
+}
+
+@media (min-width: 960px) {
+ :root {
+ --vp-home-hero-image-filter: blur(68px);
+ }
+}
+
+/**
+ * Component: Custom Block
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-custom-block-tip-border: transparent;
+ --vp-custom-block-tip-text: var(--vp-c-text-1);
+ --vp-custom-block-tip-bg: var(--vp-c-brand-soft);
+ --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
+}
+
+/**
+ * Component: Algolia
+ * -------------------------------------------------------------------------- */
+
+.DocSearch {
+ --docsearch-primary-color: var(--vp-c-brand-1) !important;
+}
+
diff --git a/vitepress/src/TODO.md b/vitepress/src/TODO.md
new file mode 100644
index 0000000..9ec0e7b
--- /dev/null
+++ b/vitepress/src/TODO.md
@@ -0,0 +1,2 @@
+# TODO
+Essa página não foi construída ainda >:(
diff --git a/vitepress/src/createPdf.ts b/vitepress/src/createPdf.ts
new file mode 100644
index 0000000..3794d22
--- /dev/null
+++ b/vitepress/src/createPdf.ts
@@ -0,0 +1,47 @@
+import { Printer } from "@web-printer/core"
+import vitepress from "@web-printer/vitepress"
+
+import type { MaybeMultiURL, Plugin } from "@web-printer/core"
+
+function plugin(options: { url: MaybeMultiURL, base: string }): Plugin {
+ const orig = vitepress(options)
+ orig.injectStyle = () => {
+ return {
+ contentSelector: "content",
+ avoidBreakSelector: ".custom-block"
+ }
+
+ }
+ orig.onPageWillPrint = async ({ page, pageInfo }) => {
+ if (pageInfo.url.endsWith("/library/")) {
+ const elem = page.locator("div.custom-block a[href]")
+ await elem.evaluate((item, base: string) => {
+ item.setAttribute("href", base + item.getAttribute("href"))
+ }, base)
+ }
+ }
+ return orig
+}
+
+const url = "http://localhost:4173/handbook-competitive-programming/library/"
+const owner = (process.env.GITHUB_REPOSITORY_OWNER ?? "caecomp").toLowerCase()
+const base = `https://${owner}.github.io`
+
+new Printer({ threads: 16, outputDir: __dirname + "/.vitepress/dist/" })
+ .use(plugin({ url, base }))
+ .print("Biblioteca", {
+ filter: ({ url }) => url.includes("/library/"),
+ continuous: true,
+ replaceLink: true,
+ printBackground: true,
+ format: "A4",
+ margin: { left: 0, right: 0 },
+ style: `
+ @media print {
+ .VPNav,
+ .VPLocalNav,
+ .VPDocFooter {
+ display: none!important;
+ }
+ }`
+ })
diff --git a/vitepress/src/explore/guide.md b/vitepress/src/explore/guide.md
new file mode 100644
index 0000000..0acf6ba
--- /dev/null
+++ b/vitepress/src/explore/guide.md
@@ -0,0 +1,26 @@
+---
+title: Páginas
+features:
+ - title: Biblioteca
+ icon: 📚
+ link: /library/
+ details: |
+ Implementações de algoritmos e estruturas de dados comumente usados em
+ contests de programação competitiva.
+
+ - title: Por trás dos panos
+ icon: ⚙️
+ link: /learn/
+ details: Veja como e porquê certos algoritmos e estruturas de dados funcionam.
+
+ - title: Dicas e paranauês
+ icon: 💡
+ link: /tips/
+ details: Veja todo tipo de informação e gambiarra que pode te ajudar em um contest.
+---
+
+
+
+
diff --git a/vitepress/src/explore/introduction.md b/vitepress/src/explore/introduction.md
new file mode 100644
index 0000000..ec2c5eb
--- /dev/null
+++ b/vitepress/src/explore/introduction.md
@@ -0,0 +1,35 @@
+# Sobre o projeto
+
+Este é um projeto criado pelo CAECOMP - IFCE, com o intuito de distribuir o
+conhecimento adquirido da área de programação competitiva com outros programadores.
+
+Esperamos conseguir ajudar e apoiar tanto novatos quanto veteranos, e garantir
+medalhas em todo tipo de contest ou hackaton.
+
+
+
+# Contribuidores
+
+Conheça a equipe por trás deste projeto:
+
+
diff --git a/vitepress/src/index.md b/vitepress/src/index.md
new file mode 100644
index 0000000..5e704c5
--- /dev/null
+++ b/vitepress/src/index.md
@@ -0,0 +1,36 @@
+---
+# https://vitepress.dev/reference/default-theme-home-page
+layout: home
+
+hero:
+ name: "Competitive Programming Handbook"
+ text: "De competidores, para competidores."
+ tagline: Aprenda sobre o funcionamento de algoritmos, veja implementações, obtenha dicas e muito mais!
+ image:
+ src: /caecomp.png
+ alt: CAECOMP
+ actions:
+ - theme: brand
+ text: Abrir guia
+ link: /explore/guide
+
+features:
+ - title: Economize tempo
+ icon: ⌛
+ link: /library/dp/knapsack
+ linkText: Explorar a biblioteca
+ details: A nossa biblioteca de algoritmos e estruturas dispõe de códigos prontinhos para se usar em contests!
+
+ - title: Entenda os detalhes
+ icon: ⚙️
+ link: /learn/
+ linkText: Ver explicações
+ details: Ensinamos como vários algoritmos e estruturas de dados funcionam passo-a-passo - Desvende a mágica conosco!
+
+ - title: Dicas para melhorar sua performance
+ icon: 💡
+ link: /tips/
+ linkText: Ver dicas
+ details: Tem dificuldade para debuggar? Quer conhecer recursos obscuros do compilador? Está no lugar certo!
+---
+
diff --git a/vitepress/src/learn/.gitkeep b/vitepress/src/learn/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/vitepress/src/learn/index.md b/vitepress/src/learn/index.md
new file mode 100644
index 0000000..f9c1c9c
--- /dev/null
+++ b/vitepress/src/learn/index.md
@@ -0,0 +1,11 @@
+---
+next: false
+---
+# Por trás dos panos
+
+## Introdução
+
+Bem vindo á seção de explicações!
+
+Aqui, mostramos a teoria por trás de algoritmos e estruturas de dados comumente
+utilizados em programação competitiva, sem enrolação.
diff --git a/vitepress/src/library/dp/knapsack.md b/vitepress/src/library/dp/knapsack.md
new file mode 100644
index 0000000..3591889
--- /dev/null
+++ b/vitepress/src/library/dp/knapsack.md
@@ -0,0 +1,7 @@
+---
+title: Problema da mochila
+---
+
+## Mochila binária {#mochila-binaria}
+
+<<< @/library/snippets/dp/binary-knapsack.cpp
diff --git a/vitepress/src/library/graphs/cycle-detection.md b/vitepress/src/library/graphs/cycle-detection.md
new file mode 100644
index 0000000..ec46367
--- /dev/null
+++ b/vitepress/src/library/graphs/cycle-detection.md
@@ -0,0 +1,10 @@
+---
+title: Algoritmos para detecção de ciclos em grafos
+---
+
+## Grafo não direcionado, usando [Union Find](/library/structures/dsu.html)
+<<< @/library/snippets/graphs/undirected-cycle.cpp
+
+## Grafo direcionado, usando DFS
+
+<<< @/library/snippets/graphs/directed-cycle.cpp
diff --git a/vitepress/src/library/graphs/shortest-path.md b/vitepress/src/library/graphs/shortest-path.md
new file mode 100644
index 0000000..61d0d29
--- /dev/null
+++ b/vitepress/src/library/graphs/shortest-path.md
@@ -0,0 +1,15 @@
+---
+title: Algoritmos de menor caminho
+---
+
+## Floyd-Warshall
+
+<<< @/library/snippets/graphs/floyd-warshall.cpp
+
+## Bellman-Ford
+
+<<< @/library/snippets/graphs/bellman-ford.cpp
+
+## Dijkstra (para grafos esparsos)
+
+<<< @/library/snippets/graphs/sparse-dijkstra.cpp
diff --git a/vitepress/src/library/index.md b/vitepress/src/library/index.md
new file mode 100644
index 0000000..fe31e62
--- /dev/null
+++ b/vitepress/src/library/index.md
@@ -0,0 +1,16 @@
+---
+next:
+ text: Problema da mochila
+ link: /library/dp/knapsack
+---
+# Biblioteca
+
+## Introdução
+
+Bem vindo á biblioteca de algoritmos e estruturas!
+Aqui, você terá fácil acesso a implementações genéricas e legíveis de
+vários algoritmos e estruturas importantes para programação competitiva.
+
+> [!WARNING]ATENÇÃO
+> O foco da biblioteca é distribuir implementações, mas não explicar o funcionamento.
+> Caso queira aprender bem como um algoritmo ou estrutura funciona, acesse a [seção de explicações](/learn/)
diff --git a/Writerside/biblioteca-snippets/dp/binary-knapsack.cpp b/vitepress/src/library/snippets/dp/binary-knapsack.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/dp/binary-knapsack.cpp
rename to vitepress/src/library/snippets/dp/binary-knapsack.cpp
diff --git a/Writerside/biblioteca-snippets/grafos/bellman-ford.cpp b/vitepress/src/library/snippets/graphs/bellman-ford.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/grafos/bellman-ford.cpp
rename to vitepress/src/library/snippets/graphs/bellman-ford.cpp
diff --git a/Writerside/biblioteca-snippets/grafos/ciclo-direcionado.cpp b/vitepress/src/library/snippets/graphs/directed-cycle.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/grafos/ciclo-direcionado.cpp
rename to vitepress/src/library/snippets/graphs/directed-cycle.cpp
diff --git a/Writerside/biblioteca-snippets/grafos/floyd-warshall.cpp b/vitepress/src/library/snippets/graphs/floyd-warshall.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/grafos/floyd-warshall.cpp
rename to vitepress/src/library/snippets/graphs/floyd-warshall.cpp
diff --git a/Writerside/biblioteca-snippets/grafos/djikstra-esparso.cpp b/vitepress/src/library/snippets/graphs/sparse-dijkstra.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/grafos/djikstra-esparso.cpp
rename to vitepress/src/library/snippets/graphs/sparse-dijkstra.cpp
diff --git a/Writerside/biblioteca-snippets/grafos/ciclo-nao-direcionado.cpp b/vitepress/src/library/snippets/graphs/undirected-cycle.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/grafos/ciclo-nao-direcionado.cpp
rename to vitepress/src/library/snippets/graphs/undirected-cycle.cpp
diff --git a/Writerside/biblioteca-snippets/estruturas/DSU.cpp b/vitepress/src/library/snippets/structures/dsu.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/estruturas/DSU.cpp
rename to vitepress/src/library/snippets/structures/dsu.cpp
diff --git a/Writerside/biblioteca-snippets/estruturas/segtree-iterativa.cpp b/vitepress/src/library/snippets/structures/segtree-iterative.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/estruturas/segtree-iterativa.cpp
rename to vitepress/src/library/snippets/structures/segtree-iterative.cpp
diff --git a/Writerside/biblioteca-snippets/estruturas/segtree-lazy.cpp b/vitepress/src/library/snippets/structures/segtree-lazy.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/estruturas/segtree-lazy.cpp
rename to vitepress/src/library/snippets/structures/segtree-lazy.cpp
diff --git a/Writerside/biblioteca-snippets/estruturas/segtree-recursiva.cpp b/vitepress/src/library/snippets/structures/segtree-recursive.cpp
similarity index 100%
rename from Writerside/biblioteca-snippets/estruturas/segtree-recursiva.cpp
rename to vitepress/src/library/snippets/structures/segtree-recursive.cpp
diff --git a/vitepress/src/library/structures/dsu.md b/vitepress/src/library/structures/dsu.md
new file mode 100644
index 0000000..da00eb6
--- /dev/null
+++ b/vitepress/src/library/structures/dsu.md
@@ -0,0 +1,7 @@
+---
+title: Disjoint Set Union / Union Find
+---
+
+## DSU (Otimizada)
+
+<<< @/library/snippets/structures/dsu.cpp
diff --git a/vitepress/src/library/structures/segtrees.md b/vitepress/src/library/structures/segtrees.md
new file mode 100644
index 0000000..acacef5
--- /dev/null
+++ b/vitepress/src/library/structures/segtrees.md
@@ -0,0 +1,12 @@
+---
+title: Árvores de segmentação (SegTrees)
+---
+
+## Segtree iterativa {#segiter}
+<<< @/library/snippets/structures/segtree-iterative.cpp
+
+## Segtree recursiva (clássica) {#segrec}
+<<< @/library/snippets/structures/segtree-recursive.cpp
+
+## Lazy Segtree (recursiva)
+<<< @/library/snippets/structures/segtree-lazy.cpp
diff --git a/Writerside/images/caecomp.png b/vitepress/src/public/caecomp.png
similarity index 100%
rename from Writerside/images/caecomp.png
rename to vitepress/src/public/caecomp.png
diff --git a/vitepress/src/tips/.gitkeep b/vitepress/src/tips/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/vitepress/src/tips/debug/debugging-crashes.md b/vitepress/src/tips/debug/debugging-crashes.md
new file mode 100644
index 0000000..57105cc
--- /dev/null
+++ b/vitepress/src/tips/debug/debugging-crashes.md
@@ -0,0 +1,183 @@
+# Debuggando crashes e situações absurdas
+
+## Introdução
+
+Alguns tipos de erros de programação podem causar uma parada inesperada do programa
+ou funcionamento completamente caótico.
+
+Em boa parte das linguagens de programação modernas, como Java, Python e JavaScript,
+esse tipo de situação dispara uma exceção que irá:
+
+1. Relatar o tipo de erro que ocorreu (ex: acessar um item inexistente, divisão
+por 0)
+2. Mostrar a pilha de execução até o momento em que o erro aconteceu (stacktrace)
+3. Terminar a execução do programa, caso a exceção não seja tratada.
+
+Em C, tal mecanismo não existe nativamente, e em C++ comum, isso raramente é usado.
+Portanto, muitas vezes, o programa seguirá executando com valores errados, ou
+simplesmente irá parar de executar sem relatar nada sobre o problema ocorrido,
+o que dificulta o debug.
+
+Exemplos:
+
+::: tabs
+==Divisão por zero
+
+```c++
+int main() {
+ int a = 1, b = 0;
+ return a / b;
+}
+```
+
+```bash
+$ ./main
+Tarefa 1, './main' encerrada pelo sinal
+SIGFPE (Exceção de ponto flutuante)
+```
+
+==Falha de segmentação
+
+```c++
+int main() {
+ int *a = nullptr;
+ return *a;
+}
+```
+
+```bash
+$ ./main
+Tarefa 1, './main' encerrada pelo sinal
+SIGSEGV (Erro de fronteira de endereço (Falha de segmentação))
+```
+
+:::
+
+## Usando opções do compilador
+
+Versões recentes de compiladores modernos (ex, GCC 12+, Clang 16+) possuem
+diversas opções que podem facilitar essa tarefa de encontrar coisas que podem
+causar crashes em tempo de compilação, ou mostrar a causa do crash durante a runtime.
+
+Por exemplo, se você tentar compilar os snippets acima usando a opção `-fanalyzer`
+no GCC:
+::: tabs
+== Divisão por zero
+
+```bash
+$ g++ -fanalyzer main.cpp
+main.cpp: In function ‘int main()’:
+main.cpp:2:23: warning: infinite loop [CWE-835] [-Wanalyzer-infinite-loop]
+ 2 | for (int i = 2; i >= 0; --i)
+ | ~~^~~~
+ ‘int main()’: events 1-5
+ |
+ | 2 | for (int i = 2; i >= 0; --i)
+ | | ~~~ ~~^~~~
+ | | | |
+ | | | (1) infinite loop here
+ | | | (2) when ‘i >= 0’: always following ‘true’ branch...
+ | | | (5) ...to here
+ | | (4) looping back...
+ | 3 | i /= i;
+ | | ~~~~~~
+ | | |
+ | | (3) ...to here
+ |
+
+```
+
+== Falha de segmentação
+
+```bash
+$ g++ -fanalyzer main.cpp
+main.cpp: In function ‘int main()’:
+main:3:13: warning: dereference of NULL ‘a’ [CWE-476] [-Wanalyzer-null-dereference]
+ 3 | return *a;
+ | ^
+ ‘int main()’: events 1-2
+ |
+ | 2 | int *a = nullptr;
+ | | ^
+ | | |
+ | | (1) ‘a’ is NULL
+ | 3 | return *a;
+ | | ~
+ | | |
+ | | (2) dereference of NULL ‘a’
+ |
+
+```
+
+:::
+
+Porém, análise estática de código (em tempo de compilação) não é capaz de
+detectar todos os bugs, e nem ajuda a explicar os crashes.
+
+## Debuggando bizonhices em tempo de execução - com opções do compilador
+
+:::warning AVISO
+Algumas dessas opções podem não estar presentes no seu compilador, principalmente
+no Windows.
+
+A solução é instalar um sistema que preste (ex: [CachyOS Linux](https://cachyos.org/),
+[Pop!OS Linux](https://pop.system76.com/), etc).
+:::
+
+Leia o código a seguir:
+
+```c++
+#include
+
+using namespace std;
+
+void f(int tamanho, int index) {
+ int arr[tamanho];
+ arr[index] = index + tamanho;
+ cout << arr[index] << " " << arr[index + 1] << endl;
+}
+
+int main() {
+ f(3, 4);
+ return 0;
+}
+```
+
+Nesse trecho de código, é fácil ver que a função `f` irá acessar um
+índice maior que o tamanho da array, mas isso NÃO crashará o programa, o que abre
+um mundo de possibilidades para bugs bizonhos aparecerem.
+
+Em códigos bem mais complexos, não é tão fácil ver um erro desses de cara.
+Nesses casos, você pode compilar o programa usando a opção `-fsanitize=undefined`:
+
+```bash
+$ g++ -fsanitize=undefined main.cpp -o main
+$ ./main
+main.cpp:7:14: runtime error: index 3 out of bounds for type 'int [*]'
+ #0 0x556d628ca28b in f(int, int) (/tmp/main+0x128b) (BuildId: 0f08dc3fbd7e58985de984fd951d8608c071a6bb)
+ #1 0x556d628ca741 in main (/tmp/main+0x1741) (BuildId: 0f08dc3fbd7e58985de984fd951d8608c071a6bb)
+ #2 0x7efcdd633d67 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
+ #3 0x7efcdd633e24 in __libc_start_main_impl ../csu/libc-start.c:360
+ #4 0x556d628ca100 in _start (/tmp/main+0x1100) (BuildId: 0f08dc3fbd7e58985de984fd951d8608c071a6bb)
+.............
+
+6 1600677166
+```
+
+Note que você pode tornar essa saída um **pouco** mais legível caso adicione a
+opção `-g`, que mantém dados importantes para debuggar no binário, como a linha
+dos itens na pilha de chamada:
+
+```bash
+$ g++ -fsanitize=undefined -g main.cpp -o main
+$ ./main
+main.cpp:7:14: runtime error: index 3 out of bounds for type 'int [*]'
+ #0 0x5650df40628b in f(int, int) /tmp/main.cpp:7
+ #1 0x5650df406741 in main /tmp/main.cpp:12
+ #2 0x7f9764833d67 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
+ #3 0x7f9764833e24 in __libc_start_main_impl ../csu/libc-start.c:360
+ #4 0x5650df406100 in _start (/tmp/main+0x1100) (BuildId: 75c7c990a14b29566e6674bf62b7b892048ccd58)
+
+6 1600677166
+
+```
diff --git a/vitepress/src/tips/debug/debugging-variables.md b/vitepress/src/tips/debug/debugging-variables.md
new file mode 100644
index 0000000..808618c
--- /dev/null
+++ b/vitepress/src/tips/debug/debugging-variables.md
@@ -0,0 +1,200 @@
+# Debuggando variáveis
+
+## Introdução
+
+Nem tudo são flores, e nem sempre seu código irá funcionar.
+E pior ainda, nem sempre você terá noção sobre o que está causando o problema.
+
+Uma forma comum e eficiente para debuggar é mostrar os dados contidos nas variáveis
+do programa. Geralmente, isso é feito da seguinte forma:
+
+```c++
+int a = 10;
+string b = "b";
+bool c = false;
+std::cout << "A = " << a << ", b = " << b << "c = " << c << endl;
+```
+
+Porém, debuggar dessa forma tem várias desvantagens:
+
+1. Ter que especificar o nome de cada variável manualmente é verboso e repetitivo.
+2. O `std::cout`, por si só, não é capaz de apresentar o valor de estruturas como
+vetores ou sets.
+3. Para desativar, é necessário manualmente remover todas as linhas com `std::cout`.
+4. Pode ficar bem confuso, principalmente se o código de debug for repetido
+em várias linhas.
+
+## Parte 1: Macros para o resgate! {#macros}
+
+Macros podem solucionar uma boa parte desses problemas. Como são expandidos
+em tempo de compilação, podem gerar código com informações essenciais.
+
+Por exemplo, o macro a seguir:
+
+```c++:no-line-numbers
+#define debug(x) cout << #x << " = " << x << endl
+```
+
+Mostrará o nome e o valor da expressão x:
+
+```c++
+int numero = 900;
+debug(numero); // saída: numero = 900
+debug(numero / 2); // saída: numero / 2 = 450
+debug(20 & 1); // saída: 20 & 1 = 0
+
+string str = "explodiu"
+debug(str); // saída: str = explodiu
+debug("não " + str) // saída: "não " + str = não explodiu
+```
+
+Macros também podem obter o nome da função e número da linha em que foram usados.
+
+Por exemplo:
+
+```c++:line-numbers=5
+#define debug(x) \
+ cout << "Linha " << __LINE__ \
+ << ", função " << __FUNCTION__ << ": " \
+ << #x << " = " << x << endl
+
+void func(string x) { debug(x); }
+
+int main() {
+ func("teste");
+ debug(33 + 36);
+}
+```
+
+Tem como saída:
+
+```bash:no-line-numbers
+Linha 10, função func: x = teste
+Linha 14, função main: 33 + 36 = 69
+```
+
+Porém, como visto em todos esses exemplos, apenas uma variável está sendo debuggada
+por vez. Podemos melhorar?
+
+## Parte 2: Templates também ajudam! {#templates}
+
+Templates em C++ são ferramentas complexas e poderosas capazes de fazer uma função
+poder receber vários tipos de dados diferentes, o que será fundamental pros códigos
+a seguir.
+
+Exemplo simples:
+
+```c++
+void printer() { cout << endl; }
+template void printer(H val, T... args) {
+ cout << val << ", ";
+ printer(args...);
+}
+
+int main() {
+ printer("a", "b", true, false, 10, 0.5);
+ return 0;
+}
+```
+
+Terá `a, b, 1, 0, 10, 0.5,` como saída.
+
+Agora podemos debuggar várias variáveis de uma vez só.... Mas e os nomes das
+variáveis, que apareciam nos macros? E o número da linha?
+
+## Parte 3: Macros + Templates, união sinistra {#templates-e-macros}
+
+Juntando o ~~in~~útil ao ~~des~~agradável, podemos criar um macro capaz de receber
+infinitas expressões, e usá-lo junto do template anterior:
+
+```c++
+#define debug(...) ({ \
+ cout << "Linha " <<__LINE__ << ": "; \
+ printer(__VA_ARGS__); \
+})
+```
+
+E assim obtemos de volta a informação sobre a linha onde isso foi executado!
+
+..... Mas e os nomes das variáveis?
+
+É ligeiramente mais complicado, mas nada demais. Considerando que
+`#define nome(x) #x` retorna a expressão `x` como uma string, também podemos aplicar
+essa idéia á macros com infinitos argumentos:
+
+```c++
+#define nomes(...) #__VA_ARGS__
+int x = 10;
+string str = "sim";
+string dados = nomes(x, str, true, 30 >> 1);
+```
+
+Nesse trecho de código, a variável `dados` assumirá o valor `"x, str, true, 30 >> 1"`.
+Ou seja, só precisamos printar a string antes de cada vírgula,
+e depois mostrar o valor real.
+
+Implementação:
+
+```c++
+void print_name(string &s) {
+ // Printa caractere a caractere, até achar uma vírgula
+ do {
+ cout << s[0];
+ s = s.substr(1);
+ } while (s.size() && s[0] != ',');
+ cout << " = ";
+}
+
+void printer(string s) { cout << endl; }
+template void printer(string s, V val, A... args) {
+ print_name(s); // Mostra o nome da variável
+ cout << val; // Mostra o valor da variável
+ printer(s, args...); // Segue recursivamente
+}
+
+#define debug(...) ({ \
+ cout << "Linha " << __LINE__ << ": "; \
+ printer(#__VA_ARGS__, __VA_ARGS__); \
+})
+```
+
+Agora sim, você terá a linha de execução e o nome das variáveis!
+
+Porém, ainda existem limitações: Esse código não é capaz de debuggar estruturas
+como vetores, sets, maps, e etc.
+Suportar essas estruturas aumentam bastante a complexidade, e para algo realmente
+completo, recomendamos ler [este post no Codeforces](https://codeforces.com/blog/entry/125435)
+ ou os arquivos do [repositório disponibilizado no post](https://github.com/Anshul-Johri-1/Debug-Template/).
+
+De toda forma, para adicionar o suporte a vetores de forma simples no código anterior,
+é só adicionar essa função logo acima da função `printer` anterior:
+
+```c++
+template
+void printer(string s, vector &vec, A... args) {
+ print_name(s);
+ cout << "{";
+ for (int len = vec.size(), i = 0; i < len; ++i) {
+ cout << " " << vec[i];
+ if (i + 1 != len)
+ cout << ",";
+ }
+ cout << " }";
+ printer(s, args...);
+}
+```
+
+## Desativando o debug {#desativando}
+
+Novamente, macros te ajudarão. Você pode escrever algo do tipo:
+
+```c++
+#define DEBUG // [!code highlight]
+#ifdef DEBUG
+#define debug(...) printer(#__VA_ARGS__, __VA_ARGS__);
+#else
+#define debug(...) 0
+#endif
+```
+
+Assim, para desativar o debug no código INTEIRO, é só comentar a linha destacada.
diff --git a/vitepress/src/tips/index.md b/vitepress/src/tips/index.md
new file mode 100644
index 0000000..975f43d
--- /dev/null
+++ b/vitepress/src/tips/index.md
@@ -0,0 +1,18 @@
+---
+next: false
+---
+# Dicas e paranauês
+
+## Introdução
+
+Bem vindo á seção de dicas!
+
+Aqui, você terá acesso a:
+
+- Ferramentas
+- Snippets comuns de código
+- _Artifícios técnicos não regularizados_ (Gambiarras)
+- Dicas e estratégias para contests e maratonas
+- Fontes de conteúdo relacionado á programação competitiva
+
+Etc.