diff --git a/.github/workflows/cleanup-branches.yml b/.github/workflows/cleanup-branches.yml new file mode 100644 index 0000000..63497be --- /dev/null +++ b/.github/workflows/cleanup-branches.yml @@ -0,0 +1,27 @@ +name: Cleanup Old Branches + +on: + pull_request: + types: [closed] + branches: [main] + +jobs: + cleanup: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + + steps: + - name: Delete merged branch + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BRANCH_NAME="${{ github.event.pull_request.head.ref }}" + + # Nur translation-sync Branches löschen + if [[ $BRANCH_NAME == translation-sync-* ]]; then + echo "Lösche Branch: $BRANCH_NAME" + git push origin --delete $BRANCH_NAME || echo "Branch konnte nicht gelöscht werden (möglicherweise schon gelöscht)" + echo "✓ Branch $BRANCH_NAME wurde gelöscht" + else + echo "Branch $BRANCH_NAME ist kein Translation-Branch, überspringe" + fi diff --git a/.github/workflows/create-upstream-pr.yml b/.github/workflows/create-upstream-pr.yml new file mode 100644 index 0000000..b3e88b2 --- /dev/null +++ b/.github/workflows/create-upstream-pr.yml @@ -0,0 +1,130 @@ +name: Create Upstream PR + +on: + pull_request: + types: [closed] + branches: [main] + workflow_dispatch: # Manuelles Triggern möglich + +jobs: + create-upstream-pr: + if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && contains(github.event.pull_request.title, '[REVIEW NEEDED]')) + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout your fork + uses: actions/checkout@v4 + with: + repository: ${{ github.actor }}/qubic-docs-de + token: ${{ secrets.UPSTREAM_PR_TOKEN }} + fetch-depth: 0 + + - name: Configure Git + run: | + git config user.name "Qubic Translation Bot" + git config user.email "translation-bot@qubic-network.de" + + - name: Create branch with only translations + run: | + # Neuen Branch erstellen + BRANCH_NAME="german-translations-$(date +%Y%m%d)" + git checkout -b $BRANCH_NAME + + # Nur i18n/de/ behalten, Rest entfernen + mkdir -p /tmp/translations + cp -r i18n/de/ /tmp/translations/ + + # Alles löschen außer .git + find . -mindepth 1 -maxdepth 1 ! -name '.git' -exec rm -rf {} + + + # i18n wiederherstellen + mkdir -p i18n + cp -r /tmp/translations/de/ i18n/ + + # Alles stage (inkl. Löschungen) und dann nur i18n commiten + git add -A + git reset HEAD .github/workflows/cleanup-branches.yml .github/workflows/create-upstream-pr.yml .github/workflows/sync-and-translate.yml 2>/dev/null || true + git commit -m "Add German translations + + - Translated via DeepSeek API with human review + - Covers latest documentation updates + - All technical terms preserved + - Includes overview section + + Co-authored-by: ${{ github.actor }}" + + # Branch pushen + git push origin $BRANCH_NAME + + echo "branch_name=$BRANCH_NAME" >> $GITHUB_ENV + echo "✓ Branch $BRANCH_NAME erstellt und gepusht" + + - name: Create Pull Request to qubic/docs + env: + GITHUB_TOKEN: ${{ secrets.UPSTREAM_PR_TOKEN }} + run: | + # Cross-Repository PR erstellen + gh pr create \ + --repo qubic/docs \ + --title "German Translation Update - $(date +%Y-%m-%d)" \ + --body "$(cat << 'PRBODY' + ## 🇩🇪 German Translation Update + + This PR adds German translations for the Qubic documentation. + + ### What's included: + - ✅ Latest translations synchronized with upstream + - ✅ AI-translated via DeepSeek API + - ✅ Reviewed by human translator + - ✅ All technical terms preserved + - ✅ Proper Docusaurus i18n structure (`i18n/de/`) + + ### Files changed: + - German translations in `i18n/de/docusaurus-plugin-content-docs/current/` + + ### How to test: + 1. Pull this branch + 2. Add to `docusaurus.config.js`: + ```javascript + i18n: { + defaultLocale: 'en', + locales: ['en', 'de'], + } + ``` + 3. Run `npm run start` + 4. Visit `http://localhost:3000/de/` + + ### Requirements for merge: + - [ ] Add `de` to `locales` in `docusaurus.config.js` + - [ ] Verify build succeeds: `npm run build` + - [ ] Check German pages render correctly + + ### Maintenance: + - Translations are automatically synced daily + - New PRs will be created for future updates + - This is a one-time setup - future updates just need merge + + --- + *Automated translation workflow by @${{ github.actor }}* + *For questions about translations, please contact the German translation team* + PRBODY + )" \ + --head ${{ github.actor }}:${{ env.branch_name }} \ + --base main + + - name: Notify success + run: | + echo "========================================" + echo "✅ PR erfolgreich erstellt!" + echo "" + echo "Der Qubic-Maintainer bekommt jetzt:" + echo "- Nur den i18n/de/ Ordner" + echo "- Keine Workflow-Dateien" + echo "- Keine Scripts" + echo "" + echo "Link zum PR:" + echo "https://github.com/qubic/docs/pulls" + echo "========================================" diff --git a/.github/workflows/sync-and-translate.yml b/.github/workflows/sync-and-translate.yml new file mode 100644 index 0000000..d659bef --- /dev/null +++ b/.github/workflows/sync-and-translate.yml @@ -0,0 +1,349 @@ +name: Sync and Translate Qubic Docs + +on: + # DEAKTIVIERT bis das Qubic-Team die Übersetzungen akzeptiert + # schedule: + # # Täglich um 02:00 UTC (außerhalb der Hauptnutzungszeiten) + # - cron: '0 2 * * *' + workflow_dispatch: # Nur manuelles Triggern möglich + +env: + UPSTREAM_REPO: qubic/docs + UPSTREAM_BRANCH: main + TRANSLATION_BRANCH: translation-sync + DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} + +jobs: + sync-and-translate: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + # 1. Checkout des Forks + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: true + + # 2. Git-Konfiguration + - name: Configure Git + run: | + git config user.name "Qubic Translation Bot" + git config user.email "translation-bot@qubic-network.de" + + # 3. Upstream Repository hinzufügen + - name: Add upstream remote + run: | + git remote add upstream https://github.com/${{ env.UPSTREAM_REPO }}.git + git fetch upstream + + # 4. Änderungen seit letztem Sync ermitteln + - name: Detect changes + id: changes + run: | + # Letzten Sync-Commit finden + LAST_SYNC=$(git log --grep="Translation sync" --format="%H" -n 1 || echo "") + + if [ -z "$LAST_SYNC" ]; then + # Erster Durchlauf - alle Dateien + echo "changed_files=all" >> $GITHUB_OUTPUT + echo "is_initial_sync=true" >> $GITHUB_OUTPUT + else + # Änderungen seit letztem Sync (nur overview Ordner) + git diff --name-only $LAST_SYNC upstream/${{ env.UPSTREAM_BRANCH }} -- docs/overview/ > changed_files.txt + + if [ -s changed_files.txt ]; then + echo "changed_files=changed_files.txt" >> $GITHUB_OUTPUT + echo "files_changed=true" >> $GITHUB_OUTPUT + echo "Changed files:" + cat changed_files.txt + else + echo "files_changed=false" >> $GITHUB_OUTPUT + echo "No changes detected" + fi + fi + + # 5. Node.js Setup + - name: Setup Node.js + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + uses: actions/setup-node@v4 + with: + node-version: '20' + + # 6. Dependencies installieren + - name: Install dependencies + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + run: | + npm init -y + npm install axios glob + + # 7. Übersetzungsscript erstellen + - name: Create translation script + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + run: | + cat > translate.js << 'EOF' + const fs = require('fs'); + const path = require('path'); + const axios = require('axios'); + const glob = require('glob'); + + const DEEPSEEK_API_URL = 'https://api.deepseek.com/v1/chat/completions'; + const DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY; + + // Übersetzungsprompt für technische Dokumentation + const TRANSLATION_PROMPT = `Du bist ein professioneller Übersetzer für technische Blockchain-Dokumentation. + Übersetze den folgenden Text ins Deutsche: + + WICHTIGE REGELN FÜR TECHNISCHE BEGRIFFE: + - "computor" → "Computor" (immer groß, nie übersetzen) + - "computors" → "Computoren" (Plural auf Deutsch) + - "epoch" → "Epoche" (übersetzen) + - "epochs" → "Epochen" (Plural auf Deutsch) + - "useful proof-of-work" → "Useful Proof-of-Work" (nie übersetzen) + - "Useful Proof-of-Work" → "Useful Proof-of-Work" (nie übersetzen) + - "ledger" → "Ledger" (nie übersetzen) + - "quorum" → "Quorum" (nie übersetzen) + - "smart contract" → "Smart Contract" (nie übersetzen) + - "wallet" → "Wallet" (nie übersetzen) + + ALLGEMEINE REGELN: + 1. Behalte alle Markdown-Formatierungen bei (##, **, \`\`\`, etc.) + 2. Übersetze Code-Kommentare, aber NICHT Code-Blöcke + 3. Behalte URLs und Dateipfade unverändert + 4. Behalte YAML-Frontmatter-Struktur bei + 5. Verwende professionelle, klare Sprache + 6. Achte auf korrekte deutsche Grammatik und Zeichensetzung + + Text zum Übersetzen: + `; + + async function translateText(text) { + try { + const response = await axios.post( + DEEPSEEK_API_URL, + { + model: 'deepseek-chat', + messages: [ + { + role: 'system', + content: 'Du bist ein Experte für technische Übersetzungen im Blockchain-Bereich.' + }, + { + role: 'user', + content: TRANSLATION_PROMPT + text + } + ], + temperature: 0.3, + max_tokens: 4000 + }, + { + headers: { + 'Authorization': `Bearer ${DEEPSEEK_API_KEY}`, + 'Content-Type': 'application/json' + } + } + ); + + return response.data.choices[0].message.content; + } catch (error) { + console.error('Translation error:', error.response?.data || error.message); + throw error; + } + } + + // Eigene Frontmatter-Parsing Funktion + function parseFrontmatter(content) { + const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/); + if (!match) return { frontmatter: {}, body: content }; + + const frontmatterText = match[1]; + const body = match[2].trim(); + const frontmatter = {}; + + frontmatterText.split('\n').forEach(line => { + const colonIndex = line.indexOf(':'); + if (colonIndex > 0) { + const key = line.substring(0, colonIndex).trim(); + let value = line.substring(colonIndex + 1).trim(); + // Entferne Anführungszeichen + if ((value.startsWith('"') && value.endsWith('"')) || + (value.startsWith("'") && value.endsWith("'"))) { + value = value.slice(1, -1); + } + // Parse numbers + if (!isNaN(value) && value !== '') { + frontmatter[key] = parseInt(value); + } else { + frontmatter[key] = value; + } + } + }); + + return { frontmatter, body }; + } + + // Funktion um Frontmatter als sauberes YAML zu formatieren + function formatFrontmatter(obj) { + const lines = []; + for (const [key, value] of Object.entries(obj)) { + if (typeof value === 'string') { + // Immer einfache Anführungszeichen verwenden + lines.push(`${key}: '${value}'`); + } else { + lines.push(`${key}: ${value}`); + } + } + return lines.join('\n'); + } + + async function translateFile(inputPath, outputPath) { + console.log(`Translating: ${inputPath}`); + + const content = fs.readFileSync(inputPath, 'utf-8'); + const { frontmatter, body } = parseFrontmatter(content); + + // Übersetze den Hauptinhalt + const translatedBody = await translateText(body); + + // Frontmatter übersetzen + const translatedFrontmatter = { ...frontmatter }; + if (frontmatter.title) { + translatedFrontmatter.title = await translateText(frontmatter.title); + } + if (frontmatter.sidebar_label) { + translatedFrontmatter.sidebar_label = await translateText(frontmatter.sidebar_label); + } + if (frontmatter.description) { + translatedFrontmatter.description = await translateText(frontmatter.description); + } + + // Zusammenbauen mit korrektem YAML-Format + const yamlFrontmatter = formatFrontmatter(translatedFrontmatter); + const output = `---\n${yamlFrontmatter}\n---\n\n${translatedBody}`; + + // Sicherstellen, dass das Ausgabeverzeichnis existiert + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); + fs.writeFileSync(outputPath, output); + + console.log(`✓ Saved: ${outputPath}`); + } + + async function main() { + const isInitialSync = process.env.IS_INITIAL_SYNC === 'true'; + const changedFilesPath = process.env.CHANGED_FILES; + + let filesToProcess = []; + + if (isInitialSync) { + // NUR overview Ordner für ersten Test + filesToProcess = glob.sync('docs/overview/**/*.md'); + console.log(`Initial sync (overview only): Found ${filesToProcess.length} files`); + } else if (changedFilesPath && fs.existsSync(changedFilesPath)) { + // Nur geänderte Dateien + const changedFiles = fs.readFileSync(changedFilesPath, 'utf-8') + .split('\n') + .filter(f => f.endsWith('.md')); + filesToProcess = changedFiles; + console.log(`Processing ${filesToProcess.length} changed files`); + } + + // Übersetze jede Datei + for (const file of filesToProcess) { + const outputPath = file.replace('docs/', 'i18n/de/docusaurus-plugin-content-docs/current/'); + + try { + await translateFile(file, outputPath); + } catch (error) { + console.error(`Failed to translate ${file}:`, error); + process.exit(1); + } + } + + // Erstelle Summary + const summary = { + timestamp: new Date().toISOString(), + filesProcessed: filesToProcess.length, + files: filesToProcess + }; + fs.writeFileSync('translation-summary.json', JSON.stringify(summary, null, 2)); + + console.log('\n✓ Translation complete!'); + } + + main().catch(console.error); + EOF + + # 8. Übersetzung ausführen + - name: Run translation + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + env: + DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} + IS_INITIAL_SYNC: ${{ steps.changes.outputs.is_initial_sync }} + CHANGED_FILES: ${{ steps.changes.outputs.changed_files }} + run: node translate.js + + # 9. Auf main zurücksetzen und nur i18n Änderungen vorbereiten + - name: Prepare clean branch + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + run: | + # Sichere die übersetzten Dateien + mkdir -p /tmp/translations + cp -r i18n/de/ /tmp/translations/ + + # Stash alle Änderungen + git stash push -m "translations" + + # Zurück zu main + git checkout main + git pull origin main + + # Nur die übersetzten Dateien zurückholen + cp -r /tmp/translations/de/ i18n/ + + # Zeige was hinzugefügt wird + git status + git add i18n/de/ + git status + + # 10. PR im Fork erstellen (für deinen Review) + # Die Action committed und pusht die Änderungen automatisch + - name: Create Review PR + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: translation-sync-${{ github.run_id }} + base: main + title: "[REVIEW NEEDED] Translation Sync - $(date +%Y-%m-%d)" + body: | + ## Übersetzungssync erstellt + + **Datum:** $(date +%Y-%m-%d) + **Quelle:** qubic/docs + + ### Änderungen: + Übersetzte Dateien im Overview-Ordner + + ### Nächste Schritte: + 1. [ ] Review der Übersetzungen durchführen + 2. [ ] Korrekturen direkt in diesen Branch commiten + 3. [ ] Nach Approval: Automatischer PR an qubic/docs wird erstellt + + **Wichtig:** Bitte innerhalb von 48h reviewn. + commit-message: | + Translation sync: $(date +%Y-%m-%d) + + Automated translation of changed documentation files. + Review required before creating upstream PR. + delete-branch: false + add-paths: | + i18n/de/** + + # 12. Benachrichtigung senden (optional) + - name: Send notification + if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.is_initial_sync == 'true' + run: | + echo "::notice title=Translation Ready::Review PR created. Please check the translations." diff --git a/.github/workflows/update-api-docs.yml b/.github/workflows/update-api-docs.yml deleted file mode 100644 index cebd3d2..0000000 --- a/.github/workflows/update-api-docs.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Update API Docs - -on: - workflow_dispatch: - inputs: - api: - description: 'Which API to update' - required: true - default: 'both' - type: choice - options: - - both - - live - - query - repository_dispatch: - types: [live-api-update, query-api-update] - -permissions: - contents: write - pull-requests: write - -jobs: - update-live-api: - if: > - github.event_name == 'repository_dispatch' && github.event.action == 'live-api-update' || - github.event_name == 'workflow_dispatch' && (github.event.inputs.api == 'live' || github.event.inputs.api == 'both') - runs-on: ubuntu-latest - concurrency: - group: update-live-api - cancel-in-progress: true - steps: - - name: Checkout docs repo - uses: actions/checkout@v4 - - - name: Checkout qubic-http - uses: actions/checkout@v4 - with: - repository: qubic/qubic-http - path: tmp/qubic-http - sparse-checkout: | - protobuff/qubic.openapi.yaml - - - name: Copy OpenAPI file and cleanup - run: | - cp tmp/qubic-http/protobuff/qubic.openapi.yaml static/openapi/qubic-http.openapi.yaml - rm -rf tmp/ - - - name: Check for changes - id: changes - run: | - if git diff --quiet static/openapi/qubic-http.openapi.yaml; then - echo "changed=false" >> $GITHUB_OUTPUT - else - echo "changed=true" >> $GITHUB_OUTPUT - fi - - - name: Create Pull Request - if: steps.changes.outputs.changed == 'true' - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.PAT_TOKEN }} - commit-message: "docs: update Live API OpenAPI specification" - title: "docs: update Live API OpenAPI specification" - body: | - This PR updates the Live API OpenAPI specification from [qubic/qubic-http](https://github.com/qubic/qubic-http). - - This PR was automatically generated. - branch: docs/update-live-api-spec - delete-branch: true - labels: automated - - update-query-api: - if: > - github.event_name == 'repository_dispatch' && github.event.action == 'query-api-update' || - github.event_name == 'workflow_dispatch' && (github.event.inputs.api == 'query' || github.event.inputs.api == 'both') - runs-on: ubuntu-latest - concurrency: - group: update-query-api - cancel-in-progress: true - steps: - - name: Checkout docs repo - uses: actions/checkout@v4 - - - name: Checkout archive-query-service - uses: actions/checkout@v4 - with: - repository: qubic/archive-query-service - path: tmp/archive-query-service - sparse-checkout: | - v2/api/archive-query-service/v2/query_services.openapi.yaml - - - name: Copy OpenAPI file and cleanup - run: | - cp tmp/archive-query-service/v2/api/archive-query-service/v2/query_services.openapi.yaml static/openapi/query-services.openapi.yaml - rm -rf tmp/ - - - name: Check for changes - id: changes - run: | - if git diff --quiet static/openapi/query-services.openapi.yaml; then - echo "changed=false" >> $GITHUB_OUTPUT - else - echo "changed=true" >> $GITHUB_OUTPUT - fi - - - name: Create Pull Request - if: steps.changes.outputs.changed == 'true' - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.PAT_TOKEN }} - commit-message: "docs: update Query API OpenAPI specification" - title: "docs: update Query API OpenAPI specification" - body: | - This PR updates the Query API OpenAPI specification from [qubic/archive-query-service](https://github.com/qubic/archive-query-service). - - This PR was automatically generated. - branch: docs/update-query-api-spec - delete-branch: true - labels: automated diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 30d09bd..0000000 --- a/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Intellij IDE files -.idea -*.iml diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 0a2ed72..0000000 --- a/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -auto-install-peers=true -use-node-version=18.16.0 \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 492487e..0000000 --- a/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# Qubic Docs Readme - -Qubic's Docs are built using [Docusaurus 3](https://docusaurus.io/) with `pnpm`. - -## Local Development - -To set up the Qubic Docs site locally: - -- copy the repo using `git clone git@github.com:qubic/docs.git` -- install dependencies using `pnpm install` -- make your changes and updates as needed -- run the local development server using `pnpm start` to test site -- build locally via `pnpm build` - -> Note: After cloning the repo to your local machine, all the local development commands are run from within this `docs.qubic.org` directory. - -## Updating Documentation - -Anyone who wants to update the documentation can open a pull request for the Qubic team to review. Here's a guide on how to do that: - -1. Fork the Repository: - - Navigate to https://github.com/qubic/docs - - Click the "Fork" button at the top right - -2. Clone Your Forked Repository: - ``` - git clone git@github.com:your-username/docs.git - cd docs - ``` - -3. Update or Add .md Files: - - Navigate to the appropriate directory (e.g., `cd docs/your-section`) - - Replace or add .md files as needed - - > Note: The 'overview' directory mentioned in the sidebar example is just that - an example. Your changes may be in a different section of the documentation. - -4. Update the Sidebars (if necessary): - - Open `sidebars.js` - - Update the relevant sidebar section to include new .md files. For example: - ```javascript - const sidebars = { - // ... other sidebars ... - exampleSidebar: [ - { - type: 'category', - label: 'Your Section', - items: [ - 'your-section/file1', - 'your-section/file2', - // ... other files ... - ], - }, - ], - // ... other sidebars ... - }; - ``` - -5. Create a Pull Request: - ``` - git add . - git commit -m "Update documentation for [your section]" - git checkout -b update-docs-[your-section] - git push origin update-docs-[your-section] - ``` - - Go to your repository on GitHub - - Click on "Compare & pull request" - - Add a title and description - - Click "Create pull request" - -> Disclaimer: All pull requests will be reviewed by the Qubic team before being merged. We appreciate your contributions to improving our documentation! - -## Deployment - -For deployment a push to github is sufficient. A build is automatically initiated. If the build succeeds, the project is deployed to the qubic.org server. diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index e00595d..0000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/blog/2023-07-19_qx_auction.mdx b/blog/2023-07-19_qx_auction.mdx deleted file mode 100644 index f43f972..0000000 --- a/blog/2023-07-19_qx_auction.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "The Frenzied Auction: Qx-IPO unveils the potential of Qubic Smart Contracts" -slug: qx_auction -tags: - - qubic - - Qx -authors: [cryptoisnow] ---- - -import ReactPlayer from 'react-player' - - -In the ever-expanding crypto universe, where digital currencies flow and groundbreaking technologies emerge, an exciting event unfolded. This was the story of the inaugural Qubic [Smart Contract](/learn/smart-contracts) [IPO](/learn/ipo): Qx. - -Qx is a decentralized exchange (DEX) with a vision to transform how digital assets are traded. With 676 sought-after shares on offer, anticipation surged amongst crypto enthusiasts who eagerly followed the live auction. - -The enthralling auction took place during Epoch 65, lasting from July 12th to July 19th, 2023. Investors and enthusiasts had the opportunity to participate in this historic event and become part of the Qubic revolution. - -As the auction began, participants including miners, computors, and QU-holders entered a heated bidding war. The atmosphere buzzed with electricity, and bids escalated as everyone vied for the coveted shares. - -The auction took the unique form of a [Dutch Auction](/learn/dutch-auction), adding an extra layer of intrigue. The starting price per share was low but gradually increased until the time ran out at 11 UTC on Wednesday, July 19th. The Qubic community watched the entire event unfold live on https://live.qubic.li/ipo, cheering on their favorites and their own bids. - -As the auction reached its thrilling conclusion, the success of Qx-IPO became apparent. It marked a triumph for the Qubic ecosystem and showcased the immense potential Qubic Smart Contracts hold for the crypto industry. - -The unique aspect of these Qubic SC IPOs is the concept of "burning." The designated [QUs](/learn/tokenomics) were literally burned, decreasing the total supply with each Smart Contract built on Qubic. Qx-IPO was a testament to this concept. Over 10 trillion QUs were burned during the IPO auction. As a result, the share price soared to an incredible 15 billion QUs per share, resulting in a significant reduction of over 15% in the total supply. - -This spectacular auction marked the beginning of a new era for Smart Contracts and demonstrated how they could transform the crypto world through IPOs. Qx-IPO showed that groundbreaking technologies are not just visions, but tangible possibilities shaping our crypto-centric future. - -With a resounding success, the Qx-IPO has made its mark in the crypto history books. The journey for Qubic and its Qubic SC IPOs has just begun. The future is brighter than ever and everyone is looking forward to the next chapter of evolution. - - - -> Video from the last 10 minutes of the Qx IPO; 10 x timespeed. diff --git a/blog/2023-07-21_discover_qubic.md b/blog/2023-07-21_discover_qubic.md deleted file mode 100644 index cc4509f..0000000 --- a/blog/2023-07-21_discover_qubic.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Discovering America in the World of Cryptocurrency: A Journey Through Qubic" -slug: discover_qubic -tags: - - qubic -authors: [j0et0m] ---- - -Embarking on the Qubic journey, I often find myself struggling to encapsulate its allure in words. It's a heady mix of challenge, innovation, vision, and sheer possibility that sparks an addictive curiosity. There isn't a single "this" or "that" which paints the complete picture; instead, it's a vibrant tapestry of elements blending together, making Qubic incredibly unique in the landscape of blockchain technology. - -Qubic was born out of the extraordinary vision of our lead developer — an icon who has been nurturing this dream for more than 10 years. The project's growth has been organic and unhindered, starkly contrasting with the structured development approaches of other blockchain projects. Qubic's growth is a testament to the unconstrained exploration of possibilities. - -For me, the allure of Qubic lies in its reciprocity. It's as though you're contributing to a shared dream, and in return, you receive a piece of something inexplicably wonderful. My motivation for working on this project is fueled by the challenge of ushering Qubic into a "release state", akin to nurturing a child into maturity. - -But don't let my philosophical musings mislead you. Qubic isn't just about high ideals. It's also about hard, innovative technology. We've delved into uncharted territories, developing open-source software designed explicitly for Unified Extensible Firmware Interface (U)EFI — an unconventional and daring approach in the blockchain world. - -Yet, the boldness doesn't stop there. Qubic flaunts exceptional performance capabilities that could potentially outshine most existing networks. With our unique Useful Proof of Work (UPoW), we are leveraging the computing power expended in the mining process to contribute towards Artificial Intelligence (AI) research — a convergence of blockchain and AI that is as exciting as it is revolutionary. - -Indeed, I could go on listing technical marvels that make Qubic stand out. However, if I were to distill it all into a single sentence, I'd say: We are charting a unique course in the sea of blockchain development, akin to Columbus's daring voyage — not to reach India, but to uncover a new world altogether. - -So, [join](https://discord.gg/2vDMR8m) us on this voyage. Together, we can navigate the unexplored waters of blockchain technology and, who knows, we might just discover our 'America' along the way. diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index 45ad2a4..0000000 --- a/blog/authors.yml +++ /dev/null @@ -1,16 +0,0 @@ -frog: - name: Frog-Rabbit - title: Qubic Dev - url: https://github.com/frog-rabbit - image_url: https://avatars.githubusercontent.com/u/107187937 - -j0et0m: - name: J0ET0M - title: Qubic Dev - url: https://github.com/J0ET0M - image_url: https://avatars.githubusercontent.com/u/107187448 - -cryptoisnow: - name: CRYPTOisNOW - title: Qubic Ambassador - url: https://discordapp.com/users/947151144118022175 diff --git a/docs/api/rpc.md b/docs/api/rpc.md deleted file mode 100644 index da3a348..0000000 --- a/docs/api/rpc.md +++ /dev/null @@ -1,678 +0,0 @@ ---- -title: Qubic RPC ---- -# Qubic RPC - -The Qubic RPC (Remote Procedure Call) API provides a way for applications to interact with the Qubic blockchain without running a full node. It offers endpoints for querying blockchain data, submitting transactions, and interacting with smart contracts. - -## 1. Available RPC Services and Documentation - -- [Live API](/apis/live) - Real-time data access (interactive docs) -- [Query API](/apis/query) - Historical data and archive queries (interactive docs) -- [Full Swagger Reference](https://qubic.github.io/integration/Partners/swagger/qubic-rpc-doc.html) - Complete API reference including all services (Archiver, Query, Live, Stats) - -## 2. Public RPC Endpoints - -| Base URL | Use Case | -| ----------------------------- | --------------------------------------------------------------------------------------------- | -| https://rpc.qubic.org | Public RPC/API for general purposes. Use this in production applications. | -| https://rpc-staging.qubic.org | Public RPC/API for staging (production testing) purposes. Normally only for internal testing. | - -### Using RPC Endpoints - -These endpoints can be accessed via HTTP requests (e.g., using `curl`, a TypeScript library, or any HTTP client). Example using `curl`: - -```bash -curl https://rpc.qubic.org/v1/status -``` - -## 3. Basic API Examples - -The following examples demonstrate how to use JavaScript scripts to interact with Qubic RPC APIs. These practical examples showcase common operations and provide ready-to-use code snippets for developers. - -### Example 1: Get Account Balance - -Retrieves the current balance of a specific account using its public ID. - - -```javascript -import { normalizeEndpoint, fetchJson } from "./common"; - -export async function runBalances({ rpc, publicId }) { - const base = normalizeEndpoint(rpc); - if (!publicId) throw new Error("Missing publicId"); - const url = `${base}v1/balances/${publicId}`; - const data = await fetchJson(url); - return data; // { balance: {...} } -} -``` - -### Example 2: Broadcast Transaction - -Sends a signed transaction (encoded in base64) to the network for processing. - -```javascript -import { normalizeEndpoint, fetchJson } from "./common"; - -export async function runBroadcastTransaction({ rpc, encodedTransaction }) { - const base = normalizeEndpoint(rpc); - if (!encodedTransaction) - throw new Error("Missing encodedTransaction (base64)"); - const body = { encodedTransaction }; - const data = await fetchJson(`${base}v1/broadcast-transaction`, { - method: "POST", - body, - }); - return data; -} -``` - -### Example 3: Get Tick Information - -Retrieves the current tick information, including the current tick number and timestamp. - -```javascript -import { normalizeEndpoint, fetchJson } from "./common"; - -export async function runTickInfo({ rpc }) { - const base = normalizeEndpoint(rpc); - const url = `${base}v1/tick-info`; - const data = await fetchJson(url); - - return data; // { tickInfo: { tick, timestamp } } -} -``` - -## 4. Smart Contract Interaction Flow - -Here's how to interact with a smart contract through RPC: - -:::important Base64 Encoding -When sending data (like `requestData`) in `POST` requests to endpoints such as `/v1/querySmartContract`, it **must be encoded in base64**. - -Similarly, the `responseData` received from such endpoints is often encoded in base64 and **must be decoded** to get the actual data. -::: - -1. **Reading Data (Function Call)**: - ```bash - curl -X 'POST' \ - 'https://rpc.qubic.org/v1/querySmartContract' \ - -H 'accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{ - "contractIndex": 1, - "inputType": 1, - "inputSize": 0, - "requestData": "" - }' - ``` - Response: `{"responseData":"AMqaO0BCDwBAS0wA"}` (Note: The response is also encoded in base64. You will need to decode it to get the actual data.) - -2. **Writing Data (Procedure Call)**: - - Create a transaction targeting the smart contract - - Set the appropriate function index and parameters - - Sign the transaction with your private key - - Broadcast it using `/v1/broadcast-transaction` - -## 5. Transaction Anatomy - -This section provides a clear breakdown of every component that forms a valid Qubic transaction. It explains the conceptual structure, how to determine the exact input size expected by a smart contract, and how the data is serialized into a base64 payload. You’ll also see the end-to-end flow for both read-only queries and state-changing procedures, helping you understand how transactions are built, signed, and executed on the network. - - -### Conceptual Structure - -``` -Transaction = { - Source: Sender's public key - Destination: Receiver/contract public key - Amount: QUs to transfer - Tick: Future execution moment - Type: Function/procedure index to invoke - Size: Data payload bytes - Payload: Serialized data in base64 - Signature: Cryptographic authentication -} -``` - -### Input Size Calculation - -**Fundamental principle**: `inputSize = sizeof(C++_input_struct)` - -Understanding how to calculate the input size is crucial for creating valid transactions. The input size must exactly match the size of the C++ struct that the smart contract expects to receive. This isn't just a suggestion - it's a hard requirement for transaction validity. - -```cpp -// Example: AddToBidOrder_input structure from QX contract -struct AddToBidOrder_input { - id issuer; // 32 bytes (256-bit identifier) - uint64 assetName; // 8 bytes (64-bit integer) - sint64 price; // 8 bytes (signed 64-bit integer) - sint64 numberOfShares; // 8 bytes (signed 64-bit integer) -}; -// Total size: 32 + 8 + 8 + 8 = 56 bytes -``` - -**How to calculate correctly**: - -- **Field-by-field analysis**: Examine each field in the struct and its data type size -- **Memory alignment**: C++ automatically aligns struct members to optimize memory access, which can add padding bytes -- **Platform considerations**: Most Qubic contracts assume 64-bit architecture with standard type sizes -- **Documentation verification**: Always cross-reference with official documentation or test with known working examples - -**Common mistakes**: - -- **Ignoring padding**: Assuming struct size is just the sum of field sizes without considering alignment -- **Wrong data types**: Confusing similar types like `uint32` vs `uint64` or `sint64` vs `uint64` -- **String handling**: Misunderstanding how text data is encoded within fixed-size fields - -### Payload Serialization Process - -**Data pipeline**: - -``` -Input data → C++ Struct → Raw bytes → Base64 encoding → Payload -``` - -![Data pipeline](../../static/img/data_pipeline.png) - -**Conceptual steps**: - -1. **Data mapping**: Convert input parameters to struct format -2. **Binary serialization**: Respect exact C++ struct memory layout -3. **Encoding**: Convert bytes to base64 for HTTP/JSON transport -4. **Validation**: Verify size matches inputSize - -### Execution Flow - -#### For Procedures (Transactions) - -``` -pseudocode: -1. get_current_tick() -2. calculate_target_tick(current_tick + offset) -3. build_payload(input_data) -4. create_transaction(destination, type, size, payload, target_tick) -5. sign_transaction(private_key) -6. broadcast_transaction(signed_transaction) -7. verify_inclusion_in_tick(target_tick, tx_id) -8. validate_expected_effects(state_changes) -``` - -#### For Functions (Queries) - -``` -pseudocode: -1. build_payload(input_data) -2. calculate_input_size(struct_definition) -3. send_rpc_query(contractIndex, inputType, payload) -4. decode_base64_response(result) -5. parse_output_struct(response_bytes) -``` - -## 6. Complete Transaction Example - -This section demonstrates how to construct payloads for QX smart contract interactions. QX is Qubic's decentralized exchange (contract index 1), and these examples show the most common operations developers need to implement. - -### Understanding QX Operations - -#### QX Contract Identification - -Before constructing any QX transaction, you need to understand the identification system. Each contract has a numerical index, which deterministically derives into its public key (the contract address). In practice, the index serves as a shorter notation, while the contract address is used as the destination in transactions and for querySmartContract calls. - -```javascript -const QX_CONTRACT = { - index: 1, // Used for RPC queries - address: "BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARMID", // Used for transactions -}; -``` - -#### Procedure Numbers - -QX procedures have specific numeric identifiers that you must use as inputType. These numbers correspond to the registration order in the QX contract's REGISTER_USER_FUNCTIONS_AND_PROCEDURES() section. - -```javascript -const QX_PROCEDURES = { - ISSUE_ASSET: 1, - TRANSFER_SHARES: 2, - ADD_TO_ASK_ORDER: 5, // Sell order - ADD_TO_BID_ORDER: 6, // Buy order - REMOVE_FROM_ASK_ORDER: 7, - REMOVE_FROM_BID_ORDER: 8, -}; -``` - -### Example: QX Bid Order - -#### Conceptual Understanding - -A bid order is how you buy assets on QX. When you place a bid order, you're saying "I want to buy X amount of asset Y at price Z". The QX contract will: - -1. Lock your QU in escrow (price × numberOfShares) -2. Try to match your bid with existing ask orders -3. If no match, keep your order in the order book until someone sells at your price - -#### C++ Structure Analysis - -Before constructing the payload, examine the C++ struct from the QX contract. This defines exactly what data the contract expects and in what order: - -```cpp -struct AddToBidOrder_input { - id issuer; // 32 bytes (PublicKey of asset creator) - uint64 assetName; // 8 bytes (asset name as number) - sint64 price; // 8 bytes (price per share in QU) - sint64 numberOfShares; // 8 bytes (how many shares to buy) -}; -// Total size: 32 + 8 + 8 + 8 = 56 bytes -``` - -#### Step-by-Step Implementation - -**NOTE**: This is a javascript example. It's only one of many ways how to do API calls. - -- **Step 1: Import Required Libraries** - -First, we need to import all the required types from the Qubic TypeScript library. These provide the essential building blocks for constructing transactions: - -```javascript -import { QubicTransaction } from "@qubic-lib/qubic-ts-library/dist/qubic-types/QubicTransaction"; -import { PublicKey } from "@qubic-lib/qubic-ts-library/dist/qubic-types/PublicKey"; -import { Long } from "@qubic-lib/qubic-ts-library/dist/qubic-types/Long"; -import { DynamicPayload } from "@qubic-lib/qubic-ts-library/dist/qubic-types/DynamicPayload"; -import { QubicPackageBuilder } from "@qubic-lib/qubic-ts-library/dist/QubicPackageBuilder"; -``` - -- **Step 2: Payload Construction Function** - -Now we'll build the payload construction function piece by piece. - -**Function signature and size calculation:** -We start by defining the function and calculating the exact payload size that matches the C++ struct: - -```javascript -function createQXBidOrderPayload({ issuer, assetName, price, numberOfShares }) { - // Total payload size: - // id issuer = 32 bytes - // uint64 assetName = 8 bytes - // sint64 price = 8 bytes - // sint64 numberOfShares = 8 bytes - // Total = 56 bytes - const packageSize = 56; - - const builder = new QubicPackageBuilder(packageSize); -``` - -**Adding the issuer field:** -The first field is the issuer ID, which is a 32-byte PublicKey representing who created the asset: - -```javascript -// 1. issuer (id = PublicKey, 32 bytes) -builder.add(new PublicKey(issuer)); -``` - -**Asset name conversion and addition:** -The asset name needs to be converted from a string to a uint64 number. We handle both string and numeric inputs: - -```javascript -// 2. assetName (uint64, 8 bytes) -// Convert string to number if necessary -let assetNameValue; -if (typeof assetName === "string") { - // Convert string to uint64 (example: "CFB" -> number) - const encoder = new TextEncoder(); - const bytes = encoder.encode(assetName.padEnd(8, "\0")); - const view = new DataView(bytes.buffer); - assetNameValue = view.getBigUint64(0, true); // little endian -} else { - assetNameValue = BigInt(assetName); -} -builder.add(new Long(assetNameValue)); -``` - -**Adding price and share count:** -The final two fields are straightforward numeric values, both converted to BigInt to handle large numbers safely: - -```javascript -// 3. price (sint64, 8 bytes) -builder.add(new Long(BigInt(price))); - -// 4. numberOfShares (sint64, 8 bytes) -builder.add(new Long(BigInt(numberOfShares))); -``` - -**Creating the final payload:** -Finally, we package all the data into a DynamicPayload object that can be used in the transaction: - -```javascript - const payload = new DynamicPayload(packageSize); - payload.setPayload(builder.getData()); - - return payload; -} -``` - -- **Step 3: Complete Transaction Function** - -Now we'll build the main transaction function that puts everything together. - -**Function signature and payload creation:** -We start by accepting all the necessary parameters and creating the payload using our helper function: - -```javascript -export async function runQXBidOrder({ - rpc, - seed, - sourcePublicKey, - contractAddress, - issuer, - assetName, - price, - numberOfShares, - targetTick, -}) { - // Create payload for AddToBidOrder (inputType 6) - const payload = createQXBidOrderPayload({ - issuer, - assetName, - price, - numberOfShares, - }); - - // Calculate total amount (price * numberOfShares) - const totalAmount = price * numberOfShares; -``` - -**Building the transaction:** -Next, we construct the QubicTransaction object with all the required fields. The amount represents QU that will be locked in escrow: - -```javascript -// Create transaction -const transaction = new QubicTransaction() - .setSourcePublicKey(new PublicKey(sourcePublicKey)) - .setDestinationPublicKey(new PublicKey(contractAddress)) - .setTick(targetTick) - .setInputType(6) // AddToBidOrder - .setInputSize(payload.getPackageSize()) - .setAmount(new Long(BigInt(totalAmount))) - .setPayload(payload); -``` - -**Signing and broadcasting:** -Finally, we sign the transaction with the private key (derived from seed) and broadcast it to the network: - -```javascript -// Sign transaction -await transaction.build(seed); - -// Send transaction -const result = await broadcastTransaction(transaction, rpc); -``` - -**Return structured response:** -The function returns detailed information about both the transaction and the broadcast result: - -```javascript - return { - transaction: { - sourcePublicKey, - destinationPublicKey: contractAddress, - tick: targetTick, - inputType: 6, - amount: totalAmount, - inputSize: payload.getPackageSize(), - }, - payload: { - issuer, - assetName, - price, - numberOfShares, - }, - broadcast: result, - }; -} -``` - -- **Step 4: Broadcast Helper Function** - -The broadcast function handles the actual network communication. - -**Transaction encoding:** -First, we encode the signed transaction to base64 format for HTTP transmission: - -```javascript -async function broadcastTransaction(transaction, rpcUrl) { - const encodedTransaction = transaction.encodeTransactionToBase64( - transaction.getPackageData() - ); - - const request = { - encodedTransaction: encodedTransaction, - }; -``` - -**Network request:** -Then we send the encoded transaction to the Qubic RPC endpoint: - -```javascript -const response = await fetch(`${rpcUrl}v1/broadcast-transaction`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(request), -}); -``` - -**Error handling and response:** -Finally, we check for HTTP errors and return the JSON response: - -```javascript - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return await response.json(); -} -``` - -#### Usage Example - -Here's how to use the complete implementation with real working values: - -```javascript -// Buy 100 CFB tokens at 4 QU each - using real working configuration -const result = await runQXBidOrder({ - rpc: "https://testnet-rpc.qubic.org/", - seed: "fwqatwliqyszxivzgtyyfllymopjimkyoreolgyflsnfpcytkhagqii", - sourcePublicKey: "YOUR_PUBLIC_KEY_HERE", - contractAddress: - "BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARMID", - issuer: "QXMRTKAIIGLUREPIQPCMHCKWSIPDTUYFCFNYXQLTECSUJVYEMMDELBMDOEYB", - assetName: "CFB", - price: 4, - numberOfShares: 100, - targetTick: currentTick + 30, -}); -``` - -This will lock 400 QU in escrow and create a buy order for CFB tokens. - -### Complete Functions Reference - -Here are the complete functions assembled from all the explained fragments: - -#### createQXBidOrderPayload (Complete) - -```javascript -function createQXBidOrderPayload({ issuer, assetName, price, numberOfShares }) { - // Total payload size: - // id issuer = 32 bytes - // uint64 assetName = 8 bytes - // sint64 price = 8 bytes - // sint64 numberOfShares = 8 bytes - // Total = 56 bytes - const packageSize = 56; - - const builder = new QubicPackageBuilder(packageSize); - - // 1. issuer (id = PublicKey, 32 bytes) - builder.add(new PublicKey(issuer)); - - // 2. assetName (uint64, 8 bytes) - // Convert string to number if necessary - let assetNameValue; - if (typeof assetName === "string") { - // Convert string to uint64 (example: "CFB" -> number) - const encoder = new TextEncoder(); - const bytes = encoder.encode(assetName.padEnd(8, "\0")); - const view = new DataView(bytes.buffer); - assetNameValue = view.getBigUint64(0, true); // little endian - } else { - assetNameValue = BigInt(assetName); - } - builder.add(new Long(assetNameValue)); - - // 3. price (sint64, 8 bytes) - builder.add(new Long(BigInt(price))); - - // 4. numberOfShares (sint64, 8 bytes) - builder.add(new Long(BigInt(numberOfShares))); - - const payload = new DynamicPayload(packageSize); - payload.setPayload(builder.getData()); - - return payload; -} -``` - -#### runQXBidOrder (Complete) - -```javascript -export async function runQXBidOrder({ - rpc, - seed, - sourcePublicKey, - contractAddress, - issuer, - assetName, - price, - numberOfShares, - targetTick, -}) { - // Create payload for AddToBidOrder (inputType 6) - const payload = createQXBidOrderPayload({ - issuer, - assetName, - price, - numberOfShares, - }); - - // Calculate total amount (price * numberOfShares) - const totalAmount = price * numberOfShares; - - // Create transaction - const transaction = new QubicTransaction() - .setSourcePublicKey(new PublicKey(sourcePublicKey)) - .setDestinationPublicKey(new PublicKey(contractAddress)) - .setTick(targetTick) - .setInputType(6) // AddToBidOrder - .setInputSize(payload.getPackageSize()) - .setAmount(new Long(BigInt(totalAmount))) - .setPayload(payload); - - // Sign transaction - await transaction.build(seed); - - // Send transaction - const result = await broadcastTransaction(transaction, rpc); - - return { - transaction: { - sourcePublicKey, - destinationPublicKey: contractAddress, - tick: targetTick, - inputType: 6, - amount: totalAmount, - inputSize: payload.getPackageSize(), - }, - payload: { - issuer, - assetName, - price, - numberOfShares, - }, - broadcast: result, - }; -} -``` - -#### broadcastTransaction (Complete) - -```javascript -async function broadcastTransaction(transaction, rpcUrl) { - const encodedTransaction = transaction.encodeTransactionToBase64( - transaction.getPackageData() - ); - - const request = { - encodedTransaction: encodedTransaction, - }; - - const response = await fetch(`${rpcUrl}v1/broadcast-transaction`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(request), - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return await response.json(); -} -``` - -### Common Pitfalls and Debugging - -#### Payload Size Errors - -**Problem**: Transaction rejected with "invalid input size" - -**Solution**: Double-check your C++ struct size calculation: - -- `AddToBidOrder`: exactly 56 bytes -- Use `payload.getPackageSize()` to verify - -#### Insufficient QU Balance - -**Problem**: Transaction fails with insufficient balance - -**Solution**: For bid orders, you need `price × numberOfShares` QU available plus any transaction fees. - -#### Wrong Tick Timing - -**Problem**: Transaction never executes - -**Solution**: Use adequate tick offset (30+ for smart contracts) and verify current tick before sending. - - -## 7. Testing Custom Smart Contracts - -When interacting with custom smart contracts: - -- For custom contracts not yet deployed on mainnet, initial testing should be done through a testnet node. Refer to the [Testnet Resources](../developers/testnet-resources.md) for information on testnet nodes and faucets. -- After verifying your contract works correctly, you can integrate it with frontend applications following the patterns in the example applications. - -## 8. Best Practices - -1. **Error Handling**: Always implement robust error handling for RPC calls -2. **Security**: Never expose private keys in client-side code; use proper wallet integration - -## 9. Further Reading - -For additional context and deeper understanding of the Qubic ecosystem, explore: - -- [Smart Contract Architecture](../developers/smart-contract-architecture.md) – Full details on how contracts are structured and registered in Qubic, their source code, and the identification system. -- [Ticks and Concurrency](../developers/ticks-and-concurrency.md) – Explanation of the “tick” paradigm, transaction scheduling, and per-identity concurrency limits. - - diff --git a/docs/api/wallet-integrations.md b/docs/api/wallet-integrations.md deleted file mode 100644 index e0c343e..0000000 --- a/docs/api/wallet-integrations.md +++ /dev/null @@ -1,17 +0,0 @@ -# Wallet Integrations - -## Official WalletConnect Integration - -For detailed information on integrating the Qubic Wallet with your dApp, refer to the [official WalletConnect documentation](https://github.com/qubic/wallet-app/blob/main/walletconnect.md). - -## MetaMask Snap Integration - -For integrating with MetaMask, check out the [Qubic MetaMask Snap](https://github.com/qubic/qubic-mm-snap) developed by Monoape. You can also find the snap [here](https://snaps.metamask.io/snap/npm/qubic-lib/qubic-mm-snap/). - -## Example Implementations - -You can find example implementations for WalletConnect, MetaMask Snap, Vault, and Seed integrations on the [HM25 frontend](https://github.com/qubic/hm25-frontend). These examples demonstrate how each wallet type can connect and interact with Qubic smart contracts. - -## Other Integrations - -While there are other integrations available, such as Vault and Seed, we do not recommend using them for production applications. \ No newline at end of file diff --git a/docs/computors/backup-restore.md b/docs/computors/backup-restore.md deleted file mode 100644 index 1c5bf64..0000000 --- a/docs/computors/backup-restore.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Backup & Restore -date: 2023-08-13T19:57:52.107Z ---- -# Backup & Restore \ No newline at end of file diff --git a/docs/computors/bm.md b/docs/computors/bm.md deleted file mode 100644 index 7f819cb..0000000 --- a/docs/computors/bm.md +++ /dev/null @@ -1,7 +0,0 @@ -# Bare Metal (BM) - -:::info - -This part of the documentation is just being drafted and should be ready in the next couple of weeks. In the meanwhile check [https://github.com/qubic-li/qubic](https://github.com/qubic-li/qubic) if you'd like to try your Bare Metal (BM) setup or ask in the Discord for help. - -::: \ No newline at end of file diff --git a/docs/computors/challenges.md b/docs/computors/challenges.md deleted file mode 100644 index 2bdc4aa..0000000 --- a/docs/computors/challenges.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_label: Challenges -title: "Running a Computor in the Qubic Network: The Challenges" -date: 2023-08-13T22:19:54.311Z ---- - -# Running a Computor in the Qubic Network: The Challenges - -The Qubic network, with its revolutionary approach to decentralized computing and smart contracts, has introduced a unique role known as the "Computor." While this node type plays a pivotal role in executing tasks, maintaining the tokenomic balance, and making crucial network decisions, operating a Computor is not straightforward. Here are some reasons why running a Computor can be intricate: - -1. **Bare Metal Requirement**: Unlike many other systems that allow for virtualized or containerized environments, running a Computor demands operations on bare metal. This means potential operators need direct control over the UEFI (Unified Extensible Firmware Interface), which can be technically challenging and demands a solid understanding of computer hardware. - -2. **Continuous Compilation**: Computor operators need to compile qubic.cpp at least once every epoch. Regular compilation can be cumbersome and requires consistent monitoring and technical know-how. - -3. **Persistent Updates**: The dynamic nature of the Qubic network means updates are frequent. Computor operators need to stay on their toes to perform all updates as and when they roll out to ensure their node remains functional and compatible. - -4. **Redundancy is Key**: To guarantee uninterrupted service and revenue, Computor operators must have backup systems in place (MAIN/AUX). This is to ensure the node continues ticking even if the primary system encounters issues like freezes. - -5. **Competitive Nature**: Holding onto a Computor's spot is no easy task. With a maximum of 676 Computor spots available, operators need to consistently outperform candidates eyeing their position. This involves maintaining a high score, which reflects the Computor's efficiency and contribution to the network. - -6. **Evolution and Adaptability**: As the Qubic network continues to evolve, so will the demands and challenges associated with running a Computor. Adapting to these changes quickly and efficiently will be crucial for sustained operation. - -In summary, while being a Computor in the Qubic network comes with its set of advantages and rewards, it also demands technical expertise, vigilance, and adaptability. Those looking to operate a Computor should be prepared for the challenges and responsibilities that come with this crucial role. \ No newline at end of file diff --git a/docs/computors/commands.md b/docs/computors/commands.md deleted file mode 100644 index 2c12a02..0000000 --- a/docs/computors/commands.md +++ /dev/null @@ -1,68 +0,0 @@ -# Commands (Draft) - -## Key Overview within UEFI Shell - -| Key | Function | -|-----|------------------| -| F1 | Show help | -| F2 | Prints current tick, transactions and faulty IDs data | -| F3 | Shows mining stats, calculates who would be computor as of right now and writes the system file | -| F4 | Disconnects all peers (keep pressed) | -| F5 | "Force next Tick"; Your computor issues empty votes for current tick. (DANGER ZONE) -| F6 | Save Spectrum, Universe and Computor files | -| F10 | Resends Computor Votes for current tick (DANGER ZONE) | -| F11 | Resets test flags | -| F12 | Switching from MAIN to AUX and vice versa (toggle) | -| PAUSE | Stops log output | -| ESC | Graceful shutdown | - - - -Keys **not** used anymore -- F7: Toggles logging of network stats -- F8: Toggles logging of tick/scores stats -- F9: Toggles logging of tick transactions/tick leader - -
- Using Scancodes -
-

- In general computing, Scancodes are the unique codes that are sent by a keyboard to a computer's operating system (or, in the Qubic case, the UEFI system) to denote each individual key press and release. When a key is pressed, the keyboard sends a "Make" scancode to the system, and when it is released, it sends a "Break" scancode. -

-

- Scancodes are used to map the physical keys on a keyboard to characters or functions on the computer. This allows for flexibility in keyboard layout and design, as the scancodes can be mapped differently for different keyboard layouts (like QWERTY vs AZERTY) or for different languages. -

-

Relevant Scancodes

- - - - - - - - - - - - - - - - - - - -
0x0BF1
0x0CF2
0x0DF3
0x0EF4
0x10F6
0x17ESC
-

Note:EFI scancodes are different from Linux/UNIX ones.

-

Reference: https://uefi.org/specs/UEFI/2.10/Apx_B_Console.html

-
-
- - -## F1 - -## F2 -The F2 shows the relevant info as `X/Y/Z solutions.` where Z is total number of solutions, Y is number of published solutions and X is number of recorded into the blockchain solutions. - -## F5 -The F5 command helps maintain synchronization in the Qubic network. If not all 676 Computors are online, votes about the status of the next tick can become split, leading to a consensus issue. Pressing F5 forces agreement that the next tick is empty. However, it carries a risk: if others reach a different consensus after you've hit F5, your node could become misaligned. diff --git a/docs/computors/configuration.md b/docs/computors/configuration.md deleted file mode 100644 index 42b6b36..0000000 --- a/docs/computors/configuration.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Configuration -date: 2023-08-13T19:58:21.745Z ---- - -# Configuration - -:::info - -This part of the documentation is just being drafted and should be ready in the next couple of weeks. - -::: \ No newline at end of file diff --git a/docs/computors/installation.md b/docs/computors/installation.md deleted file mode 100644 index fa933ad..0000000 --- a/docs/computors/installation.md +++ /dev/null @@ -1,8 +0,0 @@ -# Installation - -:::info - -This part of the documentation is just being drafted and should be ready in the next couple of weeks. In the meanwhile check [https://github.com/qubic-li/qubic](https://github.com/qubic-li/qubic) if you'd like to try your Bare Metal (BM) setup or ask in the Discord for help. - -::: - diff --git a/docs/computors/logging.md b/docs/computors/logging.md deleted file mode 100644 index 11e96cb..0000000 --- a/docs/computors/logging.md +++ /dev/null @@ -1,75 +0,0 @@ -# Logging (Draft) - -## Startup Information - -
-230726121457 A- 000:000(000).0.0 Qubic 1.156.0 is launched.{'\n'}
-230726121457 A- 000:000(000).0.0 Theoretical TSC frequency = n/a.{'\n'}
-230726121457 A- 000:000(000).0.0 Practical TSC frequency = 4'192'091'411 Hz.{'\n'}
-230726121457 A- 000:000(000).0.0 Volume #0 (): 13'946'601'472 / 21'464'301'568 free bytes | Read-Write.{'\n'}
-230726121457 A- 000:000(000).7100000.67 1'073'741'824 bytes of the spectrum data are hashed (3'765'499 microseconds).{'\n'}
-230726121457 A- 000:000(000).7100000.67 56'860'000'000'000 qus in 2'722 entities (digest = rcughairuagqwfyzgqfubfqrzvceutzjufgcdveznakqwvumjczgehdboupo).{'\n'}
-230726121457 A- 000:000(000).7100000.67 Universe digest = tqoshbcixaychhxgzykrrdnhdoragtqjjrrgwvwadfghzsgyfkdtdnzfwjnk.{'\n'}
-230726121457 A- 000:000(000).7100000.67 Computer digest = enqmdlcdojeyxbonwdxlkzzchsubzivlqrkbnoxbwbkkcrbnbvrjbopfkrka.{'\n'}
-230726121457 A- 000:000(000).7100000.67 14/14 processors are being used.{'\n'}
-230726121457 A- 000:000(000).7100000.67 Local address = 123.100.321.100:21841.{'\n'}
-230726121457 A- 000:000(000).7100000.67 Routes:{'\n'}
-230726121457 A- 000:000(000).7100000.67 Address = 123.100.321.50 | mask = 255.255.255.192 | gateway = 0.0.0.0.{'\n'}
-230726121457 A- 000:000(000).7100000.67 Address = 0.0.0.0 | mask = 0.0.0.0 | gateway = 123.100.321.55.{'\n'}
-230726121511 A- 000:000(000).7100000.67 [+0 -0 *0 /0] 0|0 0/22 Dynamic (+0 -0 ...0).{'\n'}
-230726121511 A- 000:000(000).7100000.67 11 | Tick = 0.0 s | Indices = ?.{'\n'}
-230726121511 A- 000:000(000).7100000.67 0/0 next tick transactions are known. 0 pending transactions.{'\n'}
-230726121511 A- 000:000(000).7100000.67 0 (0) :: 0 (0) | Average processing time = ? microseconds.{'\n'}
-230726121511 A- 000:000(000).7100000.67 Ticker loop duration = 0 microseconds. Latest created tick = 0.{'\n'}
-230726121512 A- 000:000(000).7100000.67 [+31 -0 *6 /44] 70|14 11/28 Dynamic (+2'108 -2'336 ...0).{'\n'}
-230726121512 A- 000:000(000).7100000.67 11 | Tick = 0.0 s | Indices = ?.{'\n'}
-
- -- Current protocol version - -## Votes - -
-230726122051 B- 000:000(000).7100027.67 0/0 next tick transactions are known. 59 pending transactions.{'\n'}
-
- -- Aligned Votes (votes on the left): These computors have the same data for the tick and are potentially aligned with tick leaders view. To proceed to next tick quorum (451+) must be aligned. -- Misaligned votes (votes on the right): computors can have different view, meaning they are misaligned if they do not agree with majority. -- Computors ahead of your computor - - -## Connections -
-230726122052 B- 000:000(000).7100027.67 [+26 -0 *129 /38] 52|12 30/39 Dynamic (+44'252 -145'608 ...129'180).{'\n'}
-230726122052 B- 000:000(000).7100027.67 11 | Tick = 7.4 s | Indices = AX[in 24 ticks]+BS[45]+DE[83].{'\n'}
-
- -- Not connected slots -- Connected slots - -Default config is 64 connections overall (60 incoming, 4 outgoing). - -## Tick durations -
-230726122051 B- 000:000(000).7100027.67 0 (0) :: 0 (0) | Average processing time = 87 microseconds.{'\n'}
-230726122051 B- 000:000(000).7100027.67 Ticker loop duration = 4 microseconds. Latest created tick = 7'100'026.{'\n'}
-
- -## To be continued... - -
-230726122059 B- 000:000(000).7100028.67 0 (0) :: 0 (0) | Average processing time = 85 microseconds.{'\n'}
-230726122059 B- 000:000(000).7100028.67 Ticker loop duration = 4 microseconds. Latest created tick = 7'100'027.{'\n'}
-230726122100 D4'202'496+ 359:000(000).7100028.67 [+371 -0 *1'071 /3'443] 51|33 30/39 Dynamic (+491'316 -644'428 ...398'808).{'\n'}
-230726122100 D4'202'496+ 359:000(000).7100028.67 11 | Tick = 7.4 s | Indices = AX[in 23 ticks]+BS[44]+DE[82].{'\n'}
-230726122100 D4'202'496+ 359:000(000).7100028.67 0/0 next tick transactions are known. 61 pending transactions.{'\n'}
-230726122100 D4'202'496+ 359:000(000).7100028.67 0 (0) :: 0 (0) | Average processing time = 84 microseconds.{'\n'}
-230726122100 D4'202'496+ 359:000(000).7100028.67 Ticker loop duration = 9 microseconds. Latest created tick = 7'100'028.{'\n'}
-230726122101 B- 000:000(000).7100029.67 [+160 -0 *1'034 /903] 50|34 30/39 Dynamic (+392'912 -480'164 ...216'164).{'\n'}
-
- -
-230726122217 C- 000:000(000).7100042.67 [+485 -0 *2'545 /4'519] 46|38 30/38 Dynamic (+1'033'796 -1'309'196 ...246'604).{'\n'}
-230726122217 C- 000:000(000).7100042.67 11 | Tick = 5.8 s | Indices = AX[in 9 ticks].{'\n'}
-230726122217 C- 000:000(000).7100042.67 ?/? next tick transactions are known. (23.07.26 12:22:13.) 38 pending transactions.{'\n'}
-
\ No newline at end of file diff --git a/docs/computors/prerequisites.md b/docs/computors/prerequisites.md deleted file mode 100644 index 536fa01..0000000 --- a/docs/computors/prerequisites.md +++ /dev/null @@ -1,35 +0,0 @@ -# Prerequisites - -Becoming a Computor on the Qubic platform involves a range of prerequisites related to your hardware, software, and networking capabilities. Meeting these requirements ensures that you can successfully perform the necessary tasks within the network, including executing smart contracts and maintaining the Spectrum. - -# Hardware Requirements: - -* Processor (CPU): The processor's speed directly impacts the computational power of a Computor. More powerful processors can handle complex calculations more efficiently. Specific CPU requirements are: - - * CPU Frequency: **3+ GHz** - - Recommended CPU (as of Q4 2024): **AMD Epyc 24core+** - -* Memory (RAM): Adequate memory is crucial for smoothly running operations. More RAM allows a Computor to process larger amounts of data simultaneously. Specific RAM requirements are: - - * RAM Size: **1 TB** (will rise to 2TB in Q1 2025) - -* Storage: Storage requirements relate to the disk space needed to store the network's Spectrum, smart contracts, and other necessary data. Basically, you need a bit more space on the disk than you need RAM in order to write all data from the RAM back to the disk at the end of each epoch. Recommended storage requirements are: - - * Storage Size: **256 GB NVMe** - -# Software Requirements: - -* Operating System: Qubic runs on bare metal and in UEFI mode, which significantly improves both efficiency and security. The system does not run on a conventional OS, which reduces overhead and makes the most of your hardware. - -* Programming Skills: Computors need to be capable of handling smart contracts written in C++. Prior knowledge and experience in C++ are beneficial. - -# Network Requirements: - -Internet Connection: An efficient and reliable internet connection is essential for participating in the Qubic network. This allows for swift interaction with other Computors and timely execution of tasks. Specific network speed requirements are: - -* Network Speed: **1 Gbit/s ** (download/upload) - -* Network Compatibility: Your system must be compatible with the Qubic network and meet certain technical standards. This ensures that your system can communicate effectively with other nodes within the network. Most important, you need a port forwarding in your router to **port 21841** of your Computor node. - -Please note that these requirements may vary based on the needs and updates of the Qubic platform. Meeting these prerequisites will help you perform effectively as a Computor within the network. diff --git a/docs/computors/upgrading.md b/docs/computors/upgrading.md deleted file mode 100644 index 3fd84ff..0000000 --- a/docs/computors/upgrading.md +++ /dev/null @@ -1 +0,0 @@ -# Upgrading \ No newline at end of file diff --git a/docs/computors/vm.md b/docs/computors/vm.md deleted file mode 100644 index 55c8081..0000000 --- a/docs/computors/vm.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Virtual Machine -date: 2023-08-13T19:58:21.745Z ---- - -# Virtual Machine (VM) - -:::info - -This part of the documentation is just being drafted and should be ready in the next couple of weeks. In the meanwhile check [https://github.com/digitw1n/run-qubic-on-qemu](https://github.com/digitw1n/run-qubic-on-qemu) if you'd like to try your Virtual Machine (VM) setup or ask in the Discord for help. - -::: \ No newline at end of file diff --git a/docs/developers/client-qubicj-shell.md b/docs/developers/client-qubicj-shell.md deleted file mode 100644 index 5a15d12..0000000 --- a/docs/developers/client-qubicj-shell.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Qubic Java Shell ---- - -# Qubic Java Shell (qubicj-shell) - -The Qubic Java Shell (`qubicj-shell` - a terminal and command line client and wallet) is an intermediate tool that allows - -* to communicate with the Qubic Core nodes and -* provides wallet functionality. - -It uses and is part of the Qubic Java Library. You can get the code and the documentation here: -[Qubic Java repository](https://gitlab.com/qubic-contributions/qubicj) / -[QubicJ Shell submodule](https://gitlab.com/qubic-contributions/qubicj/-/blob/main/qubicj-shell). - -The latest `qubicj-shell` release is always available here: -[Release Page](https://gitlab.com/qubic-contributions/qubicj/-/releases/permalink/latest). - -Qubicj is a community project. \ No newline at end of file diff --git a/docs/developers/contribute.md b/docs/developers/contribute.md deleted file mode 100644 index 441f649..0000000 --- a/docs/developers/contribute.md +++ /dev/null @@ -1,25 +0,0 @@ -# Contribute to Qubic - -Qubic is more than just a decentralized network; it is a community-driven ecosystem, which thrives on the contributions of its diverse and dedicated members. As we embark on this journey of building an equitable, decentralized future, we're calling upon the talents and creativity of developers and marketers like you. - -## Why do we need you? - -Innovative and efficient development is at the heart of Qubic's technology. It's the developers who breathe life into our ecosystem by building robust applications, crafting smart contracts and enhancing the core functionality of the network. - -Meanwhile, skilled marketers help us convey the potential and value of Qubic to a wider audience, ensuring that our community continues to grow and that the network's benefits reach as many people as possible. - -Take a look at our current community bounties and start contributing your unique skills to this innovative ecosystem. Remember, when you deliver quality work, the quorum can vote on the final proposal and release the QUs you've earned. This ensures that your hard work and dedication are recognized and rewarded. - -Whether you're coding the next big smart contract or helping to spread the word about Qubic, your contributions shape our collective future. Let's make a difference together in the Qubic ecosystem. - -## Contributing to Documentation - -If you're a developer interested in contributing to the Qubic documentation, you can find the repository and instructions on how to do it here: https://github.com/qubic/docs - -## How we fund these projects - -The Computor Controlled Fund (CCF) is a communal resource designed to support and facilitate the growth of the Qubic ecosystem. The fund allocates resources to approved projects that aim to expand the capabilities, reach, or efficiency of the Qubic network. Any community member can propose a project for funding and the projects are chosen based on the votes of the community members (see how [Proposal](/learn/proposals) work). The idea behind the CCF is to enable quick definition of project proposals and release of budgets by the community. - -:::info -Remember, the CCF belongs to all of us. Let's work together to continue developing and growing the Qubic ecosystem! -::: \ No newline at end of file diff --git a/docs/developers/dev-kit.md b/docs/developers/dev-kit.md deleted file mode 100644 index f5e5164..0000000 --- a/docs/developers/dev-kit.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Qubic Dev Kit ---- - -# Qubic Dev Kit - -The [Qubic Dev Kit](https://github.com/qubic/qubic-dev-kit) is your go-to tool for setting up a Qubic testnet node and running the HM25 Smart Contract demo for Hackathon Madrid 2025. It streamlines the process for developers looking to create and test their own smart contracts. - -## Important Notes - -- **Dev Kit Requirements**: Essential for developing and testing smart contracts, simulating the entire Qubic blockchain in a single environment. If you only need to interact with existing contracts, consider using the RPC API and wallet solutions instead. - -- **Support and Resources**: For any questions or if you need a server setup, please reach out in the #dev channel on our Discord. We may be able to provide server resources and assistance. - -## Overview - -The Dev Kit manages: -- Complete Qubic development environment setup -- EFI file building -- Testnet node deployment with your smart contract -- RPC access for testing - -## Development Environment Setup - -To set up the environment for developing QUBIC smart contracts, you need two main components: `Visual Studio` and the [`Qubic Core`](https://github.com/qubic/core) repository. - -:::info -We recommend using [Qubic Core Lite](smart-contracts/resources/qubic-lite-core.md) repo instead of the official Qubic Core so you can build and run the local testnet with your smart contract **directly in OS** without using a VM. -::: - -### 1. Install Visual Studio - -1. Go to [https://visualstudio.microsoft.com/](https://visualstudio.microsoft.com/) and download Visual Studio -2. Open the Visual Studio Installer and select the `Desktop development with C++` workload -3. Complete the installation process - -### 2. Clone and Setup the Repository - -1. Choose `Clone a repository` in Visual Studio -2. Paste the URL: `https://github.com/qubic/core.git` -3. Once cloned, open `Qubic.sln` from the solution explorer -4. Test your setup by right-clicking the `test` project and selecting `Build` - -If you see successful build logs, congratulations! Your development environment is ready. - -## Getting Started with Dev Kit - -For complete documentation and setup instructions, check out the Dev Kit on GitHub: [Qubic Dev Kit](https://github.com/qubic/qubic-dev-kit) - -The Dev Kit provides a streamlined workflow for: -- Setting up a complete development environment -- Building and testing smart contracts locally -- Deploying to testnet for integration testing - -## Key Features - -- **Optimized for Demo Branch**: The Dev Kit works with the `madrid-2025` branch of the Qubic core repository -- **Built-in Smart Contract Template**: Includes the HM25 template smart contract with Echo and Burn functions -- **One-Command Deployment**: Deploy a complete node with your smart contract using a single command -- **Local Testing Environment**: Run a complete Qubic testnet locally for development and testing - -## Next Steps - -After setting up your environment: - -1. **Learn Smart Contract Structure**: Check out our [Smart Contract Overview](smart-contracts/overview.md) -2. **Follow the Getting Started Guide**: Complete the [Getting Started Tutorial](smart-contracts/getting-started/setup-environment.md) -3. **Understand QPI**: Read about the [Qubic Programming Interface](qpi.md) -4. **Explore Examples**: Look at [Smart Contract Examples](smart-contracts/sc-by-examples/assets-and-shares.md) - diff --git a/docs/developers/empty.md b/docs/developers/empty.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developers/frontend-integration.md b/docs/developers/frontend-integration.md deleted file mode 100644 index fa74ca9..0000000 --- a/docs/developers/frontend-integration.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Frontend Integration ---- - -# Building Frontend Applications for Qubic - -This guide provides an overview of how to build frontend applications that interact with Qubic smart contracts, with links to complete reference implementations. - -## Key Components of a Qubic dApp - -A typical Qubic dApp consists of: -1. A frontend user interface -2. Wallet integration for transaction signing -3. RPC communication with Qubic nodes -4. Smart contract interaction logic - -## Complete Frontend Example - -The most comprehensive example of a Qubic frontend application can be found in the [HM25 Frontend Example repository](https://github.com/icyblob/hm25-frontend). This repository demonstrates: - -- Complete wallet integrations (MetaMask Snap, WalletConnect, seed phrase, Vault file) -- Smart contract interaction patterns -- Transaction signing and broadcasting -- Real-time data fetching from Qubic nodes - -We highly recommend exploring this codebase as a starting point for your application. - -## Wallet Integration - -Qubic supports multiple wallet integration options, all demonstrated in the [HM25 Frontend Example](https://github.com/icyblob/hm25-frontend): - -- **MetaMask Snap integration** - For users who already use MetaMask -- **WalletConnect support** - For interoperability with compatible wallets -- **Seed phrase login** - For direct access with a seed phrase (not recommended) -- **Vault file authentication** - For secure stored identities (not recommended) - -## Connecting to Nodes - -Your application will need to connect to a Qubic node via the RPC API: - -- **Public mainnet node**: `https://rpc.qubic.org` -- **Custom node**: Your own deployed node (see [Qubic Node documentation](qubic-node.md)) - -The [Qubic TypeScript Library](https://github.com/qubic/ts-library) provides tools for connecting to nodes: - -```javascript -import { QubicConnector } from 'qubic-ts-library/dist/qubicConnector' -const connector = new QubicConnector("https://rpc.qubic.org"); -``` - -## Smart Contract Interaction Patterns - -There are two main ways to interact with smart contracts: - -1. **Reading data** (using functions) - - Use the `/v1/querySmartContract` RPC endpoint - - See the [HM25 Frontend HM25Api.jsx](https://github.com/icyblob/hm25-frontend/blob/main/src/components/api/HM25Api.jsx) for implementation - -2. **Writing data** (using procedures) - - Create, sign, and broadcast transactions - - Target the contract with the appropriate function index and parameters - - See the Echo and Burn function implementations in the HM25 Frontend example - -For implementation details, explore: -- [`fetchHM25Stats`](https://github.com/icyblob/hm25-frontend/blob/main/src/components/api/HM25Api.jsx#L9) - Example of reading from a contract -- [`buildEchoTx`](https://github.com/icyblob/hm25-frontend/blob/main/src/components/api/HM25Api.jsx#L39) - Example of creating a transaction for a contract procedure - -## Required Libraries - -1. **Qubic TypeScript Library** - ```bash - yarn add @qubic-lib/qubic-ts-library - ``` - -2. **Optional: Qubic Vault Library** (for vault file support) - ```bash - yarn add @qubic-lib/qubic-ts-vault-library - ``` - -## Development Workflow - -1. **Setup Project**: Create a React/Vue/Angular project -2. **Install Libraries**: Add the Qubic TypeScript Library -3. **Configure Node Connection**: Set up connector to testnet or custom node -4. **Implement Wallet Integration**: Use the patterns from HM25 Frontend -5. **Build Smart Contract Interface**: Create functions that read/write to your contract -6. **Develop UI Components**: Create forms, displays and interaction elements - -## Next Steps - -- Explore the [Qubic TypeScript Library documentation](library-typescript.md) -- Read the [RPC API documentation](../api/rpc) for all available endpoints -- Clone and study the [HM25 Frontend Example](https://github.com/icyblob/hm25-frontend) -- Check the [Smart Contract documentation](../learn/smart-contracts.md) to understand the backend \ No newline at end of file diff --git a/docs/developers/grants.md b/docs/developers/grants.md deleted file mode 100644 index 364e813..0000000 --- a/docs/developers/grants.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Grants Program ---- - -# Grants Program - -The Grants Program aims to foster the development of high-quality smart contracts and solutions that enhance the Qubic ecosystem. - -For full documentation, please visit the [Qubic Grants Program GitHub repository](https://github.com/qubic/grants). diff --git a/docs/developers/integration.md b/docs/developers/integration.md deleted file mode 100644 index b5df777..0000000 --- a/docs/developers/integration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Qubic Integration ---- - -# Integration - -You can find the documentation and code here: [Qubic Integration GitHub repository](https://github.com/qubic/integration?tab=readme-ov-file) diff --git a/docs/developers/interact-with-sc.md b/docs/developers/interact-with-sc.md deleted file mode 100644 index 6bcb902..0000000 --- a/docs/developers/interact-with-sc.md +++ /dev/null @@ -1,75 +0,0 @@ -First, locate the function you want to query in the smart contract code. In this example, we'll use the Fees function from the QX contract. - -#Step 1: Identify the Smart Contract Function - - -``` -struct QX : public ContractBase -{ -public: - struct Fees_input - { - }; - struct Fees_output - { - uint32 assetIssuanceFee; // Amount of qus - uint32 transferFee; // Amount of qus - uint32 tradeFee; // Number of billionths - }; - // ... -} - -struct QX : public ContractBase -{ -public: - struct Fees_input - { - }; - struct Fees_output - { - uint32 assetIssuanceFee; // Amount of qus - uint32 transferFee; // Amount of qus - uint32 tradeFee; // Number of billionths - }; - // ... -} -``` - -Step 2: Find the Function Registration -Look for the REGISTER_USER_FUNCTION keyword to find the function number: - -``` -REGISTER_USER_FUNCTION(Fees, 1) -``` - -This tells us that the Fees function is registered with the number 1. - -## Step 3: Determine the Contract Index -Find the contract index in the contract definition file: - -``` -#define CONTRACT_INDEX_QX 1 -``` - -This tells us that the QX contract is registered with the index 1. - -## Step 4: Construct the API Request - -Now we can create a curl command to query the smart contract: -``` - -curl -X 'POST' \ - 'https://rpc.qubic.org/v1/querySmartContract' \ - -H 'accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{ - "contractIndex": 1, - "inputType": 1, - "inputSize": 0, - "requestData": "" -}' - -this should return a response like: -{"responseData":"AMqaO0BCDwBAS0wA"} -``` - diff --git a/docs/developers/intro.md b/docs/developers/intro.md deleted file mode 100644 index e7c7dd5..0000000 --- a/docs/developers/intro.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Become a developer ---- - -# Become a Developer - -Welcome to Qubic development! This guide will help you navigate the available resources and direct you to the tools you need for your specific use case. - -## Choose Your Path - -### 1. Building Smart Contracts - -If you want to create and deploy smart contracts on Qubic: - -1. **Start with the Overview** - - Read our comprehensive [Smart Contracts Overview](smart-contracts/overview.md) to understand Qubic's unique baremetal execution model - - Learn about IPO-based deployment and the advantages of running contracts without VMs or gas fees - -2. **Set Up Your Environment** - - Follow our [Development Environment Setup](dev-kit.md) guide for Visual Studio and Qubic Core - - Complete the [Getting Started Tutorial](smart-contracts/getting-started/setup-environment.md) for hands-on experience - -3. **Learn Contract Development** - - Master the [Qubic Programming Interface (QPI)](qpi.md) - your complete guide to contract APIs - - Understand [Contract Structure](smart-contracts/smart-contract/contract-structure.md) and [Data Types](smart-contracts/smart-contract/data-types.md) - - Explore [Procedures and Functions](smart-contracts/smart-contract/procedures-and-functions.md) - -4. **Practice with Examples** - - Study [Assets and Shares Examples](smart-contracts/sc-by-examples/assets-and-shares.md) - - Try the [QNS (Qubic Name Service) Example](smart-contracts/sc-by-examples/qns.md) - -5. **Test and Deploy** - - Use our [CLI Tools](smart-contracts/cli/Overview.md) for contract interaction - - Follow [Testing Guidelines](smart-contracts/testing/overview.md) and access [Testnet Resources](testnet-resources.md) - -### 2. Building Frontend Applications - -If you want to build applications that interact with the Qubic network: - -1. **Connect to Qubic Nodes** - - Use our [RPC endpoints](../api/rpc.md) to connect to public nodes or set up your own - - Follow the [RPC Setup Guide](smart-contracts/rpc/setup-rpc.md) for detailed configuration - -2. **Integrate Wallet Solutions** - - For complete wallet integration examples (MetaMask Snap, WalletConnect, Seed phrases, Vault files), check out the [HM25 Frontend Example](https://github.com/icyblob/hm25-frontend) - - This repository demonstrates all key wallet connection methods - -3. **Use the TypeScript Library** - - The [Qubic TypeScript Library](https://github.com/qubic/ts-library) provides tools for creating transactions and interacting with the network - - See our [TypeScript Library docs](library-typescript.md) for installation instructions - -### 3. Smart Contract Interaction - -To interact with existing smart contracts: - -1. **Learn Contract Interaction Basics** - - Check our [Frontend Integration](frontend-integration.md) guide for an overview - - The [HM25 Frontend Example](https://github.com/icyblob/hm25-frontend) contains complete implementation examples - -2. **Understand Data Structures** - - Smart contracts use specific input/output structures defined in their code - - Find example code in the [HM25 Template](https://github.com/qubic/core/blob/madrid-2025/src/contracts/HM25.h) - -## Quick Reference Links - -- **Set up development environment**: [Qubic Dev Kit](https://github.com/qubic/qubic-dev-kit) -- **Core implementation**: [Qubic Core](https://github.com/qubic/core) -- **Command line interaction**: [Qubic CLI](https://github.com/qubic/qubic-cli) -- **TypeScript development**: [Qubic TypeScript Library](https://github.com/qubic/ts-library) -- **Wallet management**: [Qubic Vault TypeScript Library](https://github.com/qubic/ts-vault-library) -- **Frontend example**: [HM25 Frontend](https://github.com/icyblob/hm25-frontend) - -## Getting Help - -- Join the [Qubic Discord](https://discord.gg/qubic) community for support and collaboration -- Check for available [Qubic Grants](grants.md) to fund your project \ No newline at end of file diff --git a/docs/developers/library-csharp.md b/docs/developers/library-csharp.md deleted file mode 100644 index b1342b7..0000000 --- a/docs/developers/library-csharp.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: C# Libraries ---- - -# C# Library - -The C# Qubic Library provides tools to interact with the Qubic Network. - -For full documentation, please visit the [C# Qubic Library GitHub repository](https://github.com/qubic/qubic-csharp). - diff --git a/docs/developers/library-go.md b/docs/developers/library-go.md deleted file mode 100644 index 24f0bd1..0000000 --- a/docs/developers/library-go.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Go Libraries ---- - -# Go Library - -The Go Qubic Library provides tools to interact with a blockchain-based betting system. It includes functionalities for client interactions, data type conversions, bet management, date parsing, wallet management, and cryptographic operations. - -For full documentation, please visit the [Go Qubic Library GitHub repository](https://github.com/qubic/go-qubic). - -# Go Archiver Service - -The Go Qubic Archiver Service's purpose is to store and make available data regardless of the current epoch. - -## High Level Description - -The archive system consists of two services: - -- **qubic-archiver**: The archiver processor and HTTP server that provides RPC endpoints to query the archiver. -- **qubic-nodes**: A service responsible for providing information regarding reliable nodes and the max tick of the network. - -For full documentation, please visit the [Qubic Archiver GitHub repository](https://github.com/qubic/go-archiver). - -# Go Nodes Service - -The purpose of the qubic-nodes service is to continuously check node reliability and provide, upon request, a list of reliable nodes. - -For full documentation, please visit the [Qubic Go Nodes Service GitHub repository](https://github.com/qubic/go-qubic-nodes). - -# Go Node Fetcher - -For full documentation, please visit the [Go Node Fetcher GitHub repository](https://github.com/qubic/go-node-fetcher). - -# Go SchnorrQ - -Schnorr signature on FourQ for Qubic. - -For full documentation, please visit the [Go SchnorrQ GitHub repository](https://github.com/qubic/go-schnorrq). diff --git a/docs/developers/library-http.md b/docs/developers/library-http.md deleted file mode 100644 index c7ca992..0000000 --- a/docs/developers/library-http.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Http Libraries ---- - -# Http Library - -The qubic-http service acts as a bridge to the Qubic Network. Some of its features include: - -- Checking balances -- Broadcasting transactions -- Tick information -- Block height - -For full documentation, please visit the [Qubic HTTP Service GitHub repository](https://github.com/qubic/qubic-http). diff --git a/docs/developers/library-java.md b/docs/developers/library-java.md deleted file mode 100644 index ace7fe2..0000000 --- a/docs/developers/library-java.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Java Libraries ---- - -:::info -Qubicj is a community project and not officially supported by the Qubic team. -::: - -# Qubic Java Library (qubicj) - -The Qubic Java Library (`qubicj/qubicj-computor-api`) provides an API for developers to interact with the Qubic Network. - -It allows to quickly interact with the Qubic network without the need to -know the details of the Qubic network protocol and provides features like auto node selection. -It can be used in classic or reactive stacks. - -For full documentation, please visit the [Qubic Java repository](https://gitlab.com/qubic-contributions/qubicj). -The [qubicj-shell submodule](https://gitlab.com/qubic-contributions/qubicj/-/blob/main/qubicj-shell) provides a demo on -how to use the library in a classic Java stack with Spring. diff --git a/docs/developers/library-rust.md b/docs/developers/library-rust.md deleted file mode 100644 index b75ef1f..0000000 --- a/docs/developers/library-rust.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Rust Libraries ---- - -:::info -qubic-utils is a community project originally created by Mineco1006 and is not officially supported by the Qubic team. -::: - -# Qubic Rust Utilities (qubic-utils) - -The Qubic Rust Utilities library (`qubic-utils`) provides tools for developers to interact with the Qubic network using Rust. - -It includes: -- `qubic-rs`: A Rust SDK to interact with Qubic Computors. -- `qubic-rpc`: Rust wrappers and types to interact with Qubic RPC servers (like `rpc.qubic.org`) and a partially implemented server component. - -For the source code, examples, and further details, please visit the [qubic-utils GitHub repository](https://github.com/Mineco1006/qubic-utils). \ No newline at end of file diff --git a/docs/developers/library-typescript.md b/docs/developers/library-typescript.md deleted file mode 100644 index df2d6f0..0000000 --- a/docs/developers/library-typescript.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Typescript Libraries ---- - -# Typescript Libraries - -## Qubic TypeScript Library - -The [Qubic TypeScript Library](https://github.com/qubic/ts-library) provides everything needed to interact with the Qubic network from JavaScript/TypeScript applications. - -### Installation - -```bash -yarn add @qubic-lib/qubic-ts-library -# or -npm install @qubic-lib/qubic-ts-library -``` - -### Basic Usage - -```typescript -// Import helper -import { QubicHelper } from 'qubic-ts-library/dist/qubicHelper' -import { QubicConnector } from 'qubic-ts-library/dist/qubicConnector' - -// Create helper instance -const helper = new QubicHelper(); - -// Create an ID Package from seed phrase -const id = await helper.createIdPackage("your-seed-phrase"); - -// Connect to a node -const connector = new QubicConnector("https://rpc.qubic.org"); - -// Get balance -const balance = await connector.getBalance(id.publicId); -``` - -### Key Features - -- Creating and managing identities -- Connecting to Qubic nodes -- Fetching balances -- Creating and signing transactions -- Smart contract interaction - -For complete documentation and examples, visit: -- [GitHub Repository](https://github.com/qubic/ts-library) -- [Example Application](https://github.com/icyblob/hm25-frontend) - -## Vault TypeScript Library - -The [Qubic Vault TypeScript Library](https://github.com/qubic/ts-vault-library) provides tools for managing encrypted identity storage. - -### Installation - -```bash -yarn add @qubic-lib/qubic-ts-vault-library -# or -npm install @qubic-lib/qubic-ts-vault-library -``` - -### Basic Usage - -```typescript -import { QubicVault } from 'qubic-ts-vault-library/dist/qubicVault' - -// Create a new vault with password -const vault = new QubicVault(); -vault.createVault("secure-password"); - -// Add an identity to the vault -vault.addIdentity("identity-name", "seed-phrase"); - -// Export and save -const vaultData = vault.exportVault(); -// Now save vaultData to file system -``` - -For complete vault library documentation, visit the [GitHub Repository](https://github.com/qubic/ts-vault-library). diff --git a/docs/developers/oracles.md b/docs/developers/oracles.md deleted file mode 100644 index 0f15634..0000000 --- a/docs/developers/oracles.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Oracle Machines ---- - -# Oracle Machines (OMs) -Oracle Machines in Qubic act as a bridge between smart contracts and real-world data. They enable smart contracts to interact with external information through the Qubic Protocol Interface (QPI). These oracles, functioning as software agents, fetch real-world information and feed it into the network. Understanding Oracle Machines is crucial for writing powerful smart contracts in Qubic. - -Key Points: -- Oracle Machines facilitate querying real-world data. -- Interaction with OMs is managed via QPI. -- OMs simplify the process of incorporating external data, allowing developers to focus on smart contract logic. \ No newline at end of file diff --git a/docs/developers/qpi.md b/docs/developers/qpi.md deleted file mode 100644 index 0edddce..0000000 --- a/docs/developers/qpi.md +++ /dev/null @@ -1,739 +0,0 @@ ---- -title: Qubic Programming Interface (QPI) ---- - -# Qubic Programming Interface (QPI) - -## What is QPI? - -QPI stands for Qubic Programming Interface — a carefully designed and restricted programming interface used to develop smart contracts in the Qubic protocol. - -Unlike general-purpose C++ programming, QPI provides a safe, deterministic, and sandboxed environment that ensures all contracts behave consistently across all nodes in the Qubic network. This is essential to maintain consensus and trustless execution. - -## Why QPI Exists - -In a distributed, consensus-driven system like Qubic, **nondeterminism is dangerous**. If different nodes compute different results from the same contract call, the network breaks down. - -QPI solves this by: - -- **Restricting unsafe features** of C++ (like pointers, floats, raw memory access). -- **Disallowing standard libraries** to avoid system-dependent behavior. -- **Providing a strict interface** that all contracts must use to interact with the Core and with other contracts. - -## What QPI Provides - -QPI exposes a minimal but powerful set of features, including: - -| Capability | Description | -| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| **Custom Data Types** | Use safe and deterministic types like `sint64`, `uint32`, `Array`, `BitArray`, `id`, etc. | -| **Contract Communication** | Allows running procedures and functions of other contracts. | -| **Asset and Share Handling** | Provides methods to issue, burn, transfer, and manage asset ownership. | -| **Tick & Epoch Lifecycle Hooks** | Contracts can react to epoch/tick transitions via `BEGIN_EPOCH()`, `END_TICK()`, etc. | -| **Contract Metadata Access** | Access to `qpi.invocator()`, `qpi.originator()`, `qpi.invocationReward()`, and similar context data. | -| **Safe Arithmetic** | Built-in functions like `div()`, `mod()` to avoid division-by-zero or float precision issues. | -| **Cryptographic Functions** | Cryptographic functionality through the K12 function, which is based on the KangarooTwelve (K12) hash algorithm. | -| **Memory Operations** | Low-level memory operations for efficiently copying and initializing data structures in smart contracts. eg. `copyMemory()`, `setMemory()` | - -`qpi.h` is the Qubic Programming Interface for implementing the smart contracts. It is available automatically in the smart contract implementation header files. This page outlines the guidelines for developing secure and efficient Qubic contracts. -Adherence to these guidelines is crucial for ensuring the proper functionality and security of your contracts within the Qubic environment. - -## Concepts - -The state is the persistent memory of the contract that is kept aligned in all nodes. A contract can have member functions and procedures. - -Functions cannot change the state of the contract. They can be called via a `RequestContractFunction` network message. - -Procedures can change the state of the contract. They are invoked by a transaction and run when the tick containing the transaction is processed. - -There are some special procedures that are called by the system at the beginning of the tick etc. - -A call of a user procedure usually goes along with a transfer of an invocation reward from the invoking user to the contract. - -Procedures can call procedures and functions of the same contract and of contracts with lower contract index. - -Functions can call functions of the same contract and of contracts with lower contract ID. - -Private functions and procedures cannot be called from other contracts. - -In order to be available for invocation by transaction and network message, procedures and functions need to be registered in the special member function `REGISTER_USER_FUNCTIONS_AND_PROCEDURES`. - -## Syntax and Formatting - -Due to security reasons, certain things are prohibited: - -- Declaring and accessing arrays using the C/C++ notation (`[` `]`). Utilize pre-defined array structures within qpi.h such as `collection`, `uint32_64`, `uint32_128`, ... -- Any pointer-related techniques such as casting, accessing, ... -- Native data types like `bool`, `int`, `long`, `char`, ... Use their corresponding predefined data types in `qpi.h` (`bit`, `uint8`, `sint8`, `uint16`, `sint32`, `uint64`, ...) -- Inclusion of other files via `#include`. All functions must reside within a single file. -- Math operators `%` and `/`. Use `mod` and `div` from `qpi.h` instead. `+`, `-`, `*`(multiplication), and bit-wise operators are accepted. -- Local variable declaration, even for for-loop. You need to define all necessary variables in either in the contract state or in a "locals" struct similar to the input and output struct of a function or procedure. -- The `typedef`, `union` keyword. -- Floating point data types (half, float, double) - -Currently, the maximum contract state size is capped at 1 GiB (03/02/2024). This value is subject to change based on hardware upgrades of computors. - -## Member Variables and Functions: - -- struct `bit_x` (x = 2 ^ n, n = 1 ~ 24) - - Member Variable - - uint64 \_values : `x-bit` integer - - Member function - - bit get(uint64 index) : Retrieves the `index`-th bit of `_values` - - void set(uint64 index, bit value) : Sets at the specified `index`-th bit to the provided bit `value` -- struct `sint8_x` (x = 2 ^ n, n = 1 ~ 24) - - Member Variable - - sint8 \_values[x]; : An array of x `signed char` elements - - Member function - - sint8 get(uint64 index) : Retrieves the element at the specified `index` - - void set(uint64 index, sint8 value) : Sets the element at the specified `index` to the provided `value` -- The same goes for `uint8_x`, `sint16_x`, `uint16_x`, `sint32_x`, `uint32_x`, `sint64_x`, `uint64_x`, `id_x`. -- struct `collection` - -This shows collection of priority queue of elements with type T and total element capacity L. - -Each ID pov (point of view) has an own queue. - -Array of elements (filled sequentially), each belongs to one PoV / priority queue (or is empty). - -Elements of a POV entry will be stored as a binary search tree (BST): so this structure has some properties related to BST(bstParentIndex, bstLeftIndex, bstRightIndex). - -Look at the [Binary Search Tree](https://www.geeksforgeeks.org/binary-search-tree-data-structure) to learn more. - -- Difference between standard BST and POV BST - -Each node in a standard BST has left child containing values less than the parent node and the right child containing values greater than the parent node. - -But each element in a POV BST has left child containing `priority` greater than the parent element and the right child containing `priority` less than the parent node. - -```cpp -sint64 add(const id& pov, T element, sint64 priority) -``` - -Add element to priority queue of ID pov, return elementIndex of new element - -```cpp -uint64 capacity() -``` - -Return maximum number of elements that may be stored - -```cpp -T element(sint64 elementIndex) -``` - -Return element value at elementIndex - -```cpp -sint64 headIndex(const id& pov) -``` - -Return elementIndex of first element in priority queue of pov (or NULL_INDEX if pov is unknown) - -```cpp -headIndex(const id& pov, sint64 maxPriority) -``` - -Return elementIndex of first element with priority `<=` maxPriority in priority queue of pov (or NULL_INDEX if pov is unknown) - -```cpp -sint64 nextElementIndex(sint64 elementIndex) -``` - -Return elementIndex of next element in priority queue (or NULL_INDEX if this is the last element) - -```cpp -uint64 population() const -``` - -Return overall number of elements - -```cpp -id pov(sint64 elementIndex) const -``` - -Return point of view elementIndex belongs to (or 0 id if unused) - -```cpp -sint64 prevElementIndex(sint64 elementIndex) const -``` - -Return elementIndex of previous element in priority queue (or NULL_INDEX if this is the last element) - -```cpp -sint64 priority(sint64 elementIndex) const -``` - -Return priority of elementIndex (or 0 id if unused) - -```cpp -sint64 remove(sint64 elementIdx) -``` - -Remove element and mark its pov for removal, if the last element. - -Returns element index of next element in priority queue (the one following elementIdx). - -Element indices obtained before this call are invalidated, because at least one element is moved. - -```cpp -void replace(sint64 oldElementIndex, const T& newElement) -``` - -Replace _existing_ element, do nothing otherwise. - -The element exists: replace its value. - -The index is out of bounds: no action is taken. - -```cpp -void reset() -``` - -Reinitialize as empty collection - -```cpp -sint64 tailIndex(const id& pov) const -``` - -Return elementIndex of last element in priority queue of pov (or NULL_INDEX if pov is unknown) - -```cpp -sint64 tailIndex(const id& pov, sint64 minPriority) const -``` - -Return elementIndex of last element with priority >= minPriority in priority queue of pov (or NULL_INDEX if pov is unknown). - -## Core QPI Functions - -### qpi.invocator() - -The `qpi.invocator()` function returns the ID of the entity (user or contract) that directly called the current **contract procedure**. - -:::info -`qpi.invocator()` returns a zero public key when called inside a function, because it is triggered by a network message and therefore has no associated entity. - -**Exception:** If a function is called inside a procedure, `qpi.invocator()` will return the invocator of the procedure. -::: - -**Function Signature** - -```cpp -id invocator() const -``` - -**Example usage:** - -```cpp -PUBLIC_PROCEDURE(updateBalance) -{ - // Only allow user with public key id(1,2,3,4) to call this - if (qpi.invocator() != id(1,2,3,4)) - { - return; - } - // ... proceed with logic ... -} -``` - -### qpi.originator() - -The `qpi.originator()` function returns the ID of the original transaction sender—the entity (user or contract) that initiated the entire call chain leading to the current contract execution. - -:::info -`qpi.originator()` returns a zero public key when called inside a function, because it is triggered by a network message and therefore has no associated entity. - -**Exception:** If a function is called inside a procedure, `qpi.originator()` will return the originator of the procedure. -::: - -**Function Signature** - -```cpp -id originator() const -``` - -**How It Differs from `qpi.invocator()`** - -| Function | Returns | Example Call Chain (`Alice → ContractA → ContractB`) | -| ------------------ | -------------------------------- | ---------------------------------------------------- | -| **`originator()`** | Original sender (first in chain) | Inside `ContractB`: `Alice` | -| **`invocator()`** | Immediate caller (last in chain) | Inside `ContractB`: `ContractA` | - -**Example usage:** - -```cpp -PUBLIC_PROCEDURE(updateBalance) -{ - // Only allow direct calls from users (no intermediate contracts) - // Rejects any calls coming through other contracts in the call chain - if (qpi.invocator() != qpi.originator()) - { - return; - } - // ... proceed with logic ... -} -``` - -### qpi.invocationReward() - -Returns the amount of Qu (Qubic's native token) attached to the current contract call as an invocation reward. - -:::info -`qpi.invocationReward()` returns zero when called inside a function, since it is triggered by a network message rather than a transaction, and therefore no reward amount is specified. - -**Exception:** If a function is called inside a procedure, `qpi.invocationReward()` will return the reward amount of the procedure. -::: - -**Function Signature** - -```cpp -sint64 invocationReward() const -``` - -**Paywall Protection Example:** - -```cpp -constexpr sint64 FEE = 1000; // 1000 QU required -PUBLIC_PROCEDURE(premiumFeature) -{ - if (qpi.invocationReward() < FEE) - { - // user will lose 1000 QUs, because we don't give back - return; - } - // Grant access... -} -``` - -### qpi.transfer() - -Transfers QU (Qubic's native token) from the contract's balance to another address. - -**Function Signature** - -```cpp -inline sint64 transfer( // Attempts to transfer energy from this qubic - const id& destination, // Destination to transfer to, use NULL_ID to destroy the transferred energy - sint64 amount // Energy amount to transfer, must be in [0..1'000'000'000'000'000] range -) const; // Returns remaining energy amount; if the value is less than 0 then the attempt has failed, in this case the absolute value equals to the insufficient amount -``` - -**1. Basic Transfer** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(sendPayment) -{ - locals.result = qpi.transfer(input.recipientId, 1000); - if (locals.result < 0) - { - return; - } - // Success: 'result' contains new balance -} -``` - -**2. Burn QU (Destroy Tokens)** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(burnTokens) -{ - locals.burned = qpi.transfer(NULL_ID, input.amount); - // burned = remaining balance -} -``` - -### qpi.burn() - -Permanently removes QU (Qubic's native token) from circulation by burning them from the contract's balance. - -:::info -In the future, contracts will be required to burn QU in order to remain active. -::: - -**Function Signature** - -```cpp -sint64 burn(sint64 amount) const -``` - -**1. Basic Token Burning** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(burnTokens) -{ - locals.remaining = qpi.burn(1000); // Burn 1000 QU - if (locals.remaining < 0) - { - return; - } - // Success: 'remaining' shows new balance -} -``` - -**2. Conditional Burn** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(burnExcess) -{ - if (state.balance > state.targetBalance) - { - locals.excess = state.balance - state.targetBalance; - qpi.burn(locals.excess); // Burn surplus QU - } -} -``` - -### qpi.K12() - -Computes a **KangarooTwelve (K12)** cryptographic hash of input data, returning a 256-bit (32-byte) digest as an `id` type. - -**Function Signature** - -```cpp -template -id K12(const T& data) const -``` - -**1. Hashing Raw Data** - -```cpp -struct HashExample_input -{ - Array rawData; -}; - -struct HashExample_output -{ - id hashResult; -}; - -PUBLIC_FUNCTION(HashExample) -{ - // Compute K12 hash - output.hashResult = qpi.K12(input.rawData); -} -``` - -**2. Creating Unique IDs** - -```cpp -struct User -{ - id publicKey; - uint32 registrationDate; -}; - -struct createUserId_input -{ - id pub; -}; - -struct createUserId_output -{ - id hash; -}; - -struct createUserId_locals -{ - User user; -}; - -PUBLIC_FUNCTION_WITH_LOCALS(createUserId) -{ - locals.user = { input.pub, qpi.tick() }; - output.hash = qpi.K12(locals.user); // Deterministic ID -} -``` - -### qpi.issueAsset() - -The `issueAsset()` function allows smart contracts to create `new digital assets` on the Qubic network. These assets can represent anything from currencies to physical commodities. - -**Function Signature** - -```cpp -sint64 issueAsset( - uint64 assetName, - id issuer, - sint8 decimalPlaces, - sint64 numberOfShares, - uint64 unitOfMeasurement -) -``` - -**Parameters** - -| Parameter | Type | Range | Description | Example Value | -| --------------------- | -------- | ------------------------------------------------------------ | ---------------------------------------------- | --------------------- | -| **assetName** | `uint64` | Up to 7 upper case from A-Z characters (encoded to `uint64`) | 8-byte asset identifier (ASCII or hex) | `0x444C4F47` ("GOLD") | -| **issuer** | `id` | 256-bit | Initial owner's public key (must match caller) | `id(_A,_B,...,_Z)` | -| **decimalPlaces** | `sint8` | -128 to 127 | Number of decimal digits for fractional units | `3` (milli-units) | -| **numberOfShares** | `sint64` | `1` to `1000000000000000` | Total supply to mint (must be positive) | `1_000_000` | -| **unitOfMeasurement** | `uint64` | 0 to 264-1 | Physical unit code (ASCII or hex) | `0x6B67` ("kg") | - -**Key Notes:** - -1. **Uniqueness**: `assetName` must be unique per issuer -2. **Authorization**: Caller must be the `issuer` (caller can be `qpi.invocator()` or current contract `SELF`) -3. **Precision**: Negative `decimalPlaces` are allowed but uncommon -4. **Unit Codes**: Use SI unit abbreviations in hex - -**Example Use Case** - -```cpp -// Issue 1M "SILVER" tokens with gram precision -output.issuedShares = qpi.issueAsset( - 0x5245564c4953, // "SILVER" - issuerId, - 3, // 3 decimal places (grams) - 1'000'000, // 1M units - 0x6772616D // "gram" in hex -); -``` - -:::info -The functions `assetNameFromString` and `assetNameFromInt64` are useful in tests for converting asset names between string and `int64` formats. -::: - -### qpi.transferShareOwnershipAndPossession() - -Transfers both **legal ownership** and **physical possession** of asset shares in a single atomic operation. This is the most comprehensive asset transfer function in Qubic, combining two critical rights transfers into one call. - -**Function Signature** - -```cpp -sint64 transferShareOwnershipAndPossession( - uint64 assetName, - id issuer, - id owner, - id possessor, - sint64 numberOfShares, - id newOwnerAndPossessor -) -``` - -| Parameter | Type | Description | Required | Example Values | -| -------------------------- | -------- | -------------------------------------------------------------------------- | -------- | --------------------- | -| **`assetName`** | `uint64` | Unique 8-byte asset identifier (ASCII or hex encoded) | Yes | `0x474F4C44` ("GOLD") | -| **`issuer`** | `id` | 256-bit address of the original asset creator | Yes | `ID(_A, _B,...,_Z)` | -| **`owner`** | `id` | Current legal owner's address | Yes | `ID(_C, _B,...,_Y)` | -| **`possessor`** | `id` | Current holder's address (may differ from owner in custodial arrangements) | Yes | `ID(_E, _B,...,_Z)` | -| **`numberOfShares`** | `sint64` | Positive quantity of shares to transfer (`1` to `1000000000000000`) | Yes | `500` | -| **`newOwnerAndPossessor`** | `id` | Recipient address or (`NULL_ID` burns shares) | Yes | `ID(_B, _B,...,_D)` | - -**Special Values** - -- `NULL_ID` for `newOwnerAndPossessor`: Permanently burns the specified shares -- Zero `numberOfShares`: Transaction will fail with `INVALID_AMOUNT` error - -**Authorization Rules** - -The caller must be: - -The **managing contract** - -:::info -It’s up to the **managing contract** to define the rules (e.g., whether a possessor can reassign possession). -::: - -**Example Usage:** - -```cpp -// Transfer 100 "SILVER" shares from Alice to Bob -qpi.transferShareOwnershipAndPossession( - 0x53494C564552, // "SILVER" - issuerId, // Original creator - aliceId, // Current owner - aliceId, // Current possessor (self-custody) - 100, // Shares to transfer - bobId // New owner/possessor -); - -// Burn 50 shares -qpi.transferShareOwnershipAndPossession( - 0x474F4C44, - issuerId, - ownerId, - ownerId, - 50, - NULL_ID // Burn target -); -``` - -### qpi.numberOfShares() - -Gets the total supply or user-specific balances of asset shares. - -**Function Signature** - -```cpp -sint64 numberOfShares( - const Asset& asset, - const AssetOwnershipSelect& ownership = AssetOwnershipSelect::any(), - const AssetPossessionSelect& possession = AssetPossessionSelect::any() -) const -``` - -**Common Use Cases** - -**1. Get Total Asset Supply** - -```cpp -Asset gold = {issuerId, 0x474F4C44}; // "GOLD" -sint64 totalSupply = qpi.numberOfShares(gold); -``` - -**2. Check User Balance** - -```cpp -sint64 userBalance = qpi.numberOfShares( - gold, - AssetOwnershipSelect::byOwner(userId), // Filter by owner - AssetPossessionSelect::byPossessor(userId) // Filter by holder -); -``` - -**3. Check Managed Assets** - -```cpp -// Get shares managed by specific contract -sint64 managedShares = qpi.numberOfShares( - gold, - AssetOwnershipSelect::byManagingContract(contractIndex), - AssetPossessionSelect::any() -); -``` - -**Filter Options** - -For ownership/possession filters: - -```cpp -// Ownership filters -AssetOwnershipSelect::any() // All owners -AssetOwnershipSelect::byOwner(specificId) // Specific owner -AssetOwnershipSelect::byManagingContract(index) // Managed by contract -AssetOwnershipSelect{specificId, index} // Specific owner and contract - -// Possession filters -AssetPossessionSelect::any() // All possessors -AssetPossessionSelect::byPossessor(specificId) // Specific holder -AssetPossessionSelect::byManagingContract(index) // Managed by contract -AssetPossessionSelect{specificId, index} // Specific holder and contract -``` - -### qpi.getEntity() - -Retrieves entity information (balance, transaction stats) from the Qubic ledger. - -**Function Signature** - -```cpp -bool getEntity( - const id& entityId, - Entity& outputEntity -) const -``` - -**Usage Examples** - -**_1. Basic Entity Lookup_** - -```cpp -struct getUserEntity_input -{ - id userId; -}; - -struct getUserEntity_output -{ - QPI::Entity userEntity; - sint64 balance; -}; - -PUBLIC_FUNCTION(getUserEntity) -{ - if (qpi.getEntity(input.userId, output.userEntity)) - { - // Use entity data - output.balance = output.userEntity.incomingAmount - output.userEntity.outgoingAmount; - } - else - { - // Entity not found - } -} -``` - -### qpi.year|month|day|hour|minute|second|millisecond|tick|epoch|dayOfWeek() - -These functions provide access to the current date, time, and blockchain-specific timestamps - -:::note -All time/date functions return **UTC** values -::: - -:::warning -In the test environment, these functions will not work correctly—they will always return `0` unless an extra step is performed. This will be explained later. -::: - -```cpp -struct getDateTime_input -{ - // Can be empty or contain parameters -}; - -struct getDateTime_output -{ - uint8 year; - uint8 month; - uint8 day; - uint8 hour; - uint8 minute; - uint8 second; - uint16 millisecond; - uint32 tick; - uint16 epoch; -}; - -PUBLIC_FUNCTION(getDateTime) -{ - // Get current date/time - output.year = qpi.year(); // 0-99 (2000-2099) - output.month = qpi.month(); // 1-12 - output.day = qpi.day(); // 1-31 - - // Get current time - output.hour = qpi.hour(); // 0-23 - output.minute = qpi.minute(); // 0-59 - output.second = qpi.second(); // 0-59 - output.millisecond = qpi.millisecond(); // 0-999 - - // Get Qubic-specific timings - output.tick = qpi.tick(); // Current tick - output.epoch = qpi.epoch(); // Current epoch -} - -struct dayOfWeek_input -{ - uint8 year; - uint8 month; - uint8 day; -}; - -struct dayOfWeek_output -{ - uint8 dayOfWeek; // 0=Wednesday, 1=Thursday,...6=Tuesday -}; - -PUBLIC_FUNCTION(dayOfWeek) -{ - output.dayOfWeek = qpi.dayOfWeek( - input.year, - input.month, - input.day - ); -} -``` - -For more detailed examples and advanced usage, see our [Smart Contract Examples](smart-contracts/sc-by-examples/assets-and-shares.md) and [Contract Structure Guide](smart-contracts/smart-contract/contract-structure.md). diff --git a/docs/developers/qubic-cli.md b/docs/developers/qubic-cli.md deleted file mode 100644 index cb9df79..0000000 --- a/docs/developers/qubic-cli.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Qubic CLI ---- - -# Qubic CLI - -The Qubic CLI (Command Line Interface) is an essential tool for developers to communicate with Qubic nodes. It allows you to perform various operations like checking balances, sending transactions, and interacting with smart contracts. - -## Installation - -You can get the code and installation instructions from the [Qubic CLI GitHub repository](https://github.com/qubic/qubic-cli). - - -## Command Reference - -Here are the essential CLI commands you'll need for development: - -### Basic Commands - -- `./qubic-cli -help`: Prints the help message with all available commands -- `./qubic-cli -nodeip `: Specifies the IP address of the target node. You can find a list of computor IPs on the [Qubic Live Network page](https://app.qubic.li/network/live). -- `./qubic-cli -nodeport `: Specifies the port of the target node. The default port is `21841`. - -### Account Operations - -- `./qubic-cli -getbalance `: Retrieves the balance of a specified identity -- `./qubic-cli -sendtoaddress `: Sends Qubic to a target identity - -### Node Information - -- `./qubic-cli -getcurrenttick`: Fetches the current tick information of the node -- `./qubic-cli -gettxinfo `: Gets transaction information - -### Using Seeds - -When working with test accounts, you can use a seed phrase to sign transactions: - -```bash -./qubic-cli -nodeip YOUR_NODE_IP -nodeport YOUR_NODE_PORT -seed YOUR_SEED -somecommand -``` - -## Smart Contract Interaction - -The CLI is particularly useful for testing smart contracts. For example, to interact with a deployed smart contract: - -1. Get the current tick information: - ```bash - ./qubic-cli -nodeip YOUR_NODE_IP -nodeport YOUR_NODE_PORT -getcurrenttick - ``` - -2. Call a smart contract function: - ```bash - ./qubic-cli -nodeip YOUR_NODE_IP -nodeport YOUR_NODE_PORT -seed YOUR_SEED -callcontract CONTRACT_INDEX FUNCTION_INDEX AMOUNT - ``` - -For a complete list of commands, use the `-help` flag or visit the [Qubic CLI GitHub repository](https://github.com/qubic/qubic-cli). diff --git a/docs/developers/qubic-id.md b/docs/developers/qubic-id.md deleted file mode 100644 index de7c93c..0000000 --- a/docs/developers/qubic-id.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Qubic ID ---- - -# Qubic ID - -The Qubic ID system is designed to generate and verify unique identifiers based on cryptographic keys. Here's a brief overview of how it works: - -1. **Seed to Private Key:** A seed string is converted into a private key using a hashing function. This ensures that the private key is unique and securely derived from the seed. - -2. **Private Key to Public Key:** The private key is then used to generate a public key using the SchnorrQ algorithm. This public key is essential for cryptographic operations and identity verification. - -3. **Public Key to Human-Readable ID:** The public key is converted into a human-readable ID. This involves dividing the public key into segments, converting each segment into a base-26 string, and appending a checksum for validation. - -4. **Creating the ID Package:** The system combines the private key, public key, and human-readable ID into a complete ID package. This package can be used for various operations within the Qubic Network. - -5. **ID Verification:** The system can verify the validity of a human-readable ID by converting it back to a public key and comparing it with the original ID. This ensures that the ID is authentic and has not been tampered with. - -The Qubic ID system ensures that each ID is unique, verifiable, and securely generated using cryptographic principles, providing a robust mechanism for identity management within the Qubic Network. diff --git a/docs/developers/qubic-node.md b/docs/developers/qubic-node.md deleted file mode 100644 index f0f15e7..0000000 --- a/docs/developers/qubic-node.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Qubic Node ---- - -# Qubic Node - -Qubic Node Source Code - this repository contains the source code of a full qubic node. Here is the link where you can find all the information and code: [Qubic Node Source Code](https://github.com/qubic/core). - - -# Smart Contracts -The `src/contracts` directory contains the smart contract implementations and the Qubic Programming Interface (QPI). These contracts are the core of the Qubic system, enabling decentralized operations and interactions. diff --git a/docs/developers/smart-contract-architecture.md b/docs/developers/smart-contract-architecture.md deleted file mode 100644 index 7462e9b..0000000 --- a/docs/developers/smart-contract-architecture.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Smart Contract Architecture ---- - -# Smart Contract Architecture - -## Open Source and Transparent - -One of Qubic's most significant advantages is complete transparency. Unlike many blockchain platforms where smart contracts are deployed as compiled bytecode that's difficult to audit, Qubic takes a radically different approach: every smart contract running on Qubic mainnet has its full C++ source code publicly available. - -**Source code**: https://github.com/qubic/core/tree/main/src/contracts - -- **No hidden logic**: There are no proprietary contracts or closed-source components. What you see in the repository is exactly what's running on the network -- **Community auditing**: The open-source nature enables the entire community to review, audit, and understand the behavior of all contracts. To report vulnerabilities, see the [Qubic Vulnerability Evaluation process](https://github.com/qubic/qct/tree/main/qve) -- **Version control**: The git history shows how contracts have evolved over time, providing transparency about changes and updates - -## Technical Implementation - -- **C++ implementation**: Smart contracts are written in a restricted variant of C++ and compiled to native machine code, not bytecode. See [Language Restrictions](/developers/smart-contracts/smart-contract/restrictions) for the full list of enforced rules -- **Direct execution on UEFI ("bare metal")**: Contracts run directly on the Computor hardware through the UEFI layer, without any virtual machine, which is why Qubic achieves such exceptional performance. -- **Deterministic compilation**: The same source code always produces identical executable contracts, ensuring reproducible deployments -- **No runtime interpretation**: Unlike Ethereum's EVM or other VM-based systems, there's no runtime interpretation overhead - -## Contract Identification System - -Each smart contract is identified by two values: - -1. **Contract index** - A numerical identifier assigned to the contract -2. **Contract address** - A 60-character string deterministically derived from the index - -Common usage examples: -- The **index** is used in RPC calls like `querySmartContract` -- The **address** is used as the `destination` field when sending transactions to the contract - -For example, the **QUTIL** contract has index `4` and address `EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVWRF`, while the **QX** contract has index `1` and address `BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARMID`. - -You can find contract indexes and addresses using: - -- **Smart contract explorer**: https://explorer.qubic.org/network/assets/smart-contracts -- **Smart contract registry (JSON)**: https://static.qubic.org/v1/general/data/smart_contracts.json (data extracted from the tickchain in JSON format, plus additional metadata useful for app development) - -## Functions vs Procedures - Separation of Concerns - -### Functions (Read-Only Operations) - -- Cannot modify contract state -- Don't require transactions, only RPC queries -- Always return the same result for the same state - -Example from QX contract: - -```cpp -struct Fees_output { - uint32 assetIssuanceFee; - uint32 transferFee; - uint32 tradeFee; -}; - -PUBLIC_FUNCTION(Fees) { - output.assetIssuanceFee = state._assetIssuanceFee; - output.transferFee = state._transferFee; - output.tradeFee = state._tradeFee; -} -``` - -### Procedures (Write Operations) - -- Can modify contract state -- Must be invoked through signed transactions -- May require QUs depending on contract logic - -Example from QX contract: - -```cpp -struct AddToBidOrder_input { - id issuer; - uint64 assetName; - sint64 price; - sint64 numberOfShares; -}; - -PUBLIC_PROCEDURE(AddToBidOrder) { - // Validations and business logic - if (qpi.invocationReward() < smul(input.price, input.numberOfShares)) { - // Error handling - return; - } - - // State modification - state._assetOrders.add(/* ... */); - state._entityOrders.add(/* ... */); -} -``` - -## Registering Functions and Procedures - -Each function and procedure must be registered with a unique numeric index to be callable externally. - -- **Unique identification**: Each function/procedure has a specific numeric index -- **Public interface**: Defines the contract's available API -- **Validation**: Only registered functions can be invoked externally - -Example from QX contract: - -```cpp -REGISTER_USER_FUNCTIONS_AND_PROCEDURES() { - // Functions (queries) - REGISTER_USER_FUNCTION(Fees, 1); // inputType = 1 - REGISTER_USER_FUNCTION(AssetAskOrders, 2); // inputType = 2 - REGISTER_USER_FUNCTION(AssetBidOrders, 3); // inputType = 3 - REGISTER_USER_FUNCTION(EntityAskOrders, 4); // inputType = 4 - - // Procedures (transactions) - REGISTER_USER_PROCEDURE(IssueAsset, 1); // inputType = 1 - REGISTER_USER_PROCEDURE(AddToAskOrder, 5); // inputType = 5 - REGISTER_USER_PROCEDURE(AddToBidOrder, 6); // inputType = 6 - REGISTER_USER_PROCEDURE(RemoveFromAskOrder, 7); // inputType = 7 -} -``` - -## Development, Review, and Deployment - -Every contract developer should be familiar with the full lifecycle of a smart contract, from development to review and deployment on mainnet. See the [Smart Contract Development Guide](https://github.com/qubic/core/blob/main/doc/contracts.md) in the official core repository. diff --git a/docs/developers/smart-contracts/cli/Overview.md b/docs/developers/smart-contracts/cli/Overview.md deleted file mode 100644 index f999285..0000000 --- a/docs/developers/smart-contracts/cli/Overview.md +++ /dev/null @@ -1,11 +0,0 @@ -# Overview - -**Qubic CLI** is an intermediate tool for interacting with the Qubic core node. It offers functionalities such as sending Qubic, interacting with smart contracts, and remotely controlling the node. - -## Installation - -Clone the repository from [Qubic CLI](https://github.com/qubic/qubic-cli) and build the binary manually. Instructions for building are provided in the repository. - -:::info -It is recommended to build the source yourself instead of using a precompiled binary, as prebuilt versions may be modified or lack the latest bug fixes and features. -::: diff --git a/docs/developers/smart-contracts/cli/_category_.json b/docs/developers/smart-contracts/cli/_category_.json deleted file mode 100644 index 290c699..0000000 --- a/docs/developers/smart-contracts/cli/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Qubic CLI", - "position": 5 -} diff --git a/docs/developers/smart-contracts/cli/call-contract-function.md b/docs/developers/smart-contracts/cli/call-contract-function.md deleted file mode 100644 index 6110fc9..0000000 --- a/docs/developers/smart-contracts/cli/call-contract-function.md +++ /dev/null @@ -1,126 +0,0 @@ -# Call Contract Function - -We can call the contract function using `qubic-cli`, but unfortunately, we still need to manually craft the packet, send it, receive the response in hex, and then decode it into a readable struct. It's a bit of a tangled process—but let's see how to get it done. - -## Craft The Packet - -Let's say we have a function called `getStateNumber` in our deployed contract - -
-Show `getStateNumber` Function - -```cpp -struct getStateNumber_input -{ -}; - -struct getStateNumber_output -{ - uint64 stateNumber; -}; - -PUBLIC_FUNCTION(getStateNumber) -{ - output.stateNumber = state.stateNumber; -} -``` - -
- -So we can create the packet with this following code (added as a test case in your test) - -:::info -Remember to `#include "network_messages/contract.h"` in your test source first -::: - -```cpp -static void byteToHex(const uint8_t* byte, char* hex, const int sizeInByte) -{ - for (int i = 0; i < sizeInByte; i++) - { - snprintf(hex + i * 2, 3, "%02x", byte[i]); - } -} - -static void hexToByte(const char* hex, uint8_t* byte, const int sizeInByte) -{ - for (int i = 0; i < sizeInByte; i++) - { - sscanf(hex + i * 2, "%2hhx", &byte[i]); - } -} - -TEST(Contract, CallFunction) -{ - struct - { - RequestResponseHeader header; - RequestContractFunction rcf; - // Add your input here if needed - // Example: QNS::getStateNumber_input input; - } packet; - - packet.header.setSize(); - packet.header.randomizeDejavu(); - packet.header.setType(RequestContractFunction::type); - - // getStateNumber doesn't expect any input, so inputSize should be 0 - // Example if you have input: packet.rcf.inputSize = sizeof(QNS::getStateNumber_input); - packet.rcf.inputSize = 0; - // In this case getStateNumber has been registered with id = 14 - packet.rcf.inputType = 14; - // Change to your contract index - packet.rcf.contractIndex = QNS_CONTRACT_INDEX; - - // Modify the input if needed - // Example: packet.input.stateNumber = 0; but in this case we don't need input - - unsigned char* hexStr = new unsigned char[sizeof(packet) * 2 + 1]; - byteToHex(reinterpret_cast(&packet), reinterpret_cast(hexStr), sizeof(packet)); - hexStr[sizeof(packet) * 2] = '\0'; // Null-terminate the string - - cout << "Hex String: " << hexStr << endl; - cout << "Size: " << sizeof(packet) << endl; - - delete[] hexStr; -} -``` - -Example output: - -``` -C:\Users\Admin>C:\Users\Admin\Projects\core\x64\Release\test.exe -Running main() from D:\a\_work\1\s\ThirdParty\googletest\googletest\src\gtest_main.cc -[==========] Running 140 tests from 30 test cases. -[----------] Global test environment set-up. -[----------] 1 test from Contract -[ RUN ] Contract.CallFunction -Hex String: 1000002ae0238c350d0000000e000000 -Size: 16 -``` - -## Call Function - -Then use these as inputs for qubic cli - -```bash -qubic-cli.exe -nodeip 162.120.19.25 -nodeport 31841 -sendrawpacket 1000002ae0238c350d0000000e000000 16 -``` - -Example output - -```bash -qubic-cli.exe -nodeip 162.120.19.25 -nodeport 31841 -sendrawpacket 1000002ab25f5c7d0d0000000e000000 16 -Received 16 bytes -1000002bb25f5c7d0000000000000000 -``` - -Your actually response start from **bytes 8** in this case is `0000000000000000` (`stateNumber` is 0) - -:::warning -You can't use the same same input hex (dejavu) more then one. You need to re-generate the input hex then send again. -::: - -:::info -If your reponse is a complex struct, you should copy the hex then call `hexToByte()` then cast these bytes to pointer of the `output` struct -::: diff --git a/docs/developers/smart-contracts/cli/invoke-contract-procedure.md b/docs/developers/smart-contracts/cli/invoke-contract-procedure.md deleted file mode 100644 index 2940466..0000000 --- a/docs/developers/smart-contracts/cli/invoke-contract-procedure.md +++ /dev/null @@ -1,171 +0,0 @@ -# Invoke Contract Procedure - -Similar to calling a function, we can use `qubic-cli` to invoke procedures. However, we still need to manually craft the packet. Hopefully, in the future there will be tools to simplify this process. - -## Get Contract Indentity - -To invoke a contract procedure, we must know the contract ID. You can retrieve it by running the following script in your test: - -```cpp -TEST(Contract, GetId) -{ - id contract(QNS_CONTRACT_INDEX, 0, 0, 0); - CHAR16* contractAddress = new CHAR16[61]; - getIdentity(contract.m256i_u8, contractAddress, false); - - cout << "Contract address: "; - for (int i = 0; i < 60; i++) - { - cout << static_cast(contractAddress[i]); - } - cout << endl; - - delete[] contractAddress; -} -``` - -Example output - -``` -... -==========] Running 140 tests from 30 test cases. -[----------] Global test environment set-up. -[----------] 1 test from Contract -[ RUN ] Contract.GetId -Contract address: NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAML -... -``` - -## Craft The Packet - -Lets say we have a procedure called `setNumberState` - -
-Show `setStateNumber` Contract Function - -```cpp -struct setStateNumber_input -{ - uint64 stateNumber; -}; - -struct setStateNumber_output -{ - uint8 result; -}; - -PUBLIC_PROCEDURE(setStateNumber) -{ - if (input.stateNumber < state.stateNumber) - { - output.result = 1; - return; - } - state.stateNumber = input.stateNumber; - output.result = 0; -} -``` - -
- -To invoke the procedure we need to prepare the hex data for `setStateNumber_input` - -```cpp -static void byteToHex(const uint8_t* byte, char* hex, const int sizeInByte) -{ - for (int i = 0; i < sizeInByte; i++) - { - snprintf(hex + i * 2, 3, "%02x", byte[i]); - } -} - -static void hexToByte(const char* hex, uint8_t* byte, const int sizeInByte) -{ - for (int i = 0; i < sizeInByte; i++) - { - sscanf(hex + i * 2, "%2hhx", &byte[i]); - } -} - -TEST(Contract, InvokeContract) { - QNS::setStateNumber_input input; - input.stateNumber = 1; - unsigned char* hexStr = new unsigned char[sizeof(input) * 2 + 1]; - byteToHex(reinterpret_cast(&input), reinterpret_cast(hexStr), sizeof(input)); - hexStr[sizeof(input) * 2] = '\0'; // Null-terminate the string - cout << "Hex String: " << hexStr << endl; - cout << "Input size: " << sizeof(input) << endl; -} -``` - -Example output: - -```bash -... -Running main() from D:\a\_work\1\s\ThirdParty\googletest\googletest\src\gtest_main.cc -[==========] Running 140 tests from 30 test cases. -[----------] Global test environment set-up. -[----------] 1 test from Contract -[ RUN ] Contract.InvokeContract -Hex String: 0100000000000000 -... -``` - -## Invoke Procedure - -Now invoke the contract using `qubic-cli`: - -```bash -qubic-cli.exe -seed -nodeip -nodeport -sendcustomtransaction -``` - -Example command: - -```bash -qubic-cli.exe -seed ghromhommngqxjokdlnyjkaoxmjbnwqneiikevfkxfncftudczluvcl -nodeip 162.120.19.25 -nodeport 31841 -sendcustomtransaction NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAML 15 0 8 0100000000000000 -``` - -Example output: - -``` -C:\Users\Admin>C:\Users\Admin\Projects\qubic-cli\Debug\qubic-cli.exe -seed ghromhommngqxjokdlnyjkaoxmjbnwqneiikevfkxfncftudczluvcl -nodeip 162.120.19.25 -nodeport 31841 -sendcustomtransaction NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAML 15 0 8 0100000000000000 -Transaction has been sent! -~~~~~RECEIPT~~~~~ -TxHash: nchougstcpxokaicxzuvbaljttdanprejaffegqragbanbwzdlelshycpjbd -From: WRHOEDJCSNSWACSNWPRQWPBXQIOCAULOEJPCUDFDDFRLALPTIQUESAIELSNA -To: NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAML -Input type: 15 -Amount: 0 -Tick: 18480032 -Extra data size: 8 -Extra data: 0100000000000000 -MoneyFlew: N/A -~~~~~END-RECEIPT~~~~~ -run ./qubic-cli [...] -checktxontick 18480032 nchougstcpxokaicxzuvbaljttdanprejaffegqragbanbwzdlelshycpjbd -to check your tx confirmation status -``` - -Your procedure invocation is scheduled for tick `18480032`. The core node will process your procedure call and update the state when the network reaches that tick. - -After the procedure is processed, try calling the `getStateNumber` function again to verify whether the state was actually updated. - -```bash -C:\Users\Admin>qubic-cli.exe -seed ghromhommngqxjokdlnyjkaoxmjbnwqneiikevfkxfncftudczluvcl -nodeip 162.120.19.25 -nodeport 31841 -sendrawpacket 1000002ab25f5c7d0d0000000e000000 16 -Sent 16 bytes -Received 16 bytes -1000002bb25f5c7d0100000000000000 -``` - -If we remove the first 8 bytes, we get `0100000000000000`, which is `1` in decimal (Little Endian) — just as we expected. - -:::warning -You must use a seed with balance to successfully invoke the procedure. Also, adjust `` if your contract requires a fee or cost. -::: - -:::info -There's a key difference between calling a function and invoking a procedure. Calling a procedure actually creates a custom transaction that sends Qubic to the contract address. The core will then schedule your procedure to run when the network reaches the tick which your transaction lives - -On the other hand, calling a function simply opens a TCP connection, asks the node to run the function, and returns the output immediately. - -tl;dr: Function calls are executed **immediately**, procedures **are not**. -::: diff --git a/docs/developers/smart-contracts/getting-started/_category_.json b/docs/developers/smart-contracts/getting-started/_category_.json deleted file mode 100644 index 59f3a9e..0000000 --- a/docs/developers/smart-contracts/getting-started/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Getting Started", - "position": 2, - "link": { - "type": "generated-index", - "description": "Welcome to QUBIC smart contract development! This guide will help you set up your environment, write your first contract, and understand the core development workflow within the QUBIC ecosystem." - } -} diff --git a/docs/developers/smart-contracts/getting-started/add-your-contract.md b/docs/developers/smart-contracts/getting-started/add-your-contract.md deleted file mode 100644 index 4c94c09..0000000 --- a/docs/developers/smart-contracts/getting-started/add-your-contract.md +++ /dev/null @@ -1,275 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Add Your Contract - -Now let’s add your custom contract to the Qubic project. -It’s not too difficult, though it can feel a bit tangled at first—but don’t worry, we’ll guide you through it step by step and make it feel simple! - -## Naming contract rules - -Pick a **unique name** for your contract. You’ll need: - -- **Long name**: For the filename (e.g. `YourContractName.h`) -- **Short name**: Max 7 capital letters/digits (e.g. `YCN`, used as asset name) -- **Optional full-uppercase name**: For state struct and global constants (e.g. `YOURCONTRACTNAME`) - -**Examples:** - -- `Quottery.h`, asset: `QTRY`, state struct: `QUOTTERY` -- `Qx.h`, asset: `QX`, state struct: `QX` - -## Let's add the contract - -:::warning To fix Visual Studio don't write change to disk -Do **Project → Show All Files** first before adding the contract -::: - -Let's say we want to name our contract is **MyTest** then we will create a file `MyTest.h` at `Qubic` project at location `/contracts/MyTest.h` with the content - -```cpp title="MyTest.h" -using namespace QPI; - -struct MYTEST2 -{ -}; - -struct MYTEST : public ContractBase -{ -public: - struct add_input - { - sint64 a; - sint64 b; - }; - - struct add_output - { - sint64 out; - }; - - PUBLIC_FUNCTION(add) - { - output.out = input.a + input.b; - } - - REGISTER_USER_FUNCTIONS_AND_PROCEDURES() - { - REGISTER_USER_FUNCTION(add, 1); - } -}; -``` - -## Define the contract - -After creating the contract, we need to define it—just like how a newborn baby needs a name. - -**1. Define the CONTRACT_INDEX and STATE** - -- At `Qubic` project go to `/contract_core` folder -- Open the file `contract_def.h` -- Search for the first "// new contracts should be added above this line" - -You will see something like this - -```cpp title="/contract_core/contract_def.h" -// ... -#undef CONTRACT_INDEX -#undef CONTRACT_STATE_TYPE -#undef CONTRACT_STATE2_TYPE - -#define MSVAULT_CONTRACT_INDEX 11 -#define CONTRACT_INDEX MSVAULT_CONTRACT_INDEX -#define CONTRACT_STATE_TYPE MSVAULT -#define CONTRACT_STATE2_TYPE MSVAULT2 -#include "contracts/MsVault.h" - -#undef CONTRACT_INDEX -#undef CONTRACT_STATE_TYPE -#undef CONTRACT_STATE2_TYPE - -#define QBAY_CONTRACT_INDEX 12 -#define CONTRACT_INDEX QBAY_CONTRACT_INDEX -#define CONTRACT_STATE_TYPE QBAY -#define CONTRACT_STATE2_TYPE QBAY2 -#include "contracts/Qbay.h" - -// new contracts should be added above this line -// ... -``` - -- Now add your contract defination before the comment line - -```cpp title="/contract_core/contract_def.h" -// ... -#undef CONTRACT_INDEX -#undef CONTRACT_STATE_TYPE -#undef CONTRACT_STATE2_TYPE - -#define MSVAULT_CONTRACT_INDEX 11 -#define CONTRACT_INDEX MSVAULT_CONTRACT_INDEX -#define CONTRACT_STATE_TYPE MSVAULT -#define CONTRACT_STATE2_TYPE MSVAULT2 -#include "contracts/MsVault.h" - -#undef CONTRACT_INDEX -#undef CONTRACT_STATE_TYPE -#undef CONTRACT_STATE2_TYPE - -#define QBAY_CONTRACT_INDEX 12 -#define CONTRACT_INDEX QBAY_CONTRACT_INDEX -#define CONTRACT_STATE_TYPE QBAY -#define CONTRACT_STATE2_TYPE QBAY2 -#include "contracts/Qbay.h" - -/* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ - -#undef CONTRACT_INDEX -#undef CONTRACT_STATE_TYPE -#undef CONTRACT_STATE2_TYPE - -#define MYTEST_CONTRACT_INDEX 13 // previous contract number + 1 -#define CONTRACT_INDEX MYTEST_CONTRACT_INDEX -#define CONTRACT_STATE_TYPE MYTEST -#define CONTRACT_STATE2_TYPE MYTEST2 -#include "contracts/MyTest.h" - -/* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ - -// new contracts should be added above this line -// ... -``` - -**2. Define the contract discription** - -- Search for the next "// new contracts should be added above this line" - -You will see something like this - -```cpp title="/contract_core/contract_def.h" -// ... -constexpr struct ContractDescription -{ - char assetName[8]; - // constructionEpoch needs to be set to after IPO (IPO is before construction) - unsigned short constructionEpoch, destructionEpoch; - unsigned long long stateSize; -} contractDescriptions[] = { - {"", 0, 0, sizeof(Contract0State)}, - {"QX", 66, 10000, sizeof(QX)}, - {"QTRY", 72, 10000, sizeof(QUOTTERY)}, - {"RANDOM", 88, 10000, sizeof(IPO)}, - {"QUTIL", 99, 10000, sizeof(QUTIL)}, - {"MLM", 112, 10000, sizeof(IPO)}, - {"GQMPROP", 123, 10000, sizeof(GQMPROP)}, - {"SWATCH", 123, 10000, sizeof(IPO)}, - {"CCF", 127, 10000, sizeof(CCF)}, // proposal in epoch 125, IPO in 126, construction and first use in 127 - {"QEARN", 137, 10000, sizeof(QEARN)}, // proposal in epoch 135, IPO in 136, construction in 137 / first donation after END_EPOCH, first round in epoch 138 - {"QVAULT", 138, 10000, sizeof(IPO)}, // proposal in epoch 136, IPO in 137, construction and first use in 138 - {"MSVAULT", 149, 10000, sizeof(MSVAULT)}, // proposal in epoch 147, IPO in 148, construction and first use in 149 - {"QBAY", 154, 10000, sizeof(QBAY)}, // proposal in epoch 152, IPO in 153, construction and first use in 154 - // new contracts should be added above this line -// ... -``` - -- Now let's add our contract description `{"MYTEST", 999, 10000, sizeof(MYTEST)}` - -:::note -The format is `{"CONTRACT_ASSET_NAME", CONSTRUCTION_EPOCH, DESTRUCTION_EPOCH, SIZE_OF_STATE}` and `CONSTRUCTION_EPOCH & DESTRUCTION_EPOCH` can be any number in test environment. -::: - -```cpp title="/contract_core/contract_def.h" -// ... -constexpr struct ContractDescription -{ - char assetName[8]; - // constructionEpoch needs to be set to after IPO (IPO is before construction) - unsigned short constructionEpoch, destructionEpoch; - unsigned long long stateSize; -} contractDescriptions[] = { - {"", 0, 0, sizeof(Contract0State)}, - {"QX", 66, 10000, sizeof(QX)}, - {"QTRY", 72, 10000, sizeof(QUOTTERY)}, - {"RANDOM", 88, 10000, sizeof(IPO)}, - {"QUTIL", 99, 10000, sizeof(QUTIL)}, - {"MLM", 112, 10000, sizeof(IPO)}, - {"GQMPROP", 123, 10000, sizeof(GQMPROP)}, - {"SWATCH", 123, 10000, sizeof(IPO)}, - {"CCF", 127, 10000, sizeof(CCF)}, // proposal in epoch 125, IPO in 126, construction and first use in 127 - {"QEARN", 137, 10000, sizeof(QEARN)}, // proposal in epoch 135, IPO in 136, construction in 137 / first donation after END_EPOCH, first round in epoch 138 - {"QVAULT", 138, 10000, sizeof(IPO)}, // proposal in epoch 136, IPO in 137, construction and first use in 138 - {"MSVAULT", 149, 10000, sizeof(MSVAULT)}, // proposal in epoch 147, IPO in 148, construction and first use in 149 - {"QBAY", 154, 10000, sizeof(QBAY)}, // proposal in epoch 152, IPO in 153, construction and first use in 154 - /* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ - {"MYTEST", 999, 10000, sizeof(MYTEST)}, // {"ASSET_NAME", CONSTRUCTION_EPOCH, DESTRUCTION_EPOCH, SIZE_OF_STATE} - // new contracts should be added above this line - -// ... -``` - -**3. Register contract** - -- Search for the 3rd "// new contracts should be added above this line" - -You will see something like this - -```cpp title="/contract_core/contract_def.h" -// ... -static void initializeContracts() -{ - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QX); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QUOTTERY); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(RANDOM); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QUTIL); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(MLM); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(GQMPROP); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(SWATCH); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(CCF); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QEARN); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QVAULT); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(MSVAULT); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QBAY); - // new contracts should be added above this line -#ifdef INCLUDE_CONTRACT_TEST_EXAMPLES - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXA); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXB); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXC); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXD); -#endif -} -// ... -``` - -- Add `REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(MYTEST);` before the comment line - -```cpp title="/contract_core/contract_def.h" -// ... -static void initializeContracts() -{ - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QX); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QUOTTERY); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(RANDOM); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QUTIL); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(MLM); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(GQMPROP); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(SWATCH); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(CCF); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QEARN); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QVAULT); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(MSVAULT); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(QBAY); - /* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(MYTEST); - // new contracts should be added above this line -#ifdef INCLUDE_CONTRACT_TEST_EXAMPLES - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXA); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXB); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXC); - REGISTER_CONTRACT_FUNCTIONS_AND_PROCEDURES(TESTEXD); -#endif -} -// ... -``` - -👉 Now that we have our contract ready, how do we test it? Let's find out in the next section. diff --git a/docs/developers/smart-contracts/getting-started/congratulations.md b/docs/developers/smart-contracts/getting-started/congratulations.md deleted file mode 100644 index ddf9a84..0000000 --- a/docs/developers/smart-contracts/getting-started/congratulations.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You've successfully added your smart contract, set up the environment, and written your first test. You're now ready to build more powerful features on top of it! diff --git a/docs/developers/smart-contracts/getting-started/setup-environment.md b/docs/developers/smart-contracts/getting-started/setup-environment.md deleted file mode 100644 index 8f35a2a..0000000 --- a/docs/developers/smart-contracts/getting-started/setup-environment.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Setup Environment - -To set up the environment for developing QUBIC smart contracts, you only need two things: `Visual Studio` and the [`Qubic Core`](https://github.com/qubic/core) repository. Simple, right? - -:::info -We recommend to use [Qubic Core Lite](../resources/qubic-lite-core.md) repo instead of official Qubic Core so we can build and run the local testnet with our smart contract **directly in OS** without using VM to run the testnet. -::: - -## 1. Install Visual Studio - -Go to [https://visualstudio.microsoft.com/](https://visualstudio.microsoft.com/) and click the `Download Visual Studio` button. - -![VS](/img/install_vs1.png) - -Once downloaded, open the `Visual Studio Installer`. Select the `Desktop development with C++` workload. - -![VS](/img/install_vs3.png) - -Click the `Install` button. You’ll see a progress page — grab a coffee and wait for the installation to complete. - -![VS](/img/install_vs4.png) - -When the installation progess is completed, open the `Visual Studio` - -![VS](/img/install_vs5.png) - -## 2. Clone the repo - -Choose `Clone a repository` and paste the following URL: `https://github.com/qubic/core.git` - -![VS](/img/install_vs6.png) - -Click the `Clone` button. - -![VS](/img/install_vs7.png) - -Once the cloning is complete, double-click on `Qubic.sln` on the right-hand side to open the QUBIC solution. - -![VS](/img/install_vs11.png) - -Now let’s test if everything is set up correctly by building the test project. -Right-click on the `test` project and select `Build`. - -![VS](/img/install_vs8.png) - -If you see logs like the one below — congrats! You've successfully set up your development environment! - -``` -3>test.vcxproj -> C:\Users\admin\source\repos\core\x64\Debug\test.exe -3>C:\Users\admin\source\repos\core\test\data\custom_revenue.eoe -3>C:\Users\admin\source\repos\core\test\data\samples_20240815.csv -3>C:\Users\admin\source\repos\core\test\data\scores_v4.csv -3>C:\Users\admin\source\repos\core\test\data\scores_v5.csv -3>4 File(s) copied -3>Done building project "test.vcxproj". -========== Rebuild All: 3 succeeded, 0 failed, 0 skipped ========== -========== Rebuild completed at 1:57 PM and took 01:04.789 minutes ========== -``` - -![VS](/img/install_vs9.png) - -:::warning -If you see the logs is The Windows SDK version xx.xx.xxxx.x was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". -::: diff --git a/docs/developers/smart-contracts/getting-started/test-your-contract.md b/docs/developers/smart-contracts/getting-started/test-your-contract.md deleted file mode 100644 index bccb539..0000000 --- a/docs/developers/smart-contracts/getting-started/test-your-contract.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Test Your Contract - -Now that we’ve created our contract, it's time to test it and make sure it works as expected. - -## Create test program - -> Test program should be named as `contract_[your_contract_name_lowercase].cpp`. - -> Example: For a contract named `MyTest`, the test program should be `contract_mytest.cpp`. - -Navigate to the `test` project and create a new program called `contract_mytest.cpp` with the following template: - -```cpp title="contract_mytest.cpp" -#define NO_UEFI - -#include "contract_testing.h" - -class ContractTestingMyTest : protected ContractTesting -{ -public: - ContractTestingMyTest() - { - initEmptySpectrum(); - initEmptyUniverse(); - INIT_CONTRACT(MYTEST); - } - - MYTEST::add_output add(sint64 a, sint64 b) - { - MYTEST::add_input input; - MYTEST::add_output output; - input.a = a; - input.b = b; - callFunction(MYTEST_CONTRACT_INDEX, 1, input, output); - return output; - } -}; - -TEST(MyTest, TestAdd) { - ContractTestingMyTest test; - MYTEST::add_output output = test.add(1, 2); - EXPECT_EQ(output.c, 3); -} -``` - -## Build the test - -Right-click the test project in Visual Studio and select Build. If successful, you’ll see output like this: - -``` -... -... -1>Generating Code... -1>test.vcxproj -> C:\Users\admin\source\repos\core\x64\Debug\test.exe -1>C:\Users\admin\source\repos\core\test\data\custom_revenue.eoe -1>C:\Users\admin\source\repos\core\test\data\samples_20240815.csv -1>C:\Users\admin\source\repos\core\test\data\scores_v4.csv -1>C:\Users\admin\source\repos\core\test\data\scores_v5.csv -1>4 File(s) copied -1>Done building project "test.vcxproj". -========== Build: 1 succeeded, 0 failed, 2 up-to-date, 0 skipped ========== -========== Build completed at 2:44 PM and took 29.164 seconds ========== -``` - -You can now run the test executable via Command Prompt: - -```cpp -C:\Users\admin>C:\Users\admin\source\repos\core\x64\Debug\test.exe -Running main() from D:\a\_work\1\s\ThirdParty\googletest\googletest\src\gtest_main.cc -[==========] Running 216 tests from 39 test cases. -[----------] Global test environment set-up. -[----------] 3 tests from TestCoreAssets -[ RUN ] TestCoreAssets.CheckLoadFile -``` - -As you can see, your test is not executed first. Waiting for other tests can waste time — but there's a quick trick to prioritize yours. - -## How To Run Your Test First - -:::info -Fast trick without change .vcxproj, pass `--gtest_filter=MyTest.*` when execute the test executable to only execute our tests. -::: - -**1. Unload the Project** - -- Right click the `test` project then choose `Unload project` - -**2. Edit the Project File** - -- Right-click the unloaded project → Edit Project File -- Find the section like this: - -```xml title="test.vcxproj" -... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -... -``` - -**3. Move Your Test File to the Top** - -Move the contract_mytest.cpp entry above all other files, like so: - -```xml title="test.vcxproj" -... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -... -``` - -**4. Save and Reload** - -- Save the .vcxproj file. -- Right-click the project → Reload Project - -Now, rebuild and run the test again. You should see your test run first: - -```cpp -... -[==========] Running 216 tests from 39 test cases. -[----------] Global test environment set-up. -[----------] 1 test from MyTest -[ RUN ] MyTest.TestAdd -[ OK ] MyTest.TestAdd (36761 ms) -[----------] 1 test from MyTest (36780 ms total) -... -``` - -:::info -Since compiling tests for other contracts can be heavy—and we only want to test our own contract—you can remove lines starting with `contract_xxx.cpp` (e.g., `contract_qearn.cpp`, `contract_msvault.cpp`) in `test.vcxproj`. -::: diff --git a/docs/developers/smart-contracts/overview.md b/docs/developers/smart-contracts/overview.md deleted file mode 100644 index 4278fc2..0000000 --- a/docs/developers/smart-contracts/overview.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Smart Contracts Overview -sidebar_position: 1 ---- - -# QUBIC Smart Contract - -QUBIC smart contracts are decentralized `C++` programs that execute directly on baremetal hardware, eliminating the need for traditional operating systems or virtual machines. This low-level execution model provides high performance, low latency, and fine-grained control over computation. Unlike conventional blockchain platforms, QUBIC offers a unique architecture where contracts run closer to the hardware, ensuring deterministic and efficient execution across the network. - -Each smart contract can be launched through an IPO (Initial Public Offering), a mechanism that gathers community support and allocates computing resources to the contract. This system ensures that only valuable and trusted computations receive execution time, making QUBIC smart contracts efficient, scalable, and suitable for advanced decentralized applications. - -# Key Features - -**1. Baremetal Execution** - -Smart contracts run directly on the hardware—without an OS, VM, or container layer—allowing extremely low-level control, high-speed execution, and minimal overhead. - -**2. IPO-Based Deployment (Initial Public Offering)** - -Each contract must be proposed through a voting process, where the computor allocates compute resources for its execution. If the proposal is accepted, the contract will be integrated into the core code, after which the IPO process takes place. If all shares are successfully sold during the IPO, the contract will be constructed. - -**3. No Virtual Machine, No Gas Model** - -There is no EVM-like gas mechanism. Instead, compute resources are provisioned via IPO and scheduled execution, avoiding the need for micro-fees or instruction-based billing. diff --git a/docs/developers/smart-contracts/resources/_category_.json b/docs/developers/smart-contracts/resources/_category_.json deleted file mode 100644 index 1a72ebb..0000000 --- a/docs/developers/smart-contracts/resources/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Resources", - "position": 8, - "link": { - "type": "generated-index", - "description": "Welcome to the Resources documentation! This guide will help you find useful tools, libraries, and references for working with smart contracts." - } -} diff --git a/docs/developers/smart-contracts/resources/contract-verify-tool.md b/docs/developers/smart-contracts/resources/contract-verify-tool.md deleted file mode 100644 index 8883db8..0000000 --- a/docs/developers/smart-contracts/resources/contract-verify-tool.md +++ /dev/null @@ -1,7 +0,0 @@ -# Contract Verify Tool - -Although developers are aware of the feature restrictions that C++ enforces for smart contract (SC) files, they may sometimes unintentionally violate them. To address this, we introduce a tool that automatically verifies whether C++ files comply with the language feature restrictions Qubic imposes on SC files. - -# Instruction - -Source and tutorial can be found here: https://github.com/Franziska-Mueller/qubic-contract-verify diff --git a/docs/developers/smart-contracts/resources/qubic-lite-core.md b/docs/developers/smart-contracts/resources/qubic-lite-core.md deleted file mode 100644 index 5ffdcae..0000000 --- a/docs/developers/smart-contracts/resources/qubic-lite-core.md +++ /dev/null @@ -1,7 +0,0 @@ -# Qubic Lite Core - -Qubic Lite Core is a lightweight version of Qubic Core that runs directly on the OS without requiring a UEFI environment. By default, it’s configured for a local single-node devnet, making it an excellent tool for testing your contracts on the network. - -# Instruction - -Tutorial can be found here: https://github.com/hackerby888/qubic-core-lite diff --git a/docs/developers/smart-contracts/rpc/Overview.md b/docs/developers/smart-contracts/rpc/Overview.md deleted file mode 100644 index 2caaef5..0000000 --- a/docs/developers/smart-contracts/rpc/Overview.md +++ /dev/null @@ -1,5 +0,0 @@ -# Overview - -In the previous section, we learned how to interact with your contract using `qubic-cli` by communicating directly with your node. However, in a real production environment, it is unlikely that you'll interact with the node directly. Instead, you'll typically work with the [RPC server](https://docs.qubic.org/api/rpc/). - -This chapter will guide you through setting up your own testnet RPC server and show you how to interact with it using the [ts-library](https://github.com/qubic/ts-library). diff --git a/docs/developers/smart-contracts/rpc/_category_.json b/docs/developers/smart-contracts/rpc/_category_.json deleted file mode 100644 index e87745c..0000000 --- a/docs/developers/smart-contracts/rpc/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "RPC Testnet", - "position": 6 -} diff --git a/docs/developers/smart-contracts/rpc/setup-rpc.md b/docs/developers/smart-contracts/rpc/setup-rpc.md deleted file mode 100644 index 1a3e623..0000000 --- a/docs/developers/smart-contracts/rpc/setup-rpc.md +++ /dev/null @@ -1,76 +0,0 @@ -# Setup RPC - -Manually setting up the RPC server can be a challenging task, but fortunately, we can use Docker to simplify the process. - -## Install Docker - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - -```bash -apt update -apt install -y docker.io -curl -L "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -chmod +x /usr/local/bin/docker-compose -``` - - -``` -1. Download and install the docker desktop at https://www.docker.com/products/docker-desktop. -2. Launch Docker Desktop from Start Menu. -3. Wait until it shows Docker is running. -``` - - - -## Docker Compose File - -Download the `docker-compose.yaml` and adjust `QUBIC_NODES_QUBIC_PEER_LIST` variable: - -[Docker Compose File](https://github.com/KavataK/qubic-node-setup/blob/main/docker-compose.yaml) - -## Start The Server - -```bash -docker-compose up -d -``` - -Example output: - -```bash -root@31217:~/core-docker# docker-compose up -d -[+] Running 8/8 - ✔ Container mongo-db Running 0.0s - ✔ Container qubic-nodes Healthy 1.7s - ✔ Container qubic-archiver Started 0.0s - ✔ Container qubic-http Started 0.0s - ✔ Container stats-processor Started 0.0s - ✔ Container traefik Started 0.0s - ✔ Container qubic-events Started 0.0s - ✔ Container stats-api Started 0.0s -``` - -Your RPC is running at `IP:8000`. See the [Swagger API reference](https://qubic.github.io/integration/Partners/swagger/qubic-rpc-doc.html?urls.primaryName=Qubic%20RPC%20Live%20Tree) for a complete list of available endpoints. - -Let's test if our RPC is running by make a GET request to `http://IP:8000/v1/tick-info`, Example output - -```json -{ - "tickInfo": { - "tick": 18480136, - "duration": 0, - "epoch": 170, - "initialTick": 18480000 - } -} -``` - -## References - -https://github.com/KavataK/QubicNetworkDeploymentGuide - -https://github.com/KavataK/qubic-node-setup - -https://github.com/qubic/qubic-dev-kit diff --git a/docs/developers/smart-contracts/rpc/ts-library.md b/docs/developers/smart-contracts/rpc/ts-library.md deleted file mode 100644 index b62e646..0000000 --- a/docs/developers/smart-contracts/rpc/ts-library.md +++ /dev/null @@ -1,333 +0,0 @@ -# TS Library - -Now that your testnet RPC server is up, let's interact with your contract using the [ts-library](https://www.npmjs.com/package/@qubic-lib/qubic-ts-library). The concept is similar to `qubic-cli`: we craft the packet and send it to the node—but this time, we'll use code instead. However, a current limitation is that we still need to represent `input` and `output` as byte arrays in JavaScript and manually parse the response bytes to construct the `output`. Let’s see how this works! - -## Concept - -Any packet sent to the Qubic network must begin with a `RequestResponseHeader`, which describes metadata such as the packet type and its total size. Similarly, responses from a Qubic node will also start with a `RequestResponseHeader`. - -The `QubicPackageBuilder` class is a helper for combining the `RequestResponseHeader` with other structures. - -:::info -Each `RequestResponseHeader` must include a unique dejavu. -::: - -## Calling Function - -
-Show `getStateNumber` Contract Function - -```cpp -struct getStateNumber_input -{ -}; - -struct getStateNumber_output -{ - uint64 stateNumber; -}; - -PUBLIC_FUNCTION(getStateNumber) -{ - output.stateNumber = state.stateNumber; -} -``` - -
- -Instead of manually crafting and sending the packet, the RPC server provides a convenient API at `/v1/querySmartContract` which allows us to make a `POST` request to invoke a function and receive a result. Let's see how to call the `getStateNumber` contract function described above. - -:::info -The `input` (body) and `output` (response) of `/v1/querySmartContract` must be encoded in **base64** format. -::: - -### Using RPC Server - -```ts -async function main() { - const API = `http://ip/v1/querySmartContract`; - let responseBase64 = await fetch(API, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - contractIndex: 13, - inputType: 14, // function id - inputSize: 0, - requestData: "", // base64 encoded input data if any - }), - }).then((response) => { - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return response.text(); - }); - - // Decode the base64 response - // Struct output { - // uint64 stateNumber; - // } - - const responseBuffer = Buffer.from(responseBase64, "base64"); - const view = new DataView(responseBuffer.buffer); - const stateNumber = view.getBigUint64(0, true); - console.log("State Number:", stateNumber.toString()); -} - -main(); -``` - -### Directly To Node - -You can also use `ts-library` to send raw contract function packets directly to the node. - -
- Show Code -```ts -async function main() { - const peerAddress = '162.120.19.25'; - const connector = new QubicConnectorNode(31841); - if (!connector) { - console.error('Failed to create QubicConnectorNode instance.'); - return; - } - connector.connect(peerAddress); - connector.onPeerConnected = () => { - console.log('Connected to peer:', peerAddress); - - // First craft the RequestContractFunction package - // This is a request to the contract at index 13, function ID 14 with no input (INPUT_SIZE = 0) - const CONTRACT_INDEX = 13; - const FUNCTION_ID = 14; - const INPUT_SIZE = 0; - const request = new RequestContractFunction( - CONTRACT_INDEX, - FUNCTION_ID, - INPUT_SIZE - ); - - // craft the RequestResponseHeader package - const header = new RequestResponseHeader( - QubicPackageType.RequestContractFunction, - request.getPackageSize() - ); - header.randomizeDejaVu(); - - // Now combine the header and request into a single package using QubicPackageBuilder - const builder = new QubicPackageBuilder(header.getSize()); - builder.add(header); - builder.add(request); - const data = builder.getData(); - connector.sendPackage(data); - console.log( - "Called contract function with ID", - FUNCTION_ID, - "on contract at index", - CONTRACT_INDEX, - "with input size", - INPUT_SIZE, - "to peer", - peerAddress - ); - }; - - connector.onPackageReceived = (packageData) => { - if ( - packageData.header.getType() !== - QubicPackageType.RespondContractFunction - ) { - return; - } - let view = new DataView(packageData.payLoad.buffer); - let stateNumber = view.getBigUint64(0, true); - console.log('State Number: ', stateNumber.toString()); - }; - -} - -main(); - -```` -
- - -## Invoke Procedure - -As discussed earlier, invoking a procedure is essentially sending a transaction. The `ts-library` provides classes to help build these transactions. Let’s explore how it works. - -
-Show `setStateNumber` Contract Function - -```cpp -struct setStateNumber_input -{ - uint64 stateNumber; -}; - -struct setStateNumber_output -{ - uint8 result; -}; - -PUBLIC_PROCEDURE(setStateNumber) -{ - if (input.stateNumber < state.stateNumber) - { - output.result = 1; - return; - } - - state.stateNumber = input.stateNumber; - output.result = 0; -} -``` - -
- -### Using RPC Server - -```ts -async function main() { - const BASE_URL = `http://162.120.18.27:8000/v1`; - - // Will be used to set the transaction target tick - const getCurrentTick = async (): Promise => { - const response = await fetch(`${BASE_URL}/tick-info`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - let json = await response.json(); - return json.tickInfo.tick; - }; - - let helper = new QubicHelper(); - const seed = 'ghromhommngqxjokdlnyjkaoxmjbnwqneiikevfkxfncftudczluvcl'; - const publicKey = new PublicKey( - (await helper.createIdPackage(seed)).publicKey - ); - const CONTRACT_ADDRESS = - 'NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAML'; - const SetStateNumberProcedure = 15; // The procedure ID for SetStateNumber - - // Create the payload buffer - const payloadBuffer = new Uint8Array(8); - const view = new DataView(payloadBuffer.buffer); - const stateNumber = 2n; // Example state number to set - view.setBigUint64(0, stateNumber, true); // Set the state number in the payload - - // Then wrap it to DynamicPayload - let payLoad = new DynamicPayload(payloadBuffer.length); - payLoad.setPayload(payloadBuffer); - - // Build the transaction - const tx = new QubicTransaction() - .setSourcePublicKey(publicKey) - .setDestinationPublicKey(CONTRACT_ADDRESS) // A transfer should go to the CONTRACT_ADDRESS - .setAmount(0) // SetStateNumber does not require any fee or cost - .setTick((await getCurrentTick()) + 10) // Set the target tick - .setInputType(SetStateNumberProcedure) - .setPayload(payLoad); // The payload contains the state number; - - // Sign the tx - let txBuffer = await tx.build(seed); - - // Convert to base64 - let txBase64 = Buffer.from(txBuffer).toString('base64'); - console.log('Transaction Base64:', txBase64); - - // Then now broadcast the transaction to the network - const API = `${BASE_URL}/broadcast-transaction`; - let response = await fetch(API, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - encodedTransaction: txBase64, - }), - }); - - response = await response.json(); - console.log('Transaction broadcast response:', response); - console.log("Target tick:", tx.tick); -} - -main(); -```` - -### Directly To Node - -In case the RPC server is down, you can broadcast your transaction directly to the node. - -
-Show Code - -```ts -async function main() { - const peerAddress = "162.120.18.27"; - const BASE_URL = `http://162.120.18.27:8000/v1`; - - const getCurrentTick = async (): Promise => { - const response = await fetch(`${BASE_URL}/tick-info`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - let json = await response.json(); - return json.tickInfo.tick; - }; - - let helper = new QubicHelper(); - const seed = "ghromhommngqxjokdlnyjkaoxmjbnwqneiikevfkxfncftudczluvcl"; - const publicKey = new PublicKey( - (await helper.createIdPackage(seed)).publicKey - ); - const CONTRACT_ADDRESS = - "NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAML"; - const SetStateNumberProcedure = 15; // The procedure ID for SetStateNumber - - const payloadBuffer = new Uint8Array(8); - const view = new DataView(payloadBuffer.buffer); - const stateNumber = 3n; // Example state number to set - view.setBigUint64(0, stateNumber, true); // Set the state number in the payload - - let payLoad = new DynamicPayload(payloadBuffer.length); - payLoad.setPayload(payloadBuffer); - - const tx = new QubicTransaction() - .setSourcePublicKey(publicKey) - .setDestinationPublicKey(CONTRACT_ADDRESS) // A transfer should go to the CONTRACT_ADDRESS - .setAmount(0) // SetStateNumber does not require any fee or cost - .setTick((await getCurrentTick()) + 10) // Set the target tick - .setInputType(SetStateNumberProcedure) - .setPayload(payLoad); // The payload contains the state number; - - let txBuffer = await tx.build(seed); - const header = new RequestResponseHeader( - QubicPackageType.BROADCAST_TRANSACTION, - tx.getPackageSize() - ); - header.randomizeDejaVu(); - const builder = new QubicPackageBuilder(header.getSize()); - builder.add(header); - builder.addRaw(txBuffer); - const data = builder.getData(); - - let connector = new QubicConnectorNode(31841); - connector.connect(peerAddress); - connector.onPeerConnected = () => { - if (connector.sendPackage(data)) { - console.log("Transaction sent successfully to the node."); - console.log("Target tick:", tx.tick); - } - }; -} - -main(); -``` - -
- -## References - -For more details about `ts-library` please see https://github.com/qubic/ts-library diff --git a/docs/developers/smart-contracts/sc-by-examples/_category_.json b/docs/developers/smart-contracts/sc-by-examples/_category_.json deleted file mode 100644 index 571ae97..0000000 --- a/docs/developers/smart-contracts/sc-by-examples/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Smart Contract by Examples", - "position": 7 -} diff --git a/docs/developers/smart-contracts/sc-by-examples/assets-and-shares.md b/docs/developers/smart-contracts/sc-by-examples/assets-and-shares.md deleted file mode 100644 index e35c4ed..0000000 --- a/docs/developers/smart-contracts/sc-by-examples/assets-and-shares.md +++ /dev/null @@ -1,138 +0,0 @@ -# Assets And Shares - -[**Source Code**](https://github.com/hackerby888/qubic-sc-examples/tree/assets-and-shares) - -## MYTEST Contract - -### Overview - -A contract for issuing and managing asset shares with fixed transfer fees. - -### Key Features: - -1. **Asset Issuance** - - - Creates new assets with customizable parameters - - Sets initial share distribution - -2. **Share Release** - - Transfers shares to other contracts - - Implements fixed fee structure - -### Core Functions - -#### `issueAsset` - -```cpp -struct issueAsset_input { - uint64 name; // Asset identifier - id issuer; // Creator's Qubic ID - sint8 decimalPlaces; // Precision (e.g., 8 for BTC-like) - sint64 numberOfShares; // Initial supply - uint64 unitOfMeasurement; // Measurement standard -}; - -struct issueAsset_output { - bit success; -}; -``` - -- Wraps QPI's native asset creation - -- Returns success/failure status - -#### `releaseShares` - -```cpp -struct releaseShares_input { - Asset asset; // Asset to transfer - id owner; // Current owner - id possessor; // Current holder - sint64 numberOfShares; // Amount to release - uint16 destOwnershipContract; // Receiving contract - uint16 destPossessionContract; - sint64 offeredFee; // Must match fixed fee -}; - -struct releaseShares_output { - bit success; -}; -``` - -- Transfers shares between contracts - -- Enforces 100 QU fixed fee via `PRE_RELEASE_SHARES` - -- Atomic transfer - either fully completes or fails - -## CROSS Contract - -### Overview - -A counterpart contract designed to receive asset shares from MYTEST. - -### Key Features: - -#### 1. Share Acquisition - -- Accepts incoming share transfers - -- Implements matching fee structure - -#### 2. Inter-contract Compatibility - -- Designed to work with MYTEST's release mechanism - -- Mirror image fee validation - -### Core Function - -#### acquireShares - -```cpp -struct acquireShares_input { - Asset asset; // Asset being received - id owner; // Original owner - id possessor; // Sender - sint64 numberOfShares; // Amount - uint16 srcOwnershipContract; // Sending contract - uint16 srcPossessionContract; - sint64 offeredFee; // Must > requestedFee -}; - -struct acquireShares_output { - bit success; -}; -``` - -- Receives shares released from `srcOwnershipContract`/`srcPossessionContract` - -- Validates 100 QU fee in pre-transfer hook - -- Returns success/failure status - -## Interaction Flow - -### releaseShares - -- MYTEST calls `releaseShares` - -- CROSS's `PRE_ACQUIRE_SHARES` validates fee - -- Qubic SC executes atomic transfer - -- Both contracts update their states - -- CROSS's `POST_ACQUIRE_SHARES` validates fee - -### acquireShares - -- CROSS calls `acquireShares` - -- MYTEST's `PRE_RELEASE_SHARES` validates fee - -- Qubic SC executes atomic transfers - -- Both contracts update their states - -- MYTEST's `PRE_RELEASE_SHARES` is invoked diff --git a/docs/developers/smart-contracts/sc-by-examples/qns.md b/docs/developers/smart-contracts/sc-by-examples/qns.md deleted file mode 100644 index 10353df..0000000 --- a/docs/developers/smart-contracts/sc-by-examples/qns.md +++ /dev/null @@ -1,242 +0,0 @@ -# Qubic Name Service - -[**Source Code**](https://github.com/hackerby888/qubic-sc-examples/tree/qubic-name-service) - -:::warning -This QNS contract is for reference only and it's not the QNS contract that is being developed in the Qubic Ecosystem -::: - -## Qubic Name Service (QNS) Contract Documentation - -### Overview - -The QNS contract is a decentralized naming system built on the Qubic blockchain that maps human-readable names to machine-readable identifiers like Qubic addresses. It provides functionality similar to DNS but with blockchain-based ownership and resolution. - -### Key Features - -- Domain registration and renewal system - -- Subdomain management - -- Address resolution (QUBIC addresses) - -- Text record storage (for metadata) - -- Transferable domain ownership - -- Time-based domain expiration - -### Data Structures - -#### UEFIString - -```cpp -template -struct UEFIString : public Array { - bool isEmpty(); - bool validate(); - static UEFIString getEmpty(); - bool operator==(const UEFIString& other) const; -} -``` - -- Fixed-length string type for domain names - -- Validation ensures proper format (alphanumeric, null-terminated) - -- Length constraints: min 1, max 32 chars - -#### Domain - -```cpp -struct Domain { - UEFIString<> subDomain; - UEFIString<> rootDomain; - UEFIString tld; - - bool validate(); - uint64 getFullHashedValue() const; - uint64 getRootHashedvalue() const; -} -``` - -- Represents a complete domain name with: - - - **subDomain**: Optional subdomain (e.g., "sub" in "sub.example.qubic") - - **rootDomain**: Main domain name (e.g., "example" in "example.qubic") - - **tld**: Top-level domain (e.g., "qubic") - -- Provides hashing functions for efficient storage and lookup - -#### RegistryRecord - -```cpp -struct RegistryRecord { - id owner; - uint32 registerDate; - uint16 registerEpoch; - uint16 registrationYears; -} -``` - -Stores domain registration information: - -- **owner**: Qubic ID of domain owner - -- **registerDate**: Unix timestamp of registration - -- **registerEpoch**: Qubic epoch of registration - -- **registrationYears**: Number of years registered for - -#### ResolveData - -```cpp -struct ResolveData { - id address; - UEFIString<> text; -} -``` - -Stores resolution data for domains: - -- **address**: Mapped Qubic address - -- **text**: Arbitrary text record (for metadata) - -## Contract State - -### TLD Management - -- **QUBIC_TLD**: Predefined ".qubic" TLD - -- **QNS_TLD**: Predefined ".qns" TLD - -- **TLDs**: Array of supported TLDs - -### Storage - -- **registry**: Hash map storing domain registration records - -- **resolveData**: Nested hash map storing resolution data (supports subdomains) - -```cpp -// Supported TLDs -UEFIString QUBIC_TLD; // ".qubic" -UEFIString QNS_TLD; // ".qns" -Array, 2> TLDs; - -// Domain registry -HashMap registry; - -// Resolution data -HashMap, QNS_MAX_NUMBER_OF_DOMAINS> resolveData; -``` - -## Core Functions - -### Registration - -**`RegisterDomain`** - -```cpp -struct RegisterDomain_input { - Domain domain; - uint16 registrationYears; -}; -struct RegisterDomain_output { - uint8 result; // QNSError code -}; -``` - -- Registers new domain for specified years - -- Validates name format and TLD - -- Requires payment (2M QU/year) - -### Resolution - -**`SetResolveAddressData`** - -```cpp -struct SetResolveAddressData_input { - Domain domain; - id address; -}; -``` - -- Maps domain to Qubic address - -- Owner-only operation - -**`GetResolveAddressData`** - -```cpp -struct GetResolveAddressData_output { - uint8 result; - id address; -}; -``` - -- Returns mapped address for domain - -### Management - -**`RenewDomain`** - -```cpp -struct RenewDomain_input { - Domain domain; - uint16 yearsToRenew; -}; -struct RenewDomain_output { - uint8 result; -}; -``` - -- Extends registration period - -- Additional payment required - -**`TransferDomain`** - -```cpp -struct TransferDomain_input { - Domain domain; - id newOwner; -}; -struct TransferDomain_output { - uint8 result; -}; -``` - -- Transfers ownership to new address - -- Requires 100 QU transfer fee - -## System Procedure - -### `INITIALIZE` - -- Sets up default TLDs (.qubic, .qns) - -- Initializes empty data structures - -### `BEGIN_EPOCH` - -- Processes domain expirations - -- Cleans up stale data - -- Runs automatically each epoch - -## Security Notes - -- All modifications require owner authorization - -- Payments verified before processing - -- Automatic expiration prevents squatting - -- Input validation on all operations diff --git a/docs/developers/smart-contracts/smart-contract/_category_.json b/docs/developers/smart-contracts/smart-contract/_category_.json deleted file mode 100644 index 7a03b8f..0000000 --- a/docs/developers/smart-contracts/smart-contract/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Smart Contract", - "position": 3 -} diff --git a/docs/developers/smart-contracts/smart-contract/assets-and-shares.md b/docs/developers/smart-contracts/smart-contract/assets-and-shares.md deleted file mode 100644 index c50bdb5..0000000 --- a/docs/developers/smart-contracts/smart-contract/assets-and-shares.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Assets And Shares - -[**Example Source Code**](../sc-by-examples/assets-and-shares) - -Asset management rights can be transferred to other contracts through `qpi.releaseShares()` or `qpi.acquireShares()`, for example, if an asset has been issued using QX but an owner of some of its shares wants to trade them using a different exchange (not QX), the management rights of these shares need to be transferred to the other contract first. Shares that are managed by QX can be released to another contract (transferring rights to manage ownership and possession) by invoking the QX user procedure `TransferShareManagementRights` (with owner/possessor as invocator). QX rejects all attempts (`qpi.acquireShares()`) of other contracts to acquire rights from QX. - -## Management rights transfer - -There are two ways of transferring asset management rights: - -- The contract already having management rights releases them to another contract by calling `qpi.releaseShares(`). - -- The contract needing management rights acquires them from the contract having the rights by calling `qpi.acquireShares()`. - -### Transferring rights with `qpi.releaseShares()` - -Let's assume contract A has management rights of shares and wants to transfer them to contract B. -Contract A can try to do this by calling `qpi.releaseShares()`. -In this call, the following happens: - -![qpi.releaseShares()](/img/releaseShares.png) - -After checking the inputs passed to `qpi.releaseShares()` by contract A, the system calls `PRE_ACQUIRE_SHARES()` of contract B to (1) query if it is willing to acquire the management rights and (2) query the fee that A needs to pay to B for the rights transfer. - -An instance of the following struct is passed to the system procedure `PRE_ACQUIRE_SHARES()` of contract B as `input`: - -```cpp -struct PreManagementRightsTransfer_input -{ - Asset asset; - id owner; - id possessor; - sint64 numberOfShares; - sint64 offeredFee; - uint16 otherContractIndex; -}; -``` - -An instance of the following struct is passed to the system procedure `PRE_ACQUIRE_SHARES()` of contract B as `output`: - -```cpp -struct PreManagementRightsTransfer_output -{ - bool allowTransfer; - sint64 requestedFee; -}; -``` - -By default, all of `output` is set to zero, that is, `allowTransfer = false`. -Thus, if `PRE_ACQUIRE_SHARES()` is not defined or empty, all transfers are rejected. -Set `output.allowTransfer = true` in order to accept the rights transfer. - -If `allowTransfer` is `false` or `requestedFee > offeredFee`, the transfer is canceled. -Otherwise, the `requestedFee` is transferred from contract A to B, followed by the transfer of the management rights from contract A to B. - -Finally, the system procedure `POST_ACQUIRE_SHARES()` is called in contract B, passing an instance of the following struct as `input`: - -```cpp -struct PostManagementRightsTransfer_input -{ - Asset asset; - id owner; - id possessor; - sint64 numberOfShares; - sint64 receivedFee; - uint16 otherContractIndex; -}; -``` - -The output of `POST_ACQUIRE_SHARES()` is empty (`NoData`). - -Calling `qpi.releaseShares()` and `qpi.acquireShares()` is not permitted in the system procedures `PRE_ACQUIRE_SHARES()` and `POST_ACQUIRE_SHARES()`, that is, they will return with an error in such a context. - -The function `qpi.releaseShares()` has the following parameters and return value: - -```cpp -sint64 releaseShares( - const Asset& asset, - const id& owner, - const id& possessor, - sint64 numberOfShares, - uint16 destinationOwnershipManagingContractIndex, - uint16 destinationPossessionManagingContractIndex, - sint64 offeredTransferFee -); -``` - -On success, it returns the payed fee, which is >= 0. -If `offeredTransferFee` or the contract balance is not sufficient, it returns `-requestedFee`. -In case of another error, it returns `INVALID_AMOUNT` (which is a negative number of large amount). - -For more details, refer to the code of `qpi.releaseShares()` in `src/contract_core/qpi_asset_impl.h`. - -### Transferring rights with `qpi.acquireShares()` - -Let's assume contract A has management rights of shares and contract B wants to get them. -Contract B can try to do this by calling `qpi.acquireShares()`. -In this call, the following happens: - -![qpi.acquireShares()](/img/acquireShares.png "qpi.acquireShares()") - -After checking the inputs passed to `qpi.acquireShares()` by contract B, the system calls `PRE_RELEASE_SHARES()` of contract A to (1) query if it is willing to release the management rights and (2) query the fee that B needs to pay to A for the rights transfer. - -An instance of the following struct is passed to the system procedure `PRE_RELEASE_SHARES()` of contract A as `input`: - -```cpp -struct PreManagementRightsTransfer_input -{ - Asset asset; - id owner; - id possessor; - sint64 numberOfShares; - sint64 offeredFee; - uint16 otherContractIndex; -}; -``` - -An instance of the following struct is passed to the system procedure `PRE_RELEASE_SHARES()` of contract A as `output`: - -```cpp -struct PreManagementRightsTransfer_output -{ - bool allowTransfer; - sint64 requestedFee; -}; -``` - -By default, all of `output` is set to zero, that is, `allowTransfer = false`. -Thus, if `PRE_RELEASE_SHARES()` is not defined or empty, all transfers are rejected. -Set `output.allowTransfer = true` in order to accept the rights transfer. - -If `allowTransfer` is `false` or `requestedFee > offeredFee`, the transfer is canceled. -Otherwise, the `requestedFee` is transferred from contract B to A, followed by the transfer of the management rights from contract A to B. - -Finally, the system procedure `POST_RELEASE_SHARES()` is called in contract A, passing an instance of the following struct as `input`: - -```cpp -struct PostManagementRightsTransfer_input -{ - Asset asset; - id owner; - id possessor; - sint64 numberOfShares; - sint64 receivedFee; - uint16 otherContractIndex; -}; -``` - -The output of `POST_RELEASE_SHARES()` is empty (`NoData`). - -Calling `qpi.releaseShares()` and `qpi.acquireShares()` is not permitted in the system procedures `PRE_RELEASE_SHARES()` and `POST_RELEASE_SHARES()`, that is, they will return with an error in such a context. - -The function `qpi.acquireShares()` has the following parameters and return value: - -```cpp -sint64 acquireShares( - const Asset& asset, - const id& owner, - const id& possessor, - sint64 numberOfShares, - uint16 sourceOwnershipManagingContractIndex, - uint16 sourcePossessionManagingContractIndex, - sint64 offeredTransferFee -); -``` - -On success, it returns the payed fee, which is >= 0. -If `offeredTransferFee` or the contract balance is not sufficient, it returns `-requestedFee`. -In case of another error, it returns `INVALID_AMOUNT` (which is a negative number of large amount). - -For more details, refer to the code of `qpi.acquireShares()` in `src/contract_core/qpi_asset_impl.h`. - -#### Notes and recommendations - -By default, management rights of shares can be transferred without the agreement of the owner/possessor, given that both contracts agree on the transfer and the requested transfer fee is paid. -However, this feature is to be used with caution, because there is a risk of hijacking management rights, requesting a high fee for getting (back) management rights of shares. -This is why the recommended way (that is implemented in QX) is that the owner/possessor needs to invoke a user procedure that actively releases the management rights by calling `qpi.releaseShares()`. -QX never releases shares passively (following call of `qpi.acquireShares()` by another contract). -The callbacks `PRE_RELEASE_SHARES()` and `PRE_ACQUIRE_SHARES()` may also check that the `qpi.originator()` initiating the transfer is the owner/possessor. diff --git a/docs/developers/smart-contracts/smart-contract/code-style.md b/docs/developers/smart-contracts/smart-contract/code-style.md deleted file mode 100644 index 34f70ac..0000000 --- a/docs/developers/smart-contracts/smart-contract/code-style.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Smart Contract Style Guide - -Smart contracts are easier to read, maintain, and audit when they follow a consistent style. -This guide defines the conventions for naming, constants, and formatting that should be used when writing contracts, ensuring clarity and reducing errors. - -## Function And Procedure Naming - -Use **camelCase** for naming functions, procedures, and their input/output structures. - -```cpp -struct getStateNumber_input -{ -}; - -struct getStateNumber_output -{ - uint64 stateNumber; -}; - -PUBLIC_FUNCTION(getStateNumber) -{ -} -``` - -## Constants naming - -Use `ALL_CAPS` for constants in your contract. - -```cpp -constexpr uint8 MYCONTRACT_VAR1 = 1; -``` - -## Curly Braces - -Always place `{}` on a new line. - -```cpp -// if-else -if (cond) -{ - // do something -} -else -{ - // do something else -} -``` - -```cpp -// struct -struct myStruct -{ -}; -``` diff --git a/docs/developers/smart-contracts/smart-contract/contract-structure.md b/docs/developers/smart-contracts/smart-contract/contract-structure.md deleted file mode 100644 index f17bc01..0000000 --- a/docs/developers/smart-contracts/smart-contract/contract-structure.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Contract Structure - -Let's breakdown the adding contract we wrote before - -```cpp -using namespace QPI; - -struct MYTEST2 -{ -}; - -struct MYTEST : public ContractBase -{ -public: - struct add_input - { - sint64 a; - sint64 b; - }; - - struct add_output - { - sint64 out; - }; - - PUBLIC_FUNCTION(add) - { - output.out = input.a + input.b; - } - - REGISTER_USER_FUNCTIONS_AND_PROCEDURES() - { - REGISTER_USER_FUNCTION(add, 1); - } -}; -``` - -This line brings all QPI symbols into our current scope: - -```cpp -using namespace QPI; -``` - -Every contract includes a `[CONTRACT]2` struct, which is used for state expansion via the `EXPAND` procedure. However, since that feature isn't implemented yet, you can ignore it for now: - -```cpp -struct MYTEST2 -{ -}; -``` - -This is the main contract structure, where the state and logic reside. Inheriting from ContractBase is mandatory: - -```cpp -struct MYTEST : public ContractBase -{ -}; -``` - -This is a simple example of how to write a contract function that takes two numbers and returns their sum. Further details will be explained in a later section. - -```cpp -struct add_input -{ - sint64 a; - sint64 b; -}; - -struct add_output -{ - sint64 out; -}; - -PUBLIC_FUNCTION(add) -{ - output.out = input.a + input.b; -} - -``` - -To make this function callable, we need to register it and assign it a unique numeric ID. More on this will be covered later. - -```cpp - REGISTER_USER_FUNCTIONS_AND_PROCEDURES() - { - REGISTER_USER_FUNCTION(add, 1); - } -``` diff --git a/docs/developers/smart-contracts/smart-contract/cross-inner-call.md b/docs/developers/smart-contracts/smart-contract/cross-inner-call.md deleted file mode 100644 index 973da60..0000000 --- a/docs/developers/smart-contracts/smart-contract/cross-inner-call.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: Types Of Call And Invoke -sidebar_position: 7 ---- - -# - -## Inner-Contract Call - -Inner-contract calls occur when a Qubic smart contract invokes its own functions or procedures to modularize logic, reuse code, and manage state efficiently. Unlike cross-contract calls, these execute entirely within the same contract’s scope. - -**Macro** - -```cpp -#define CALL(functionOrProcedure, input, output) -``` - -**Example Code** - -Below program is to calculate sum 1 to 10 and square the sum: - -```cpp -///////////// Square Function ///////////// -struct square_input -{ - sint64 a; -}; - -struct square_output -{ - sint64 out; -}; - -// We should private the function that only used internally -PRIVATE_FUNCTION(square) -{ - output.out = input.a * input.a; -} - -///////////// SumSquareOneToTen Function ///////////// - -struct sumSquareOneToTen_input -{ -}; - -struct sumSquareOneToTen_output -{ - sint64 sum; -}; - -struct sumSquareOneToTen_locals -{ - sint64 i; - // Define input and output for the call also need to be in locals - square_input squareInput; - square_output squareOutput; -}; - -PUBLIC_FUNCTION_WITH_LOCALS(sumSquareOneToTen) -{ - for (locals.i = 1; locals.i <= 10; ++locals.i) - { - output.sum += locals.i; - } - locals.squareInput.a = output.sum; - CALL(square, locals.squareInput, locals.squareOutput); - output.sum = locals.squareOutput.out; -} -``` - -## Cross-Contract Call - -Cross-contract calls enable Qubic smart contracts to interact with each other, allowing for modular and reusable blockchain logic. Unlike inner-contract calls, which execute within the same contract, cross-contract calls invoke functions or procedures in external contracts, facilitating complex decentralized applications (dApps) and interoperable protocols. - -**Macros** - -```cpp -#define CALL_OTHER_CONTRACT_FUNCTION(contractStateType, function, input, output) -#define INVOKE_OTHER_CONTRACT_PROCEDURE(contractStateType, procedure, input, output, invocationReward) -``` - -:::warning INVOKE_OTHER_CONTRACT_PROCEDURE -Your contract will pay `invocationReward` amount of Qubic if the invoked contract consume these. -::: - -**Example Code** - -Let’s create an additional contract to interact with it. - -:::warning -Make sure to define the `Cross` contract in `contract_def.h` with a lower index and position it before the `MyTest` definition. -::: - -```cpp title="Cross.h" -#pragma once - -using namespace QPI; - -struct CROSS2 -{ -}; - -struct CROSS : public ContractBase -{ - public: - sint64 crossStateNumber; - - struct setCrossStateNumber_input - { - sint64 crossStateNumber; - }; - - struct setCrossStateNumber_output - { - }; - - PUBLIC_PROCEDURE(setCrossStateNumber) - { - state.crossStateNumber = input.crossStateNumber; - } - - struct getCrossStateNumber_input - { - }; - - struct getCrossStateNumber_output - { - sint64 crossStateNumber; - }; - - PUBLIC_FUNCTION(getCrossStateNumber) - { - output.crossStateNumber = state.crossStateNumber; - } - - REGISTER_USER_FUNCTIONS_AND_PROCEDURES() - { - REGISTER_USER_PROCEDURE(setCrossStateNumber, 1); - REGISTER_USER_FUNCTION(getCrossStateNumber, 1); - } -}; -``` - -Let's now try to invoke the `setCrossStateNumber` of `Cross` from `MyTest` contract - -```cpp title="MyTest.h" -using namespace QPI; - -struct MYTEST2 -{ -}; - -struct MYTEST : public ContractBase -{ - public: - - struct crossSetStateNumberInMyTest_input - { - sint64 crossStateNumber; - }; - - struct crossSetStateNumberInMyTest_output - { - bit success; - }; - - struct crossSetStateNumberInMyTest_locals - { - // Input and Output the CROSS procedure invoke - CROSS::setCrossStateNumber_input crossInputProcedure; - CROSS::setCrossStateNumber_output crossOutputProcedure; - // Input and Output the CROSS function invoke - CROSS::getCrossStateNumber_input crossGetInputFunction; - CROSS::getCrossStateNumber_output crossGetOutputFunction; - - sint64 crossStateNumber; - }; - - PUBLIC_PROCEDURE_WITH_LOCALS(crossSetStateNumberInMyTest) - { - locals.crossInputProcedure.crossStateNumber = input.crossStateNumber; - // Set the cross state number in the CROSS contract - INVOKE_OTHER_CONTRACT_PROCEDURE(CROSS, setCrossStateNumber, locals.crossInputProcedure, locals.crossOutputProcedure, qpi.invocationReward()); - // Now get the cross state number from the CROSS contract - CALL_OTHER_CONTRACT_FUNCTION(CROSS, getCrossStateNumber, locals.crossGetInputFunction, locals.crossGetOutputFunction); - - locals.crossStateNumber = locals.crossGetOutputFunction.crossStateNumber; - // Check if the cross state number is set correctly - if (locals.crossStateNumber != input.crossStateNumber) - { - output.success = false; - } - else - { - output.success = true; - } - } - - REGISTER_USER_FUNCTIONS_AND_PROCEDURES() - { - REGISTER_USER_PROCEDURE(crossSetStateNumberInMyTest, 10); - } -}; - -``` - -:::warning -If your contract calls a function or procedure from another contract, you must also call `INIT_CONTRACT()` for that contract in test environment. -::: - -## Rules & Best Practices - -### Allowed Patterns - -✅ Function → Function - -✅ Procedure → Procedure - -✅ Procedure → Function - -### Restricted Patterns - -❌ Function → Procedure (Functions cannot modify state) - -### Best Practices - -- **Use `PRIVATE` Scope** - - Restrict inner calls to `PRIVATE_FUNCTION/PRIVATE_PROCEDURE` unless external access is needed. diff --git a/docs/developers/smart-contracts/smart-contract/data-types.md b/docs/developers/smart-contracts/smart-contract/data-types.md deleted file mode 100644 index 7d93f7c..0000000 --- a/docs/developers/smart-contracts/smart-contract/data-types.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Data Types - -## Integers - -Native integer types are **prohibited** in Qubic smart contracts. Instead, use the integer types provided by QPI: `sint8`, `uint8`, `sint16`, `uint16`, `sint32`, `uint32`, `sint64`, and `uint64`. - -```cpp -sint8 a = 1; -uint64 b = 10000000000; -``` - -## Booleans - -Booleans is resperent by `bit` data type - -```cpp -bit isRight = true; -bit isWrong = false; -bit notSure = true & false; -``` - -## Id - -To respersent user public key we can use the `id` data type, which consists of 256 bits - -```cpp -id user1 = id(1,2,3,4); -id user2 = id(2,3,4,5); -``` - -## Array - -Array of L elements of type T (L must be 2^N) - -:::note -Read more about Array at `QPI::Array` -::: - -```cpp -Array arr; -arr.set(0, 1); -cout << arr.get(0) << endl; // print 1 -``` - -## BitArray - -Array of L bits encoded in array of uint64 (overall size is at least 8 bytes, L must be 2^N) - -:::note -Read more about BitArray at `QPI::BitArray` -::: - -```cpp -BitArray arr; -arr.set(1, 0); -cout << arr.get(1) << endl; // print 0 -``` - -## HashMap - -Hash map of (key, value) pairs of type (KeyT, ValueT) and total element capacity L. - -:::note -Read more about HashMap at `QPI::HashMap` -::: - -```cpp -// template -// Length must be 2^n -HashMap map; -map.set(0, 1); - -uint64 value; -map.get(0, value); - -cout << value << endl; // print 1 -``` - -## HashSet - -Hash set of keys of type KeyT and total element capacity L. - -:::note -Read more about HashSet at `QPI::HashSet` -::: - -```cpp -// template -// Length must be 2^n -HashSet set; -set.add(0); - -cout << set.contains(0); // print true -``` - -## Collection - -Collection of priority queues of elements with type T and total element capacity L. - -:::note -Read more about Collection at `QPI::Collection` -::: - -```cpp -// template -// Length must be 2^n -Collection collection = Collection(); -collection.add(id::zero(), 1, 1); -collection.add(id::zero(), 2, 2); - -cout << collection.population() << endl; // print 2 -cout << collection.element(collection.headIndex(id::zero())) << endl; // print 2 -``` diff --git a/docs/developers/smart-contracts/smart-contract/how-sc-actually-work.md b/docs/developers/smart-contracts/smart-contract/how-sc-actually-work.md deleted file mode 100644 index 6c88600..0000000 --- a/docs/developers/smart-contracts/smart-contract/how-sc-actually-work.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: How Actually It Works -sidebar_position: 2 ---- - -# Introduction - -As mentioned earlier, Qubic smart contracts run directly on bare metal—no virtual machine involved. But how does it actually work? Let’s explore. - -## How It Works - -In Qubic, a smart contract is simply a C++ class with methods. The state of your contract is stored in the members of the smart contract class instance. - -## Functions and Procedures - -- **Procedure:** If a method modifies the members of the smart contract instance, it’s called a **Procedure**. -- **Function:** If a method only reads member variables without modifying them, it’s called a **Function**. - -## Interacting with Smart Contracts in Qubic - -- **Function:** Invoked via TCP messages. You send a message to a node requesting it to call a specific function, and the node immediately returns the response. -- **Procedure:** Invoked via transactions. Since it modifies the contract state, all nodes must execute it and update the state. The transaction specifies the contract address, the **procedure** to call, and its **parameters**. diff --git a/docs/developers/smart-contracts/smart-contract/overview.md b/docs/developers/smart-contracts/smart-contract/overview.md deleted file mode 100644 index 07a565e..0000000 --- a/docs/developers/smart-contracts/smart-contract/overview.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Overview - -In Qubic, smart contracts are implemented in a restricted variant of **C++** and compiled into the Qubic Core executable. - -To isolate contracts, access to other contracts and Core internals is only allowed via the `QPI` (Qubic Programming Interface), the sole external dependency permitted. Using libraries is forbidden. Contracts also cannot use insecure **C++** features like pointers, low-level arrays (no bounds checking), or preprocessor directives. All memory is zero-initialized, so contracts never access uninitialized memory. - -A contract has a state struct, containing all its data as member variables. The memory available to the contract is allocated statically, but extending the state will be possible between epochs through special `EXPAND` events. - -**Important considerations for contract developers:** - -- Contract execution incurs fees, paid from an execution fee reserve funded by QUs burned during the IPO and through ongoing burns. A contract must continue burning QUs to stay active—once the reserve is empty, it stops executing. See [Contract Execution Fees](/learn/contract-execution-fees) for details. diff --git a/docs/developers/smart-contracts/smart-contract/procedures-and-functions.md b/docs/developers/smart-contracts/smart-contract/procedures-and-functions.md deleted file mode 100644 index 3e23388..0000000 --- a/docs/developers/smart-contracts/smart-contract/procedures-and-functions.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Procedures and Functions - -In Qubic, contract logic is divided into functions and procedures, each serving a distinct purpose: - -## Functions - -User functions **cannot** modify the contract's state, but they are useful to query information from the state, either with the network message `RequestContractFunction`, or by a function or procedure of the same or another contract. - -- **Example:** - -```cpp -// PUBLIC_FUNCTION can be called by other contracts -PUBLIC_FUNCTION(myFunc) -{ - // code -} -``` - -```cpp -// PRIVATE_FUNCTION are only available in current contract -PRIVATE_FUNCTION(myFunc) -{ - // code -} -``` - -:::note -Functions can be called by procedures, but procedures cannot be called by functions. -::: - -## Procedures - -User procedures **can** modify the state. They are invoked either by transactions with the ID (public key) of the contract being the destination address, or from another procedure of the same contract or a different contract. - -- **Example** - -```cpp -// A PUBLIC procedure can be called by other contracts with larger -// contract index (contracts deployed after). -PUBLIC_PROCEDURE(updateBalance) -{ - state.balance += input.amount; -} -``` - -```cpp -// A PRIVATE procedure cannot be called by other contracts. -PRIVATE_PROCEDURE(updateBalance) -{ - state.balance += input.amount; -} -``` - -## Input & Output - -To receive input and return output in functions & procedures we need to define the struct `[NAME]_input` and `[NAME]_output`. A reference to an instance of `[NAME]_input` named `input` is passed to functions & procedures containing the input data. Further, a reference to an instance of `[NAME]_output` named `output` is passed to the functions & procedures (initialized with zeros), which should be modified. - -**1. Example how to declare input and output for square function** - -```cpp -struct square_input -{ - sint64 x; -}; - -struct square_output -{ - sint64 result; -}; - -PUBLIC_FUNCTION(square) -{ - output.result = input.x * input.x; -} -``` - -**2. Example how to declare input and output for setPrice procedure** - -```cpp -struct setPrice_input -{ - sint64 price; -}; - -// Leave output empty if not used -struct setPrice_output -{ -}; - -PUBLIC_PROCEDURE(setPrice) -{ - state.price = input.price; -} -``` - -:::note -Procedures's ouput is returned if the procedure is invoked from another procedure, but unused if the procedure has been invoked directly through a transaction. -::: - -## System Procedure - -System procedures can modify the state and are invoked by the Qubic Core (the system) as event callbacks. - -They are defined with the following macros: - -| Procedure | Description | -| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **1. INITIALIZE()** | Called once after a successful IPO, just before the construction epoch begins, to initialize the contract state. | -| **2. BEGIN_EPOCH()** | Called at the start of each epoch, after node startup or seamless epoch transition, and before the first tick (`BEGIN_TICK()`). | -| **3. END_EPOCH()** | Called after each epoch ends, after the last `END_TICK()`, and before (1) contract shares are generated (IPO), (2) revenue and donations are distributed, and (3) the epoch counter advances. | -| **4. BEGIN_TICK()** | Called before each tick is processed (i.e., before executing the tick’s transactions). | -| **5. END_TICK()** | Called after all transactions in a tick have been executed. | -| **6. PRE_RELEASE_SHARES()** | Called before this contract transfers asset management rights to another contract using `qpi.acquireShare()`. | -| **7. PRE_ACQUIRE_SHARES()** | Called before this contract receives asset management rights from another contract using `qpi.releaseShare()`. | -| **8. POST_RELEASE_SHARES()** | Called after this contract has transferred asset management rights to another contract via `qpi.acquireShare()`. | -| **9. POST_ACQUIRE_SHARES()** | Called after this contract has received asset management rights from another contract via `qpi.releaseShare()`. | -| **10. POST_INCOMING_TRANSFER()** | Called after QUs have been transferred to this contract. | - -**1. Example to use BEGIN_EPOCH procedure** - -```cpp -// Increase number every epoch -BEGIN_EPOCH() -{ - state.number++; -} -``` - -**2. Example to use BEGIN_TICK procedure** - -```cpp -BEGIN_TICK() -{ - if (qpi.tick() % 2) - { - // do something here - } -} -``` - -:::note -System procedures 1 to 5 have no input and output. The input and output of system procedures 6 to 9 are discussed in the section about [Assets And Shares](./assets-and-shares.md). -::: - -## Local Variables - -In QUBIC contract creating local variables / objects on the regular function call stack is **forbidden**. If we want to use local variable (eg. tmp variables, `i` for the `for` loop) we will need help of postfix `_WITH_LOCALS` before declare Function and Procedure macros. Function and Procedure end with `_WITH_LOCALS` have to define the struct `[NAME]_locals`. A reference to an instance of `[NAME]_locals` named `locals` is passed to the function and procedure (initialized with zeros). - -**1. Example how to use locals variable** - -```cpp -struct sumOneToTen_input -{ - // no input fields -}; - -struct sumOneToTen_output -{ - sint64 sum; -}; - -struct sumOneToTen_locals -{ - sint64 i; -}; - -PUBLIC_FUNCTION_WITH_LOCALS(sumOneToTen) -{ - // Reminder: A reference to an instance of `[NAME]_locals` named `locals` - // is passed to the function and procedure (initialized with zeros). - for (locals.i = 1; locals.i <= 10; ++locals.i) { - output.sum += locals.i; - } -} -``` - -## Register Function And Procedure - -In order to make the function and procedure available you need to call `REGISTER_USER_FUNCTION([NAME], [INPUT_TYPE]);` for function and `REGISTER_USER_PROCEDURE([NAME], [INPUT_TYPE]);` for procedure. `INPUT_TYPE` is the unique id of the funtion or the procedure. - -`REGISTER_USER_FUNCTION` and `REGISTER_USER_PROCEDURE` must be called in `REGISTER_USER_FUNCTIONS_AND_PROCEDURES` block. - -**1. Example how to register functions and procedure** - -```cpp -PUBLIC_FUNCTION(myFunc) -{ -} - -PUBLIC_PROCEDURE(updateBalance) -{ -} - -REGISTER_USER_FUNCTIONS_AND_PROCEDURES() -{ - REGISTER_USER_FUNCTION(myFunc, 1); - // REGISTER_USER_FUNCTION(myFunc2, 1); is WRONG, 2 functions can't have same id - - REGISTER_USER_PROCEDURE(updateBalance, 2); - // REGISTER_USER_PROCEDURE(updateBalance2, 1); is OK -} -``` - -:::info -Two functions or two procedures cannot share the same id. However, a function and a procedure can use the same id without conflict. -::: diff --git a/docs/developers/smart-contracts/smart-contract/programs-in-practice.md b/docs/developers/smart-contracts/smart-contract/programs-in-practice.md deleted file mode 100644 index 50b69b6..0000000 --- a/docs/developers/smart-contracts/smart-contract/programs-in-practice.md +++ /dev/null @@ -1,186 +0,0 @@ -# Programs in Practice - -## Constant - -Constants used in Qubic smart contracts should be defined with `constexpr` and follow the naming convention `[CONTRACT_NAME]_VARIABLE`. - -```cpp -using namespace QPI; - -constexpr sint64 MYTEST_FEE = 1000; -constexpr uint32 MYTEST_INITIAL_TICK = 19'000; - -struct MYTEST2 -{ -}; - -struct MYTEST : public ContractBase -{ -}; -``` - -## User Defined DataType - -User-defined data types must be declared inside the contract struct to avoid name conflicts between different contracts. - -```cpp -using namespace QPI; - -struct MYTEST2 -{ -}; - -struct MYTEST : public ContractBase -{ - struct User - { - // ... - }; - - struct Student - { - // ... - }; -}; - -``` - -## Contract Error - -Declare contract-specific errors as an `enum` - -```cpp -enum ContractNameError -{ - ERROR_1 = 1, - ERROR_2, -}; -``` - -## SELF And SELF_INDEX - -- `SELF` is your contract id (public key). Or you can generate it manually by `id(CONTRACT_INDEX, 0, 0 , 0)`. - -- `SELF_INDEX` is your contract index. - -## Smart Contract Initialization - -Always initialize all state variables explicitly in `INITIALIZE()` procedure. - -:::info -The contract’s state will be implicitly initialized to zero. -::: - -```cpp -INITIALIZE() -{ - state.a = 0; - state.b = 1; -} -``` - -## String Implementation - -Using `""` in smart contract is prohibited, use to represent string you can use this implementation. - -[**String Implementation**](https://github.com/hackerby888/qubic-sc-examples/blob/qubic-name-service/src/contracts/QNS.h#L42) - -[**String Implementation Extended**](https://github.com/hackerby888/qubic-sc-examples/blob/qubic-name-service/test/contract_qns.cpp#L22) - -## Advanced Data Types in QPI - -Qubic's Programming Interface (QPI) provides **high-performance, deterministic data structures** optimized for smart contract execution, including: - -### HashMap (Key-Value Store) - -**Example:** - -```cpp -// Token balance tracking -HashMap balances; -balances.set(userId, 1000); - -// Fast lookup -sint64 amount; -// get() will return false if userId does not exist in the HashMap -if (balances.get(userId, amount)) { - qpi.transfer(recipient, amount); -} -``` - -### BitArray (Compact Boolean Storage) - -**Example:** - -```cpp -// Track 256 permissions (uses only 32 bytes) -BitArray<256> userPermissions; - -// Set bit at position 42 to 'true' (grant access) -userPermissions.set(42, true); - -// Check permission status (returns 'bit' type) -bit hasAccess = userPermissions.get(42); - -// Bulk operation: Count active permissions -uint64 activeCount = 0; -for (uint64 i = 0; i < 256; ++i) { - if (userPermissions.get(i)) activeCount++; -} -``` - -### Collections (Priority Queues) - -**Example:** - -```cpp -// Define a task with priority -struct Task -{ - id requester; - uint64 dueTick; - Array data; -}; - -// Initialize collection (per PoV) -Collection taskQueue; // Holds 1024 tasks max - -// Add task with priority (lower = higher priority) -sint64 addTask(const id& pov, const Task& task) -{ - return taskQueue.add(pov, task, task.dueTick); -} - -// Process highest-priority task (lowest dueTick) -Task getNextTask(const id& pov) -{ - sint64 nextIdx = taskQueue.headIndex(pov, qpi.tick()); - if (nextIdx != NULL_INDEX) { - return taskQueue.element(nextIdx); - } - return Task{}; // Null task -} -``` - -### HashSet (Container Of Unique Elements) - -**Example:** - -```cpp -// Initialize HashSet with 256 slots (max 204 items at 80% load factor) -HashSet whitelist; - -// Add addresses to whitelist -whitelist.add(user1); // Returns true if added -whitelist.add(user2); - -// Check membership (O(1) average) -if (whitelist.contains(user1)) -{ - // Grant access -} - -// Remove entry -whitelist.remove(user2); // Marks for deletion -whitelist.cleanup(); // Reclaims space -``` diff --git a/docs/developers/smart-contracts/smart-contract/qpi.md b/docs/developers/smart-contracts/smart-contract/qpi.md deleted file mode 100644 index 80ed2d0..0000000 --- a/docs/developers/smart-contracts/smart-contract/qpi.md +++ /dev/null @@ -1,523 +0,0 @@ ---- -sidebar_position: 8 ---- - -# QPI - -## What is QPI? - -QPI stands for Qubic Programming Interface — a carefully designed and restricted programming interface used to develop smart contracts in the Qubic protocol. - -Unlike general-purpose C++ programming, QPI provides a safe, deterministic, and sandboxed environment that ensures all contracts behave consistently across all nodes in the Qubic network. This is essential to maintain consensus and trustless execution. - -## Why QPI Exists - -In a distributed, consensus-driven system like Qubic, **nondeterminism is dangerous**. If different nodes compute different results from the same contract call, the network breaks down. - -QPI solves this by: - -- **Restricting unsafe features** of C++ (like pointers, floats, raw memory access). - -- **Disallowing standard libraries** to avoid system-dependent behavior. - -- **Providing a strict interface** that all contracts must use to interact with the Core and with other contracts. - -## What QPI Provides - -QPI exposes a minimal but powerful set of features, including: - -| Capability | Description | -| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| **Custom Data Types** | Use safe and deterministic types like `sint64`, `uint32`, `Array`, `BitArray`, `id`, etc. | -| **Contract Communication** | Allows sending and receiving messages to/from other contracts. | -| **Asset and Share Handling** | Provides methods to issue, burn, transfer, and manage asset ownership. | -| **Tick & Epoch Lifecycle Hooks** | Contracts can react to epoch/tick transitions via `BEGIN_EPOCH()`, `END_TICK()`, etc. | -| **Contract Metadata Access** | Access to `qpi.invocator()`, `qpi.originator()`, `qpi.invocationReward()`, and similar context data. | -| **Safe Arithmetic** | Built-in functions like `div()`, `mod()` to avoid division-by-zero or float precision issues. | -| **Cryptographic Functions** | Cryptographic functionality through the K12 function, which is based on the KangarooTwelve (K12) hash algorithm. | -| **Memory Operations** | Low-level memory operations for efficiently copying and initializing data structures in smart contracts. eg. `copyMemory()`, `setMemory()` | - -## Core QPI Functions - -### qpi.invocator() - -The `qpi.invocator()` function returns the ID of the entity (user or contract) that directly called the current contract function/procedure. - -**Function Signature** - -```cpp -id invocator() const -``` - -**Example usage:** - -```cpp -PUBLIC_PROCEDURE(updateBalance) -{ - // Only allow user with public key id(1,2,3,4) to call this - if (qpi.invocator() != id(1,2,3,4)) { - return; - } - // ... proceed with logic ... -} -``` - -### qpi.originator() - -The `qpi.originator()` function returns the ID of the original transaction sender—the entity (user or contract) that initiated the entire call chain leading to the current contract execution. - -**Function Signature** - -```cpp -id originator() const -``` - -**How It Differs from `qpi.invocator()`** - -| Function | Returns | Example Call Chain (`Alice → ContractA → ContractB`) | -| ------------------ | -------------------------------- | ---------------------------------------------------- | -| **`originator()`** | Original sender (first in chain) | Inside `ContractB`: `Alice` | -| **`invocator()`** | Immediate caller (last in chain) | Inside `ContractB`: `ContractA` | - -**Example usage:** - -```cpp -PUBLIC_PROCEDURE(updateBalance) -{ - // Only allow direct calls from users (no intermediate contracts) - // Rejects any calls coming through other contracts in the call chain - if (qpi.invocator() != qpi.originator()) { - return; - } - // ... proceed with logic ... -} -``` - -### qpi.invocationReward() - -Returns the amount of Qu (Qubic's native token) attached to the current contract call as an invocation reward. - -**Function Signature** - -```cpp -sint64 invocationReward() const -``` - -**Paywall Protection Example:** - -```cpp -constexpr sint64 FEE = 1000; // 1000 QU required -PUBLIC_PROCEDURE(premiumFeature) { - if (qpi.invocationReward() < FEE) { - // user will lost 1000 QUs, because we don't give back - return; - } - // Grant access... -} -``` - -### qpi.transfer() - -Transfers QU (Qubic's native token) from the contract's balance to another address. - -**Function Signature** - -```cpp -inline sint64 transfer( // Attempts to transfer energy from this qubic - const id& destination, // Destination to transfer to, use NULL_ID to destroy the transferred energy - sint64 amount // Energy amount to transfer, must be in [0..1'000'000'000'000'000] range -) const; // Returns remaining energy amount; if the value is less than 0 then the attempt has failed, in this case the absolute value equals to the insufficient amount -``` - -**1. Basic Transfer** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(sendPayment) { - locals.result = qpi.transfer(input.recipientId, 1000); - if (locals.result < 0) { - return; - } - // Success: 'result' contains new balance -} -``` - -**2. Burn QU (Destroy Tokens)** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(burnTokens) { - locals.burned = qpi.transfer(NULL_ID, input.amount); - // burned = remaining balance -} -``` - -### qpi.burn() - -Permanently removes QU (Qubic's native token) from circulation by burning them from the contract's balance. - -**Function Signature** - -```cpp -sint64 burn(sint64 amount) const -``` - -**1. Basic Token Burning** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(burnTokens) { - locals.remaining = qpi.burn(1000); // Burn 1000 QU - if (locals.remaining < 0) { - return; - } - // Success: 'remaining' shows new balance -} -``` - -**2. Conditional Burn** - -```cpp -PUBLIC_PROCEDURE_WITH_LOCALS(burnExcess) { - if (state.balance > state.targetBalance) { - locals.excess = state.balance - state.targetBalance; - qpi.burn(locals.excess); // Burn surplus QU - } -} -``` - -### qpi.K12() - -Computes a **KangarooTwelve (K12)** cryptographic hash of input data, returning a 256-bit (32-byte) digest as an `id` type. - -**Function Signature** - -```cpp -template -id K12(const T& data) const -``` - -**1. Hashing Raw Data** - -```cpp -struct HashExample_input { - Array rawData; -}; - -struct HashExample_output { - id hashResult; -}; - -PUBLIC_FUNCTION(HashExample) { - // Compute K12 hash - output.hashResult = qpi.K12(input.rawData); -} -``` - -**2. Creating Unique IDs** - -```cpp -struct User { - id publicKey; - uint32 registrationDate; -}; - -struct createUserId_input { - id pub; -}; - -struct createUserId_output { - id hash; -}; - -struct createUserId_locals { - User user; -}; - -PUBLIC_FUNCTION_WITH_LOCALS(createUserId) { - locals.user = { input.pub, qpi.tick() }; - output.hash = qpi.K12(locals.user); // Deterministic ID -} -``` - -### qpi.issueAsset() - -The `issueAsset()` function allows smart contracts to create `new digital assets` on the Qubic network. These assets can represent anything from currencies to physical commodities. - -**Function Signature** - -```cpp -sint64 issueAsset( - uint64 assetName, - id issuer, - sint8 decimalPlaces, - sint64 numberOfShares, - uint64 unitOfMeasurement -) -``` - -**Parameters** - -| Parameter | Type | Range | Description | Example Value | -| --------------------- | -------- | --------------------- | --------------------------------------------- | --------------------- | -| **assetName** | `uint64` | 0 to 264-1 | 8-byte asset identifier (ASCII or hex) | `0x444C4F47` ("GOLD") | -| **issuer** | `id` | 256-bit | Owner's public key (must match caller) | `id(_A,_B,...,_Z)` | -| **decimalPlaces** | `sint8` | -128 to 127 | Number of decimal digits for fractional units | `3` (milli-units) | -| **numberOfShares** | `sint64` | 1 to 263-1 | Total supply to mint (must be positive) | `1_000_000` | -| **unitOfMeasurement** | `uint64` | 0 to 264-1 | Physical unit code (ASCII or hex) | `0x6B67` ("kg") | - -**Key Notes:** - -1. **Uniqueness**: `assetName` must be unique per issuer -2. **Authorization**: Caller must be the `issuer` -3. **Precision**: Negative `decimalPlaces` are allowed but uncommon -4. **Unit Codes**: Use SI unit abbreviations in hex - -**Example Use Case** - -```cpp -// Issue 1M "SILVER" tokens with gram precision -output.issuedShares = qpi.issueAsset( - 0x5245564c4953, // "SILVER" - issuerId, - 3, // 3 decimal places (grams) - 1'000'000, // 1M units - 0x6772616D // "gram" in hex -); -``` - -:::info -The functions `assetNameFromString` and `assetNameFromInt64` are useful in tests for converting asset names between string and `int64` formats. -::: - -### qpi.transferShareOwnershipAndPossession() - -Transfers both **legal ownership** and **physical possession** of asset shares in a single atomic operation. This is the most comprehensive asset transfer function in Qubic, combining two critical rights transfers into one call. - -**Function Signature** - -```cpp -sint64 transferShareOwnershipAndPossession( - uint64 assetName, - id issuer, - id owner, - id possessor, - sint64 numberOfShares, - id newOwnerAndPossessor -) -``` - -| Parameter | Type | Description | Required | Example Values | -| -------------------------- | -------- | -------------------------------------------------------------------------- | -------- | --------------------- | -| **`assetName`** | `uint64` | Unique 8-byte asset identifier (ASCII or hex encoded) | Yes | `0x474F4C44` ("GOLD") | -| **`issuer`** | `id` | 256-bit address of the original asset creator | Yes | `ID(_A, _B,...,_Z)` | -| **`owner`** | `id` | Current legal owner's address | Yes | `ID(_C, _B,...,_Y)` | -| **`possessor`** | `id` | Current holder's address (may differ from owner in custodial arrangements) | Yes | `ID(_E, _B,...,_Z)` | -| **`numberOfShares`** | `sint64` | Positive quantity of shares to transfer (1 to 263-1) | Yes | `500` | -| **`newOwnerAndPossessor`** | `id` | Recipient address or (`NULL_ID` burns shares) | Yes | `ID(_B, _B,...,_D)` | - -**Special Values** - -- `NULL_ID` for `newOwnerAndPossessor`: Permanently burns the specified shares -- Zero `numberOfShares`: Transaction will fail with `INVALID_AMOUNT` error - -**Authorization Rules** - -The caller must be: - -1. The current **owner** (for ownership transfer) - **OR** -2. The current **possessor** (for possession transfer) - **OR** -3. An authorized **managing contract** - -**Example Usage:** - -```cpp -// Transfer 100 "SILVER" shares from Alice to Bob -qpi.transferShareOwnershipAndPossession( - 0x53494C564552, // "SILVER" - issuerId, // Original creator - aliceId, // Current owner - aliceId, // Current possessor (self-custody) - 100, // Shares to transfer - bobId // New owner/possessor -); - -// Burn 50 shares -qpi.transferShareOwnershipAndPossession( - 0x474F4C44, - issuerId, - ownerId, - ownerId, - 50, - NULL_ID // Burn target -); -``` - -### qpi.numberOfShares() - -Gets the total supply or user-specific balances of asset shares. - -**Function Signature** - -```cpp -sint64 numberOfShares( - const Asset& asset, - const AssetOwnershipSelect& ownership = AssetOwnershipSelect::any(), - const AssetPossessionSelect& possession = AssetPossessionSelect::any() -) const -``` - -**Common Use Cases** - -**1. Get Total Asset Supply** - -```cpp -Asset gold = {issuerId, 0x474F4C44}; // "GOLD" -sint64 totalSupply = qpi.numberOfShares(gold); -``` - -**2. Check User Balance** - -```cpp -sint64 userBalance = qpi.numberOfShares( - gold, - AssetOwnershipSelect::byOwner(userId), // Filter by owner - AssetPossessionSelect::byPossessor(userId) // Filter by holder -); -``` - -**3. Check Managed Assets** - -```cpp -// Get shares managed by specific contract -sint64 managedShares = qpi.numberOfShares( - gold, - AssetOwnershipSelect::byManagingContract(contractIndex), - AssetPossessionSelect::any() -); -``` - -**Filter Options** - -For ownership/possession filters: - -```cpp -// Ownership filters -AssetOwnershipSelect::any() // All owners -AssetOwnershipSelect::byOwner(specificId) // Specific owner -AssetOwnershipSelect::byManagingContract(index) // Managed by contract - -// Possession filters -AssetPossessionSelect::any() // All possessors -AssetPossessionSelect::byPossessor(specificId) // Specific holder -AssetPossessionSelect::byManagingContract(index) // Managed by contract -``` - -### qpi.releaseShares() - -Mention in [Assets And Shares](./assets-and-shares) - -### qpi.acquireShares() - -Mention in [Assets And Shares](./assets-and-shares) - -### qpi.getEntity() - -Retrieves entity information (balance, transaction stats) from the Qubic ledger. - -**Function Signature** - -```cpp -bool getEntity( - const id& entityId, - Entity& outputEntity -) const -``` - -**Usage Examples** - -**_1. Basic Entity Lookup_** - -```cpp -struct getUserEntity_input { - id userId; -}; - -struct getUserEntity_output { - QPI::Entity userEntity; - sint64 balance; -}; - -PUBLIC_FUNCTION(getUserEntity) { - if (qpi.getEntity(input.userId, output.userEntity)) { - // Use entity data - output.balance = output.userEntity.incomingAmount - output.userEntity.outgoingAmount; - } else { - // Entity not found - } -} -``` - -### qpi.year|month|day|hour|minute|second|millisecond|tick|epoch|dayOfWeek() - -These functions provide access to the current date, time, and blockchain-specific timestamps - -:::note -All time/date functions return **UTC** values -::: - -:::warning -In the test environment, these functions will not work correctly—they will always return `0` unless an extra step is performed. This will be explained later. -::: - -```cpp -struct GetDateTime_input { - // Can be empty or contain parameters -}; - -struct GetDateTime_output { - uint8 year; - uint8 month; - uint8 day; - uint8 hour; - uint8 minute; - uint8 second; - uint16 millisecond; - uint32 tick; - uint16 epoch; -}; - -PUBLIC_FUNCTION(GetDateTime) { - // Get current date/time - output.year = qpi.year(); // 0-99 (2000-2099) - output.month = qpi.month(); // 1-12 - output.day = qpi.day(); // 1-31 - - // Get current time - output.hour = qpi.hour(); // 0-23 - output.minute = qpi.minute(); // 0-59 - output.second = qpi.second(); // 0-59 - output.millisecond = qpi.millisecond(); // 0-999 - - // Get Qubic-specific timings - output.tick = qpi.tick(); // Current tick - output.epoch = qpi.epoch(); // Current epoch -} - -struct DayOfWeek_input { - uint8 year; - uint8 month; - uint8 day; -}; - -struct DayOfWeek_output { - uint8 dayOfWeek; // 0=Wednesday, 1=Thursday,...6=Tuesday -}; - -PUBLIC_FUNCTION(DayOfWeek) { - output.dayOfWeek = qpi.dayOfWeek( - input.year, - input.month, - input.day - ); -} -``` diff --git a/docs/developers/smart-contracts/smart-contract/restrictions.md b/docs/developers/smart-contracts/smart-contract/restrictions.md deleted file mode 100644 index cf3d1c0..0000000 --- a/docs/developers/smart-contracts/smart-contract/restrictions.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Restrictions of C++ Language Features - -Qubic enforces strict coding rules to ensure determinism, security, and network-wide consistency. Below is a list of forbidden language features and why they are restricted: - -| Prohibited Feature | Reason | -| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Local variables on the stack | Avoids nondeterministic memory layouts. Use `_WITH_LOCALS` macros or store data in contract state. | -| Pointers (`*`, casting, dereferencing) | Unsafe and non-deterministic. Only allowed for multiplication. | -| Array brackets (`[ ]`) | Prevents unchecked buffer access and low-level arrays, which can lead to memory issues. | -| Preprocessor directives (`#`) | Disallowed to avoid hidden logic and platform-specific behavior. `#include "qpi.h"` is allowed only temporarily for IntelliSense. | -| Floating-point types (`float`, `double`) | Arithmetic is not deterministic across platforms. | -| Division (`/`) and modulo (`%`) | Division by zero may cause inconsistent behavior. Use `div()` and `mod()` instead, which return 0 safely. | -| Strings (`"`) and chars (`'`)` | Can lead to memory access violations or random memory jumps. | -| Variadic arguments (`...`) | Compiler-dependent and unsafe for auditing. | -| Double underscores (`__`) | Reserved for internal use; may conflict with system symbols. | -| `QpiContext`, `const_cast` | Can be misused to alter internal contract behavior. | -| Scope resolution (`::`) | Only allowed for structs, enums, and namespaces inside contracts or `qpi.h`. | -| `typedef`, `union` | Reduces code clarity and may be used to obscure logic or manipulate memory. | -| Global variables | Disallowed to avoid shared mutable state. Global constants must be prefixed with the contract state struct name. | -| Recursion / deep call nesting | Limited to 10 levels to ensure execution is bounded and safe. | -| Complex types in input/output | Only simple types (`sint`, `uint`, `bit`, `id`, `Array`, `BitArray`) are allowed. Complex types like `Collection` are banned to ensure consistent state. | diff --git a/docs/developers/smart-contracts/smart-contract/states.md b/docs/developers/smart-contracts/smart-contract/states.md deleted file mode 100644 index 9ef57b8..0000000 --- a/docs/developers/smart-contracts/smart-contract/states.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -sidebar_position: 6 ---- - -# States - -The state refers to the persistent data of a contract — essentially the member variables defined within the contract struct. It holds the current values of the contract and must remain **identical across all nodes** in the Qubic network to maintain deterministic execution and consensus. Any modification to the state must be performed carefully through defined procedures. - -The contract state is passed to the functions & procedures as a reference named `state`. - -**1. Example how to create a state number** - -The `myNumber` variable is called state of the `MYTEST` contract - -```cpp -struct MYTEST : public ContractBase -{ -public: - sint64 myNumber; -}; -``` - -**1. Example how to modify state number** - -```cpp -struct MYTEST : public ContractBase -{ -public: - sint64 myNumber; - - struct changeNumber_input - { - sint64 myNumber; - }; - - struct changeNumber_output - { - }; - - // Reminder: The contract state is passed to the functions & procedures - // as a reference named `state`. - PUBLIC_PROCEDURE(changeNumber) - { - // myNumber = input.myNumber; is wrong - state.myNumber = input.myNumber; - } - - // WRONG, function can't modify state - // PUBLIC_FUNCTION(changeNumber) - // { - // state.myNumber = input.myNumber; - // } -}; -``` - -:::warning -Attempting to modify the state inside a function will result in the error "expression must be a modifiable lvalue", because functions are not allowed to change contract state. -::: - -:::info -The memory available to the contract is allocated statically, but extending the state will be possible between epochs through special `EXPAND` events (this event is not implemented yet). -::: diff --git a/docs/developers/smart-contracts/testing/_category_.json b/docs/developers/smart-contracts/testing/_category_.json deleted file mode 100644 index 279cc8b..0000000 --- a/docs/developers/smart-contracts/testing/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Testing", - "position": 4 -} diff --git a/docs/developers/smart-contracts/testing/contract-testing.md b/docs/developers/smart-contracts/testing/contract-testing.md deleted file mode 100644 index bf20f25..0000000 --- a/docs/developers/smart-contracts/testing/contract-testing.md +++ /dev/null @@ -1,398 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Testing - -## Smart Contract Test Structure - -Let's break down the test we wrote to verify the `MYTEST` contract: - -```cpp -#define NO_UEFI - -#include "contract_testing.h" - -class ContractTestingMyTest : protected ContractTesting -{ -public: - ContractTestingMyTest() - { - initEmptySpectrum(); - initEmptyUniverse(); - INIT_CONTRACT(MYTEST); - } - - MYTEST::add_output add(sint64 a, sint64 b) - { - MYTEST::add_input input; - MYTEST::add_output output; - input.a = a; - input.b = b; - callFunction(MYTEST_CONTRACT_INDEX, 1, input, output); - return output; - } -}; - -TEST(MyTest, TestAdd) -{ - ContractTestingMyTest test; - MYTEST::add_output output = test.add(1, 2); - EXPECT_EQ(output.c, 3); -} -``` - -We define `#define NO_UEFI` because the test is executed in a standard OS environment, not within UEFI: - -```cpp -#define NO_UEFI -``` - -Include the testing framework: - -```cpp -#include "contract_testing.h" -``` - -The `ContractTesting` base class provides the interface and logic needed to test Qubic contracts. Contract interactions such as function calls or procedure invocations must happen within a subclass like `ContractTestingMyTest`: - -```cpp -class ContractTestingMyTest : protected ContractTesting {} -``` - -The constructor initializes the test environment: - -- `initEmptySpectrum()` initializes the storage for user QUs. -- `initEmptyUniverse()` sets up the asset universe. -- `INIT_CONTRACT(MYTEST);` loads our contract into the testing runtime. - -```cpp - ContractTestingMyTest() - { - initEmptySpectrum(); - initEmptyUniverse(); - INIT_CONTRACT(MYTEST); - } -``` - -:::info -You can skip `initEmptySpectrum()` or `initEmptyUniverse()` if your test doesn't involve QUs or assets. -::: - -:::warning -If `MyTest` contract calls functions or procedures from `XXX` contract, you must also need `INIT_CONTRACT(XXX);` -::: - -To test the `add` function, we call `callFunction` with: - -- The contract index (`MYTEST_CONTRACT_INDEX`) -- The registered function ID (`1`) -- The `input` and `output` structs - -After the call, `output` contains the result returned by the contract: - -```cpp -MYTEST::add_output add(sint64 a, sint64 b) -{ - MYTEST::add_input input; - MYTEST::add_output output; - input.a = a; - input.b = b; - callFunction(MYTEST_CONTRACT_INDEX, 1, input, output); - return output; -} -``` - -Finally, we define the test case using the `TEST` macro. We create a `ContractTestingMyTest` instance, call the `add` function with values `1` and `2`, and assert the result is `3`: - -```cpp -TEST(MyTest, TestAdd) -{ - ContractTestingMyTest test; - MYTEST::add_output output = test.add(1, 2); - EXPECT_EQ(output.c, 3); -} -``` - -:::info -Calling `INIT_CONTRACT()` will reset the contract state. So each time you create an instance of `ContractTestingMyTest` will reset the contract state, spectrum and the universe. -::: - -## Invoke User Procedure - -We have learned how to call contract function above, pretty simple right? Now let's learn how we can call our procedure from our test - -Assumming we have the below procedure in our contract : - -```cpp -sint64 myNumber; - -struct setMyNumber_input -{ - sint64 myNumber; -}; - -struct setMyNumber_output -{ -}; - -PUBLIC_PROCEDURE(setMyNumber) -{ - state.myNumber = input.myNumber; -} - -REGISTER_USER_FUNCTIONS_AND_PROCEDURES() -{ - REGISTER_USER_PROCEDURE(setMyNumber, 1); -} -``` - -So the test code will looke like: - -```cpp -class ContractTestingMyTest : protected ContractTesting -{ -public: -... - -MYTEST::setMyNumber_output setMyNumber(id user, sint64 number) -{ - MYTEST::setMyNumber_input input; - MYTEST::setMyNumber_output output; - input.myNumber = number; - EXPECT_TRUE(invokeUserProcedure(MYTEST_CONTRACT_INDEX, 1, input, output, user, 0)); - return output; -} - -... -} - -TEST(MyTest, SetMyNumber) -{ - ContractTestingMyTest test; - // Although the contract doesn't require QUs for execution, - // the caller must exist in the spectrum (i.e., have at least 1 QU) - // in order to successfully invoke a procedure. - increaseEnergy(user, 1'000'000); // Give user 1M QUs - MYTEST::setMyNumber_output output = test.setMyNumber(user, 42); -} - -``` - -It’s almost like calling a function, right? But there are some differences. - -To invoke a procedure, we use the `invokeUserProcedure` function. The first argument is the contract index, the second is the procedure ID, followed by the input and output structs. - -Since invoking a procedure in Qubic is actually making a transaction, we must also provide the sender (the user who creates the transaction) and the amount of QUs being transferred — which is 0 in our case. - -Finally, we check the return value of `invokeUserProcedure` to ensure the procedure call was successful by asserting it returns `true`. - -:::warning -Calling `increaseEnergy()` without `initEmptySpectrum()` without throw error at runtime. -::: - -## Query Contract State - -We have successfully invoked our procedure to set the `myNumber` state. But how can we verify that it was actually updated? - -There are two ways to query the contract state in our test. Let's explore them now. - -### 1. Use Function To Query State - -This is the traditional way to query state in both our tests and the real production environment. We simply create a function in our contract that returns the `myNumber` state, then call this function from our test. - -Let's see how to write this: - -```cpp - -struct getMyNumber_input -{ -}; - -struct getMyNumber_output -{ - sint64 myNumber; -}; - -PUBLIC_FUNCTION(getMyNumber) -{ - output.myNumber = state.myNumber; -} - - -REGISTER_USER_FUNCTIONS_AND_PROCEDURES() -{ - REGISTER_USER_FUNCTION(getMyNumber, 1); -} - -``` - -And then call the `getMyNumber` in our test: - -```cpp -class ContractTestingMyTest : protected ContractTesting -{ -public: -// ... - -MYTEST::setMyNumber_output setMyNumber(id user, sint64 number) -{ - // ... -} - -MYTEST::getMyNumber_output getMyNumber() -{ - MYTEST::getMyNumber_input input; - MYTEST::getMyNumber_output output; - callFunction(MYTEST_CONTRACT_INDEX, 1, input, output); - return output; -} - -// ... -} - -TEST(MyTest, SetAndGetMyNumber) -{ - ContractTestingMyTest test; - // Although the contract doesn't require QUs for execution, - // the caller must exist in the spectrum (i.e., have at least 1 QU) - // in order to successfully invoke a procedure. - increaseEnergy(user, 1'000'000); // Give user 1M QUs - MYTEST::setMyNumber_output output = test.setMyNumber(user, 42); - - MYTEST::getMyNumber_output getOutput = test.getMyNumber(); - // The myNumber state should be 42 - EXPECT_EQ(getOutput.myNumber, 42); -} -``` - -### 2. Use Contract Instance To Query State - -As shown, the state is members of the contract struct. This means that once we have an instance of the contract, we can directly access its state. - -A pointer to the contract instance is stored in the `contractStates` array. To retrieve our contract's pointer, we simply access it using the contract index `contractStates[NAME_CONTRACT_INDEX]`: - -```cpp -TEST(MyTest, SetMyNumber) -{ - ContractTestingMyTest test; - increaseEnergy(user, 1'000'000); - MYTEST::setMyNumber_output output = test.setMyNumber(user, 42); - - char* state = (char*)contractStates[MYTEST_CONTRACT_INDEX]; - // Read the first 64 bits from state pointer and cast it to sint64 type - EXPECT_EQ(*((sint64*)state), 42); -} -``` - -Now you can query the state without creating a contract function. However, this approach still feels a bit messy since it involves handling pointers. - -A cleaner solution is to create a struct that inherits from the state struct and implement a function to retrieve `myNumber`: - -```cpp -struct MYTESTGetter : public MYTEST -{ - sint64 getMyNumber() - { - return this->myNumber; - } -}; - -TEST(MyTest, SetMyNumber) -{ - ContractTestingMyTest test; - increaseEnergy(user, 1'000'000); - MYTEST::setMyNumber_output output = test.setMyNumber(user, 42); - - // Cast the pointer to MYTESTGetter pointer so we can call our getMyNumber() - MYTESTGetter* state = (MYTESTGetter*)contractStates[MYTEST_CONTRACT_INDEX]; - EXPECT_EQ(state->getMyNumber(), 42); -} -``` - -## Invoke System Procedure - -In the test environment, we can directly invoke system procedures to verify whether our logic works correctly. - -:::note -But keep in mind: when we deploy our contract, system procedures are automatically triggered by the Qubic network and **cannot be invoked manually.** -::: - -```cpp -class ContractTestingMyTest : protected ContractTesting -{ -public: -// ... - -void beginEpoch() -{ - callSystemProcedure(MYTEST_CONTRACT_INDEX, BEGIN_EPOCH); -} - -void endEpoch() -{ - callSystemProcedure(MYTEST_CONTRACT_INDEX, END_EPOCH); -} - -// ... -} - -TEST(MyTest, TestBeginEpoch) -{ - ContractTestingMyTest test; - - test.beginEpoch(); - test.endEpoch(); -} -``` - -## Mock Data - -As mentioned in [QPI date and time functions](../smart-contract/qpi#qpiyearmonthdayhourminutesecondmillisecondtickepochdayofweek), they will not work correctly in the test environment without mocking the data (for example, `qpi.epoch()` will always return `0`). - -So, how can we mock this data? - -### qpi.epoch() - -```cpp -TEST(MyTest, TestEpoch) -{ - system.epoch = 199; - - // In contract call qpi.epoch() will return 199 - // output.epoch = qpi.epoch() -} -``` - -### qpi.tick() - -```cpp -TEST(MyTest, TestEpoch) -{ - system.tick = 2000; - - // In contract call qpi.tick() will return 2000 - // output.tick = qpi.tick() -} -``` - -### qpi.year|month|day|hour|minute|second|millisecond() - -```cpp -TEST(MyTest, TestEpoch) -{ - // To set current date for the core environment - updateTime(); - // Then reflect it to qpi - updateQpiTime(); - // Now qpi.year() or qpi.month(), ... will return correct value - - // We can also set time to any number - utcTime.Year = 2025; - utcTime.Month = 10; - utcTime.Day = 15; - // ... - // Then reflect it to qpi - updateQpiTime(); -} -``` diff --git a/docs/developers/smart-contracts/testing/overview.md b/docs/developers/smart-contracts/testing/overview.md deleted file mode 100644 index d7eda83..0000000 --- a/docs/developers/smart-contracts/testing/overview.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Overview - -## Overview - -Testing Qubic smart contracts is a critical step in ensuring their security, correctness, and efficiency before deployment. Due to Qubic's deterministic execution model and unique architecture, contract testing requires specialized approaches to verify: - -**1. State Integrity** – Contracts must maintain consistent state across all nodes - -**2. Deterministic Behavior** – Identical inputs must produce identical results - -**3. Contract Efficiency** – Optimize computation to minimize QU consumption from the contract's balance - -**4. Security Checks** – Prevent vulnerabilities like reentrancy or invalid state transitions - -## Qubic Testing Framework - -The Qubic Google Test (QGTest) framework is a specialized adaptation of Google Test (GTest) designed for testing Qubic smart contracts. Designed to simulate contract execution, validate logic, and ensure deterministic behavior without needing to run a full node or engage in live consensus. - -## Recommended Workflow - -### 1. Isolated Testing - -```cpp -// Example unit test for a transfer function -TEST(Contract, TransferFailsWhenUnderfunded) -{ - // code -} -``` - -### 2. Testnet Deployment - -- Use Qubic’s testnet mode to verify real-world behavior -- Monitor contract execution across multiple ticks diff --git a/docs/developers/smart-contracts/testing/testnet.md b/docs/developers/smart-contracts/testing/testnet.md deleted file mode 100644 index 931e804..0000000 --- a/docs/developers/smart-contracts/testing/testnet.md +++ /dev/null @@ -1,316 +0,0 @@ -# Testnet - -:::info -We recommend to use [Qubic Lite Core](https://github.com/hackerby888/qubic-core-lite) to create a local testnet instead of using VM to run .efi (tutorial below). It's much more easy to start! -::: - -Now let's learn how to deploy your custom smart contract to the Qubic Testnet. Unfortunately, deploying your contract requires setting up and running your own Qubic node on virtual machine, which can be a complex and challenging task. - -But don't worry — we're here to help you through it, step by step. - -:::info -Qubic has a public testnet, but deploying your contract requires assistance from the Qubic developers. To proceed, join their Discord and reach out to them directly. -::: - -## Requirements - -1. A server or computer with at least **8 CPU cores** (high-frequency CPU with AVX2 support). -2. At least **64 GB of RAM**. -3. A **100 Mbps synchronous internet connection**. - -**Pre-Setup:** Configure UTC Time on Your Machine - -:::note -A good place to rent the server with low cost is **hostkey.com**. Make sure to choose a **dedicated machine (Baremetal)** (eg., **bm.v1-big**), not a VPS. To minimize potential issues, please use **Ubuntu 22.04**. -::: - -:::warning -If your node logs appear choppy or laggy in RDP, it's likely that your CPU is too slow and not suitable for running a Qubic Core node. -::: - -## Prepare Qubic.efi - -### Intergrate SC - -To run the `core` node as a testnet with **64 GB**, some configuration changes are required. Instead of modifying manually, you can clone the `core` node repository and switch to the `testnets/release-xxx` branch. [Integrate your smart contract](../getting-started/add-your-contract) into this branch. - -:::info -To manually update the testnet configuration, see: https://github.com/qubic/core/commit/2beb2c227fb79225aa30d08adc155288b7e2f29d -::: - -### Change Public And Private Settings - -After integrate your custom sc, you will also need to change some settings: - -1. Edit `private_settings.h` and update `computorSeeds` with [676 seeds](https://github.com/hackerby888/core-docker/blob/main/computorSeeds.txt): - -```cpp -static unsigned char computorSeeds[][55 + 1] = { - // Place your 676 seeds here - // https://github.com/hackerby888/core-docker/blob/main/computorSeeds.txt -}; -``` - -2. Add your node IPs in `private_settings.h` - -```cpp -static const unsigned char knownPublicPeers[][4] = { - {192, 168, 1, 101}, // Your own node ip -}; -``` - -3. Change Epoch and Initial Tick in `public_settings.h` - -```cpp -#define EPOCH 170 -#define TICK 18480000 -``` - -:::warning -The `EPOCH` must match your `spectrum.EPOCH`, `universe.EPOCH` and `contracts` files (eg., `spectrum.170`) -::: - -4. Change ARBITRATOR in `public_settings.h` - -```cpp -#define ARBITRATOR "GVNXISEPVVSOQADMESMUYXNXABBCYFNKGPSNSSILQBOULADLKGWGXAFBCHXH" -``` - -:::warning -You must use the above ARBITRATOR ID. Otherwise, your broadcasted computor packets will be ignored and your node won’t tick. -::: - -Now build the Qubic project in Release mode to generate the `Qubic.efi`. - -## Prepare Contract State File - -The contract state file is a binary file that stores your contract’s state and is required when starting the Qubic node. - -Below is a test case to generate the binary contract state file. Insert this in your contract’s test suite and execute it: - -```cpp -TEST(Contract, GenerateContractState) { - // Change QNS to your contract struct - QNS* s = new QNS(); - memset(s, 0, sizeof(QNS)); - - FILE* f; - auto error = fopen_s(&f, "contract0013.170", "wb"); // Remember to replace with correct contract index and epoch - if (error != 0 || f == nullptr) { - std::cerr << "Error opening file" << std::endl; - delete s; - return; - } - - size_t written = fwrite(s, sizeof(QNS), 1, f); - if (written != 1) { - std::cerr << "Error writing to file" << std::endl; - fclose(f); - delete s; - return; - } - - if (fclose(f) != 0) { - std::cerr << "Error closing file" << std::endl; - delete s; - return; - } - - std::cout << "Written successfully" << std::endl; - delete s; -} -``` - -:::info -The binary contract file will be generated in the current working directory when the test runs. For example, if you're in `C:\Users\Admin\` and run `C:\Users\Admin\Projects\core\x64\Release\test.exe`, the output file will appear in `C:\Users\Admin\`. -::: - -## Prepare Epoch Zip File - -[Spectrum file](https://github.com/hackerby888/core-docker/blob/main/spectrum.zip) - -[List of 15B QUs seeds]() - -Now that you have `Qubic.efi` and `contract00xx.XXX`, you need to package them with the rest of the system files. - -To get the latest files, join the Qubic Discord, open the `computor-operator` channel, and download the latest `epxxx.zip` file from the pinned messages. - -1. Unzip the `.zip` file. - -2. Add `contract00xx.XXX` to the folder (Don't need to copy `Qubic.efi` because we will copy it using scripts in later step). - -3. Replace the `spectrum.xxx` file with the [above one](https://github.com/hackerby888/core-docker/blob/main/spectrum.zip) (remember to rename the epoch). Using the provided spectrum file will give your testnet [seeds 15B QUs](https://github.com/hackerby888/core-docker/blob/main/seeds%2BIDs(15blneach).txt). - -4. Repack the folder into a `.zip` archive. - -## Setup Enviroment And Start The Node - -:::info -We are recommend to use **Ubuntu 22.04** -::: - -Transfer `Qubic.efi` and `epxxx.zip` to your VM. - -Install VirtualBox: - -```bash -apt update -apt install -y freerdp2-x11 git cmake docker.io libxcb-cursor0 sshpass gcc-12 g++-12 dkms build-essential linux-headers-$(uname -r) gcc make perl curl tree unzip - -wget https://download.virtualbox.org/virtualbox/7.1.4/virtualbox-7.1_7.1.4-165100~Ubuntu~jammy_amd64.deb -wget https://download.virtualbox.org/virtualbox/7.1.4/Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack - -dpkg -i virtualbox-7.1_7.1.4-165100~Ubuntu~jammy_amd64.deb -apt --fix-broken install -y - -# Install VirtualBox Extension Pack with auto license acceptance -VBoxManage extpack install Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack --accept-license=eb31505e56e9b4d0fbca139104da41ac6f6b98f8e78968bdf01b1f3da3c4f9ae - -# Remove VirtualBox kernel modules and reconfigure -modprobe -r vboxnetflt vboxnetadp vboxpci vboxdrv -/sbin/vboxconfig - -``` - -Download and extract the Qubic VHD: - -```bash -wget https://files.qubic.world/qubic-vde.zip -O /tmp/qubic-vde.zip - -unzip -o /tmp/qubic-vde.zip -d /root/ -``` - -Clone the helper script repo: - -``` -git clone https://github.com/hackerby888/core-docker.git -``` - -Jump to the `core-docker` folder - -```bash -cd core-docker -``` - -Run the script - -```bash -chmod +x ./run_on_host.sh -./run_on_host.sh --epoch 170 --vhd ./qubic.vhd --port 31841 --memory 65536 --cpus 8 --epzip ./ep170.zip --efi ./Qubic.efi --headless -``` - -:::warning -Be sure to adjust the epoch, path to `qubic.vhd`, `Qubic.efi` and `epxxx.zip` as needed. -::: - -Successful launch output: - -``` -=================== LAUNCH QUBIC ON HOST =================== - EPOCH_NUMBER = 170 - QUBIC_VHD = ./qubic.vhd - PORT = 31841 - MEMORY_MB = 65536 - CPUS = 8 - EP_ZIP = ./ep170.zip - QUBIC_EFI = - SPECTRUM_000 = - HEADLESS = 1 - -... -... - -VHD modification completed successfully. Will unmount/detach on exit. -Unmounting /mnt/qubic... -Detaching loop device /dev/loop0... -Virtual machine 'Qubic' is created and registered. -UUID: 96fd1d76-3e97-45d6-a530-9d388f9d7d90 -Settings file: '/root/VirtualBox VMs/Qubic/Qubic.vbox' -Starting VM in headless mode (RDP available on port 5000)... -Waiting for VM "Qubic" to power on... -VM "Qubic" has been successfully started. -VM 'Qubic' started successfully. -``` - -## Watch Node Logs - -You can use **Remote Desktop Connection** in Window with `NODE_IP:5000` to see the logs. - -![png](/img/qrdp_1.png) - -## Make The Node Ticking - -To be able to make transactions, invoking contract procedures, your node must ticking. - -### Enable MAIN/MAIN mode - -- Press **F12** three times while the node is running to switch to `MAIN/MAIN` mode. - -![png](/img/qrdp_2.png) - -:::info -Press `F2` to see above screen -::: - -### Broadcast Computor - -```bash -chmod +x ./broadcastComputorTestnet -./broadcastComputorTestnet -``` - -- ip: The IP address of the node where you want to send the indices. -- epoch: The epoch number (e.g., 170). -- port: The port used by the node (e.g., 31843). - -Example output: - -```bash -root@31217:~/core-docker# ./broadcastComputorTestnet 162.120.18.26 170 31841 -Broadcasting computor list to 162.120.18.26:31841 epoch 170 -sent 21708 bytes -``` - -:::info -Press the `PAUSE` or `P` key to display the verbose log, which shows how many indices you have. -::: - -And your node should display the following screen: - -![png](/img/qrdp_3.png) - -Once the computors list is received, your node should begin ticking: - -![png](/img/qrdp_4.png) - -## Useful Commands - -### PowerOff Qubic Node - -```bash -VBoxManage controlvm "Qubic" poweroff -``` - -### PowerOn Quic Node - -```bash -VBoxManage startvm "Qubic" --type headless -``` - -### Delete Qubic Node - -```bash -VBoxManage unregistervm "Qubic" --delete -``` - -:::warning -This will also delete your qubic.vhd file. To keep VHD remove the `--delete` -::: - -## References - -https://github.com/KavataK/QubicNetworkDeploymentGuide - -https://github.com/KavataK/qubic-node-setup - -https://github.com/qubic/qubic-dev-kit diff --git a/docs/developers/testnet-resources.md b/docs/developers/testnet-resources.md deleted file mode 100644 index c77aaf3..0000000 --- a/docs/developers/testnet-resources.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Testnet Resources ---- - -# Qubic Testnet Resources - -This page provides information about resources available for testing and development on the Qubic testnet. - -## Testnet Faucet - -Need test funds for development? You can access the Qubic faucet: - -1. Join the [Qubic Discord](https://discord.gg/qubic) -2. Navigate to the `#bot-commands` channel -3. Use the faucet command to receive: - - 1000 Qubics on mainnet - - Test Qubics for the testnet RPC - -This will provide you with the necessary funds to test your smart contracts during development. - -## Available Testnet Seeds - -For testing purposes, the following pre-funded seeds are available on the testnet. Each seed contains approximately 1 billion Qubic tokens. - -``` -fwqatwliqyszxivzgtyyfllymopjimkyoreolgyflsnfpcytkhagqii -xpsxzzfqvaohzzwlbofvqkqeemzhnrscpeeokoumekfodtgzmwghtqm -ukzbkszgzpipmxrrqcxcppumxoxzerrvbjgthinzodrlyblkedutmsy -wgfqazfmgucrluchpuivdkguaijrowcnuclfsjrthfezqapnjelkgll -kewgvatawujuzikurbhwkrisjiubfxgfqkrvcqvfvgfgajphbvhlaos -nkhvicelolicthrcupurhzyftctcextifzkoyvcwgxnjsjdsfrtbrbl -otyqpudtgogpornpqbjfzkohralgffaajabxzhneoormvnstheuoyay -ttcrkhjulvxroglycvlpgesnxpwgjgvafpezwdezworzwcfobevoacx -mvssxxbnmincnnjhtrlbdffulimsbmzluzrtbjqcbvaqkeesjzevllk -jjhikmkgwhyflqdszdxpcjrilnoxerfeyttbbjahapatglpqgctnkue -nztizdwotovhuzchctpfdgylzmsdfxlvdcpikhmptqjbwwgbxavhtwo -lxbjeczdoqyjtzhizbeapkbpvfdbgxxbdbhyfvzhbkysmgdxuzspmwu -zwoggmzfbdhuxrikdhqrmcxaqmpmdblgsdjzlesfnyogxquwzutracm -inkzmjoxytbhmvuuailtfarjgooearejunwlzsnvczcamsvjlrobsof -htvhtfjxzqandmcshkfifmrsrikrcpsxmnemcjthtmyvsqqcvwckwfk -hmsmhamftvncxcdvxytqgdihxfncarwzatpjuoecjqhceoepysozwlp -wrnohgpgfuudvhtwnuyleimplivlxcaswuwqezusyjddgkdigtueswb -fisfusaykkovsskpgvsaclcjjyfstrstgpebxvsqeikhneqaxvqcwsf -jftgpcowwnmommeplhbvgotjxrtkmiddcjmitbxoekwunmlpmdakjzq -svaluwylhjejvyjvgmqsqjcufulhusbkkujwrwfgdphdmesqjirsoep -lzinqhyvomjzqoyluifguhytcgpftdxndswbcqriecatcmfidbnmvka -mqamjotnshocvekufdqylgtdcembtddlfockjyaotfdvzqpvkylsjjk -asueorfnexvnthcuicsqqppekcdrwizxqlnkzdkazsymrotjtmdnofe -ahfulnoaeuoiurixbjygqxiaklmiwhysazqylyqhitjsgezhqwnpgql -omyxajeenkikjvihmysvkbftzqrtsjfstlmycfwqjyaihtldnetvkrw -zrfpagcpqfkwjimnrehibkctvwsyzocuikgpedchcyaotcamzaxpivq -kexrupgtmbmwwzlcpqccemtgvolpzqezybmgaedaganynsnjijfyvcn -``` - -You can use these seeds with the Qubic CLI to interact with your deployed smart contracts. For example: - -```bash -./qubic-cli -nodeip YOUR_NODE_IP -nodeport YOUR_NODE_PORT -seed fwqatwliqyszxivzgtyyfllymopjimkyoreolgyflsnfpcytkhagqii -somecommand -``` - -## Testnet Nodes - -The public testnet node is available at `https://testnet-rpc.qubic.org`. This node can be used for general development and testing. - -For specific projects or hackathons, dedicated testnet nodes may be provided. These nodes offer isolated environments for testing smart contracts without interference from other developers. - -When using a dedicated testnet node: - -1. Each team's testnet node will have its own IP address and RPC endpoint -2. This allows you to call directly to your specific node -3. The testnet nodes are pre-configured to simplify the development process - -## Monitoring Transactions - -After deploying a smart contract to a testnet node, you can monitor real-time transaction logs using the qlogging service: - -```bash -./qubic/scripts/qlogging 127.0.0.1 31841 1 2 3 4 21180000 -``` - -This command will show real-time logs of transactions, transfers, and other events happening on your node. The output will look like: - -``` -EventTx #1FromId Told1 2[1] 21183461.153 QU transfer: from WTUBWAEQJHTFIEDXCJHVRXAXYBFCHAPQUPOQMGTJVGXYEBVRYTOVFHLFBCMB to MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWWD 10000QU. -Tick 21183462 doesn't generate any log -Tick 21183463 doesn't generate any log -... -[4] 21183473.153 Burn: MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWLWD burned 100000 QU -``` - -This is invaluable for debugging and understanding how your smart contract interacts with the network. - -## Best Practices for Testnet Development - -1. **Use the CLI for Initial Testing**: The Qubic CLI is the most direct way to interact with your contract -2. **Monitor Transaction Logs**: Use the qlogging service to understand what's happening with your transactions -3. **Test with Small Amounts**: Even with test funds, it's good practice to test with small amounts first -4. **Cleanup After Testing**: When using a dedicated node, clean up your deployment when finished -5. **Document Your Contract Index**: Keep track of your contract's index for future reference \ No newline at end of file diff --git a/docs/developers/ticks-and-concurrency.md b/docs/developers/ticks-and-concurrency.md deleted file mode 100644 index a51e3f7..0000000 --- a/docs/developers/ticks-and-concurrency.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Ticks and Concurrency ---- - -# Ticks and Concurrency - -## 1. Ticks vs Blocks - -**Different paradigm**: Qubic does NOT use blocks, it uses "ticks" - -Unlike traditional blockchains where transactions are grouped into blocks that are created every few minutes, Qubic operates on a fundamentally different architecture. The core unit of time and consensus is called a "tick." - -- **Tick definition**: A complete network state snapshot that occurs every ~0.2–5 seconds, containing all validated transactions and their effects for that specific moment in time. -- **Instant finality via quorum votes**: Once a tick receives votes from the quorum of 676 Computors, the transactions within it are immutably final. There is no concept of multiple confirmations like in Bitcoin – a transaction either succeeded in that tick or it didn’t. -- **Independent snapshots with quorum validation**: Unlike blockchain blocks that contain cryptographic hashes linking them to previous blocks, ticks do not reference previous ticks through hash chains. However, each tick is accepted based on quorum votes, which ensures consistency across the network -- **Automatic pruning**: At the end of each epoch (exactly 7 days), all historical transaction data is completely deleted from the network. Only the final account balances and essential state information survive into the next epoch. This radical approach eliminates blockchain bloat entirely - -## 2. Tick Offset - Temporal Programming - -**Critical concept**: Transactions must be scheduled for future execution - -One of the most important concepts to understand in Qubic is that you cannot send a transaction for immediate execution. Instead, you must schedule transactions to execute at a specific future tick. This is fundamentally different from traditional blockchains where you submit a transaction and wait for miners to include it in the next available block. - -``` -Time flow: -Current Tick (N) → Offset (+10) → Target Tick (N+10) → Execution -``` - -![Time Flow](../../static/img/time_flow.png) - -**Why this architecture exists**: - -- **Performance optimization**: By knowing exactly when transactions will execute, the network can optimize processing and achieve much higher throughput -- **Deterministic execution**: This prevents race conditions and makes the network behavior completely predictable -- **Resource planning**: Computors can prepare for the computational load of upcoming ticks - -**Architectural implications**: - -- **No traditional mempool**: Because transactions are scheduled for specific ticks, there's no need for a traditional mempool where transactions wait to be processed. In Qubic, there is a pending transaction pool that collects all transactions for a specific tick. In case that there are more than the maximum number of transactions scheduled for a tick, the lowest priority transactions are discarded. Transactions that don't make it into their target tick are not automatically retried; the client must detect this and resubmit if needed. - - *A note on priority: protocol transactions always have maximum priority; other transactions are prioritized by balance and address inactivity, meaning addresses that have recently sent or received Qubics have lower priority.* -- **Deterministic execution**: You must specify exactly WHEN your transaction will execute (the target tick number), not just submit it and hope for the best -- **Time window planning**: You need a minimum of 3 ticks offset to ensure network propagation, though most applications use 10+ ticks for safety -- **Single opportunity**: If the target tick passes and your transaction wasn't included (due to network issues, invalid signature, etc.), the transaction is irreversibly lost. There's no retry mechanism - you must create and send a new transaction - -## 3. Restrictions - -**Current limitations**: Transactions cannot be scheduled **infinitely in the future**. Currently, transactions can be scheduled ~10 minutes in advance to ensure memory efficiency. - -**Past limitations**: Until epoch 184, an identifier (ID) could only have one pending transaction at a time. Starting from epoch 184, there is no restriction on the number of pending transactions anymore (enabled by the introduction of the pending transaction pool). - - - - - diff --git a/docs/developers/transactions.md b/docs/developers/transactions.md deleted file mode 100644 index f4ac7c5..0000000 --- a/docs/developers/transactions.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -sidebar_label: 'Transactions' ---- -# Transactions - -The Qubic Transaction system is designed to facilitate secure and verifiable transactions within the Qubic Network. Here's a brief overview of how it works: - -1. **Transaction Structure:** Each transaction consists of several key components, including the source and destination public keys, the amount to be transferred, the tick (timestamp), input type, input size, and a payload. This structure ensures that all necessary information is included for processing the transaction. - -2. **Building the Transaction:** To create a transaction, the system uses a package builder to assemble all the components into a single data package. This includes adding the source and destination public keys, the amount, tick, input type, input size, and payload. - -3. **Signing the Transaction:** The transaction is signed using the source's private key. This signature ensures the authenticity and integrity of the transaction, preventing unauthorized modifications. - -4. **Generating the Transaction ID:** A unique transaction ID is generated by hashing the transaction data. This ID is used to reference the transaction within the network. - -5. **Sending the Transaction:** Once built and signed, the transaction is sent to the Qubic Network for processing. The network verifies the transaction's validity, including checking the signature and ensuring that the source has sufficient funds. - -6. **Verifying the Transaction:** The network can verify the transaction by checking the signature against the source's public key and ensuring that the transaction data has not been altered. This verification process ensures the security and integrity of transactions within the network. - -The Qubic Transaction system ensures that all transactions are securely created, signed, and verified, providing a robust mechanism for transferring assets within the Qubic Network. - -## Overview of a Transaction - -## Anatomy of a Transaction -This section covers the binary format of a transaction. - -### Transaction Format - -### Message Format - -### Instruction Format - -### Qubic ID Format - -## Instructions - -### Qubic ID - -### Instruction data - -## Signatures \ No newline at end of file diff --git a/docs/developers/tutorials.md b/docs/developers/tutorials.md deleted file mode 100644 index 559c0d6..0000000 --- a/docs/developers/tutorials.md +++ /dev/null @@ -1,27 +0,0 @@ -# All Tutorials - -We are currently working on adding more tutorials to this section. In the meantime, here are some key resources and tutorials for integrating with Qubic: - -## TX Based Exchange Integration - -This tutorial provides a comprehensive guide for integrating Qubic into an exchange environment using the Qubic RPC V1 API and the TypeScript Library. The TypeScript Library utilizes WebAssembly for cryptographic operations. - -For the full tutorial, please visit: -[TX Based Exchange Integration Tutorial](https://github.com/qubic/integration/blob/main/Partners/tx-based-use-case.md) - -## Exchange Integration Management Summary - -This document outlines the Qubic RPC infrastructure and its application in an exchange environment: -[Exchange Integration Management Summary](https://github.com/qubic/integration/blob/main/Partners/exchange-integration.md) - -## GetEntity - Retrieving Address Balance - -Learn how to query the balance of a specific address using the REQUEST_ENTITY with type 31: -[GetEntity Tutorial](https://github.com/qubic/integration/blob/main/Network/UseCases/GetEntity.md) - -## Send Transaction - -This tutorial explains how to send a basic transaction to transfer $QBIC from one address to another using a BroadcastTransaction Packet with type 24: -[Send Transaction Tutorial](https://github.com/qubic/integration/blob/main/Network/UseCases/SendTransaction.md) - -Stay tuned for more tutorials coming soon! \ No newline at end of file diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 95cbc68..0000000 --- a/docs/index.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Introduction to Qubic -sidebar_label: Home -slug: / -hide_sidebar: true ---- - - Qubic Docs - - - - - - - -# Welcome to Qubic Documentation - -Qubic is an innovative platform designed to revolutionise the world of decentralised computing and finance through its quorum-based computer (QBC) system. Whether you're a developer, researcher, or enthusiast, this documentation will guide you through everything you need to know to start building and contributing to the Qubic ecosystem. - -## Getting Started - -Ready to dive in? Start here to learn the basics and set up your environment: - -- [Introduction to Qubic](overview/introduction.md): Get a high-level overview of what Qubic is and how it works. - -- [Create your Qubic Wallet](learn/invest.md): Learn about the various ways to invest in Qubic, including cryptocurrency exchanges and creating a Qubic wallet. - -## Learn - -Expand your knowledge of the Qubic platform: - -- [Tokenomics](learn/tokenomics.md): Understand the economic model and utility of Qubic Units (QUs) in the ecosystem. - -- [Useful Proof of Work (UPoW)](learn/upow.md): Discover how uPoW underpins the security and efficiency of the system. - -- [Quorum](learn/quorum.md): Explore how Qubic's quorum-based computer system operates. - -- [Aigarth](learn/aigarth.md): Learn about Aigarth being developed on the Qubic network. - -## Developer Resources - -Everything you need to start developing on Qubic: - -- [Become a Developer](developers/intro.md): Your starting guide to navigate Qubic development resources. -- [Qubic Dev Kit](developers/dev-kit.md): Set up your local testnet and deploy smart contracts. -- [Testnet Resources](developers/testnet-resources.md): Access faucets and test seeds for development. - -## Tutorials -- [Tutorials](developers/tutorials.md): Comprehensive guides and examples to help you get started with Qubic development. - -## Clients -- [Qubic Node](developers/qubic-node.md): Full Qubic node implementation. -- [Qubic CLI](developers/qubic-cli.md): Command-line interface for Qubic. -- [Qubic RPC](api/rpc.md): Remote Procedure Call interface for Qubic. - -## Integration -- [Wallet Integration](api/wallet-integrations.md): Guides and resources for integrating Qubic wallets into your applications. - -## Libraries -- [Java Libraries](developers/library-java.md): Libraries for Java development. -- [Typescript Libraries](developers/library-typescript): Libraries for Typescript development. -- [Go Libraries](developers/library-go.md): Libraries for Go development. -- [Http Libraries](developers/library-http.md): Libraries for HTTP-based development. -- [C# Libraries](developers/library-csharp.md): Libraries for C# development. - -## Development Programs -- [Grants Program](developers/grants.md): Foster development of high-quality smart contracts and solutions. -- [Vulnerability Evaluation Program](https://github.com/qubic/qct/tree/main/qve): Contribute to Qubic's security by reporting vulnerabilities. - -## Contribute - -Qubic is an open-source project that thrives on community involvement. If you’re interested in contributing, here’s how you can get started: - -- [Contribution Guide](developers/contribute): Learn how to contribute to Qubic’s codebase or documentation. - -## Stay Updated - -Keep up with the latest news, updates, and development milestones: - -- [Qubic Blog](https://blog.qubic.org) - -- [Join our Discord](https://discord.gg/qubic) - -- [GitHub Repository](https://github.com/qubic) diff --git a/docs/learn/aigarth.md b/docs/learn/aigarth.md deleted file mode 100644 index dfe557f..0000000 --- a/docs/learn/aigarth.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_label: 'Aigarth' ---- - -# Aigarth - The AI Garden on Qubic Network - -Aigarth is a pioneering project that is being developed on top of the Qubic network. It combines the fields of artificial intelligence and distributed computing to create a collective system for solving complex AI tasks. The name "Aigarth" is a fusion of "AI" for artificial intelligence, and "garth," an old term for garden or yard. - -:::note - -Aigarth is currently in development and more information will be provided once it's ready to be launched. Stay tuned to our updates for more information. - -::: - - -## How Does Aigarth Work? - -Participants in the Aigarth network donate their unused computational power to find solutions for various AI problems. People can contribute their system's resources towards a shared goal. - -To give a simple example: One such problem could be an AI model that distinguishes cats from dogs. For this, the problem poser would provide a fitness function to rank different solutions. Participants would run a special evolutionary algorithm (a key component of Aigarth), observing in real-time how close their solution is to the perfect one. - -The system's transparency allows anyone to pick up the progress of any other participant, either continuing their work or diverging towards potentially more fruitful directions. This process closely mirrors the traditional proof-of-work mining, with the notable distinction that Aigarth's "mining" has practical utility. - -## Under the Hood: The Helix Logic Gates - -The fundamental block of Aigarth's special algorithm is the Helix logic gate. This functionally complete and reversible gate offers a simple logic: it takes three input values, A, B, and C, and outputs them in the same order after rotating by A+B+C positions. This simple mechanism enhances convergence towards an efficient solution significantly compared to randomly chosen logic gates. - -![Helix Logic Gate](/img/helix-logic-gate.png) - -*Truth table and logic gate of the Helix gate* - -## What's on the Horizon? - -With its unique approach to solving AI problems, Aigarth represents a fascinating combination of distributed computing and artificial intelligence. diff --git a/docs/learn/arbitrator.md b/docs/learn/arbitrator.md deleted file mode 100644 index 6b67e3a..0000000 --- a/docs/learn/arbitrator.md +++ /dev/null @@ -1,2 +0,0 @@ -# Arbitrator -An entity within the Qubic ecosystem responsible for resolving disputes and protecting user interests. The Arbitrator sets the parameters of the mining algorithm, publishes lists of Computors every epoch, and has the capacity to replace underperforming Computors. The Arbitrator receives the remaining revenue, which is about 1% per epoch, after Computors have been allocated their share. Each Computor individually selects their Arbitrator by setting the corresponding ID in Qubic.cpp. The entity controlling the current Arbitrator remains unknown, though rumours suggest it is operated by the development team. Computors have the ability to collectively override or replace the Arbitrator through a consensus process. This feature is crucial in preventing any single entity from gaining excessive control over the network. diff --git a/docs/learn/contract-execution-fees.md b/docs/learn/contract-execution-fees.md deleted file mode 100644 index 73abeac..0000000 --- a/docs/learn/contract-execution-fees.md +++ /dev/null @@ -1,58 +0,0 @@ -# Contract Execution Fees - -## Overview - -Every smart contract in Qubic has an **execution fee reserve** that determines whether the contract can execute its procedures. This reserve is initially funded during the contract's IPO (Initial Public Offering). Contracts must maintain a positive execution fee reserve to remain operational. It is important to note that these execution fees are different from the fees a user pays to a contract upon calling a procedure. To avoid confusion we will call the fees a user pays to a contract 'invocation reward' throughout this document. - -## Fee Management - -The current value of the executionFeeReserve can be queried via the Qubic Programming Interface (QPI) or via the QUtil smart contract. - -When a contract's IPO completes, the execution fee reserve is initialized based on the IPO's final price. If all shares were sold during the IPO, the reserve is set to `finalPrice * NUMBER_OF_COMPUTORS` (676 computors). However, if the IPO fails, i.e. not all shares are sold, the contract is marked with an error and the reserve remains 0 and cannot be filled anymore. A contract which failed the IPO will remain unusable. - -Contracts can refill their execution fee reserves in the following ways: - -- **Contract internal burning**: Any contract procedure can burn its own QU to refill its own reserve or to refill another contract's reserve. -- **External refill via QUtil**: Anyone can refill any contract's reserve by sending QU to the QUtil contract's `BurnQubicForContract` procedure with the target contract index. All sent QU is burned and added to the target contract's reserve. -- **Legacy QUtil burn**: QUtil provides a `BurnQubic` procedure that burns to QUtil's own reserve specifically. - -The execution fee system follows a key principle: **"The Contract Initiating Execution Pays"**. When a user initiates a transaction, the user's destination contract must have a positive executionFeeReserve. When a contract initiates an operation (including any callbacks it triggers), that contract must have positive executionFeeReserve. - -The execution time of each contract is measured and fees proportional to that execution time are deducted from the reserve. -If the fee reserve of a contract goes to or below 0, the contract becomes dormant. -This means, it will mostly be unusable until the reserve is refilled (for exceptions see next section). - -## What Operations Require Execution Fees - -The execution fee system checks whether a contract has positive execution fee reserve at different entry points. -Contract user functions are never checked and their execution time does not contribute to the overall fee. -Contract procedures generally only run with positive reserve and their execution time contributes to the fee. -There are some special system procedures and callbacks that will run even with non-positive reserve to ensure overall operation of the Qubic network, however, their execution time still contributes to the deducted fee. -For details, please see [this developer documentation](https://github.com/qubic/core/blob/main/doc/execution_fees.md#what-operations-require-execution-fees). - -## Consolidating Fees Across Computors - -To ensure that the state of the Qubic network stays consistent across all nodes, each computor has to deduct the same execution fee amount for each contract. -However, the actual execution time will vary due to e.g. different hardware setups. -To account for that, each computor can define their own multiplier to scale the raw execution time. -To consolidate the scaled execution times from each computor into a single consistent execution fee value, the so called *quorum value* is used: - -Every computor sends their scaled execution time to the network as transaction. -After all transactions are sent, the received execution fee values are sorted in ascending order and the value at the quorum position `2/3 * NUMBER_OF_COMPUTORS + 1 = 451` (= quorum value) is taken as final execution fee to be deducted. - -## Best Practices - -### For Contract Developers - -1. **Plan for sustainability**: Charge invocation rewards for running user procedures. -2. **Burn collected invocation rewards**: Regularly burn QUs to replenish the execution fee reserve. -3. **Monitor reserve**: Implement a function to expose current reserve level. -4. **Graceful degradation**: Consider what happens when reserve runs low. -5. **Handle inter-contract call errors**: After calling procedures of another contract, verify that the call succeeded. Handle errors gracefully (e.g., skip operations, use fallback logic). You can also proactively verify the called contract has positive fee reserve using the query function provided in QPI before calling. - -### For Contract Users - -1. **Check contract status**: Before using a contract, verify it has positive execution fee reserve. -2. **Transaction failures**: If your transaction fails due to insufficient execution fees reserve, the attached amount will be automatically refunded. -3. **No funds lost**: The system ensures amounts are refunded if a contract cannot execute. - diff --git a/docs/learn/decision-making.md b/docs/learn/decision-making.md deleted file mode 100644 index ea597e8..0000000 --- a/docs/learn/decision-making.md +++ /dev/null @@ -1,21 +0,0 @@ -# Decision Making (Draft) - -Qubic operates on a democratic model. Every member of the community has a say in decision making. Community input is essential to maintaining the decentralised nature of Qubic and ensuring its evolution aligns with the needs and wants of its users, with key decisions made collectively by the [Quorum](/learn/quorum). This process ensures that all voices are heard and that the ecosystem evolves in a way that benefits all users. - -## How Decisions are Made - -Decision-making in Qubic involves several steps: - -1. **Idea:** Any member of the Qubic community can propose a change or new feature. This idea is then shared with the entire community for consideration. -2. **Discussion:** Community members can discuss the idea, ask questions, and offer feedback. The person who made the proposal may revise it based on the feedback received. -3. **Proposal:** After a thorough discussion, the idea can evolve into a formal proposal. This proposal incorporates all the feedback and revisions from the community discussion. It provides a detailed plan of action, clearly stating what the change or new feature is and how it will be implemented. -4. **Voting:** Once the proposal is finalised, it is put to a vote. The Quorum must participate in the vote for the decision to be valid. -5. **Implementation:** If the proposal receives majority support in the Computor vote, it is accepted and moves onto the implementation phase. If not, it is either revised for further consideration or discarded. - -## Why is the Quorum important? - -The quorum-based decision-making process in Qubic promotes fairness, transparency, and inclusivity. It gives every Computor a say in the project's future and helps to build a more robust and resilient Qubic ecosystem. - -## Your Role in Decision Making - -As a member of the Qubic community, you have a role to play in decision making. You are encouraged to submit ideas, review and comment on existing ideas, draft proposals and participate in the voting process (if you have the status of a Computor). Your voice matters, so do not hesitate to get involved and help shape the future of Qubic! diff --git a/docs/learn/dispute-resolution.md b/docs/learn/dispute-resolution.md deleted file mode 100644 index 578a370..0000000 --- a/docs/learn/dispute-resolution.md +++ /dev/null @@ -1,20 +0,0 @@ -# Dispute Resolution (Draft) - -Disputes are inevitable in any community, and Qubic is no exception. However, Qubic employs an effective dispute resolution process to ensure that disagreements are handled in a fair, transparent, and amicable manner. This approach involves several steps and emphasises community participation and consensus. - -## The Arbitrator - -An integral component of Qubic's dispute resolution process is the [Arbitrator](/learn/arbitrator). The Arbitrator is responsible for resolving disagreements and protecting users' interests within the Qubic ecosystem. Its key duties include setting parameters of the mining algorithm, publishing computor lists every epoch, replacing faulty computors, and accumulating QUBIC not received by poorly performing computors. - -## How Does Dispute Resolution Work? - -The dispute resolution process in Qubic involves the following steps: - -1. **Raising a Dispute:** Any member of the Qubic community can raise a dispute if they disagree with a decision or action within the ecosystem. -2. **Community Discussion:** Once a dispute is raised, it is shared with the community for consideration. Community members can discuss the dispute, providing different perspectives and potential solutions. -3. **Arbitrator Intervention:** If the dispute cannot be resolved through community discussion, the Arbitrator intervenes. The Arbitrator reviews the dispute and makes a decision based on the rules and values of the Qubic ecosystem. -4. **Resolution:** The decision made by the Arbitrator is final and binding. Once the decision is made, the dispute is considered resolved, and all community members are expected to respect and adhere to the decision. - -## Fairness and Transparency in Dispute Resolution - -Qubic's dispute resolution process prioritizes fairness and transparency. It allows all community members to voice their concerns and contribute to the resolution process. The intervention of the Arbitrator ensures that an unbiased and fair decision is made, upholding the integrity and harmony of the Qubic ecosystem. diff --git a/docs/learn/dutch-auction.md b/docs/learn/dutch-auction.md deleted file mode 100644 index 38f49a4..0000000 --- a/docs/learn/dutch-auction.md +++ /dev/null @@ -1,42 +0,0 @@ -# Dutch Auction - -In a Dutch auction, the price of the shares is not predetermined. Instead, it's the investors who dictate the price through their bids, providing a more dynamic pricing mechanism. - -The smart contract creator intending to go public decides on the quantity of shares to be sold. Investors then place their bids during one epoch indicating the number of shares they wish to purchase and the price they are willing to pay per share. A comprehensive list of bids is compiled, starting with the highest bid price at the top. - -Qubic's IPO function will work down this list from the highest bid price, accepting bids until the total number of shares intended to be sold is reached. The price of the offering is determined from the last price covering the full offer quantity. This means all successful bidders pay the same price per share, regardless of their initial bid price. - -A Dutch auction system encourages bidders to bid competitively since it safeguards them from overpaying. If a bid is too high, it is simply adjusted down to the final price. This methodology provides an efficient, market-driven approach to share pricing in IPOs, resulting in a fair distribution of shares based on demand and perceived value. - -## Example - -As an example: 10 shares are available overall: - -| Bidder wants to pay | $QUBIC per share for | Amount of shares wanted | -|---------------------|------------------|-------------------------| -| Alice | 300 | 5 | -| Bob | 7 | 10 | -| Charlie | 90 | 3 | - -These bids are sorted by price, from highest to lowest: - -| Bidder wants to pay | $QUBIC per share for | Amount of shares wanted | -|---------------------|------------------|-------------------------| -| Alice | 300 | 5 | -| Charlie | 90 | 3 | -| Bob | 7 | 10 | - -Now we go through line by line and sum up: - -| Bidder wants to pay | $QUBIC per share for | Amount of shares wanted | Sum of shares neede | -|---------------------|------------------|-------------------------|---------------------| -| Alice | 300 | 5 | 5 | -| Charlie | 90 | 3 | 8 (5+3) | -| Bob | 7 | 10 | 18 (5 + 3 + 10) | - -We exceed the number of available shares (10). The lowest offer still getting shares is 7 QUs - -As a result, the final distribution is as followed: -- Alice gets 5 shares and pays 35 $QUBIC -- Charlie gets 3 shares and pays 21 $QUBIC total -- Bob gets 2 shares and pays 14 $QUBIC total \ No newline at end of file diff --git a/docs/learn/glossary.md b/docs/learn/glossary.md deleted file mode 100644 index 5d46cd7..0000000 --- a/docs/learn/glossary.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -sidebar_label: 'Glossary' ---- - -# Glossary - -The following terms are used throughout the Qubic documentation and development ecosystem. - -## Aigarth -Aigarth is an AI-oriented project that will run on the Qubic network, which aims to utilize unused computational power for solving AI-related tasks. Its primary function is to run a special algorithm that allows for the evolution of solutions based on Helix logic gates. This process is transparent, with progress points available to all participants, promoting a collective push towards efficient solutions. - -## Arbitrator -An entity within the Qubic ecosystem responsible for resolving disputes and protecting user interests. The [Arbitrator](/learn/arbitrator) sets parameters of the mining algorithm, publishes lists of computors every epoch, is developing the capacity to replace faulty computors, and accumulates QUBIC not received by underperforming computors. Each node operator individually selects their arbitrator by setting the corresponding ID in Qubic.cpp. The entity controlling the current arbitrator remains unknown, though rumors suggest it's operated by the development team. - -## Candidate -A Candidate is a node that runs the [Computors](/learn/nodes) software but hasn't yet achieved the status of a Computor. In each epoch, up to 256 candidates can ascend to Computor status if they rank among the top 676 nodes based on their score. It's important to note that only Computors with a full week's status receive Qubic Units (QUs) as rewards for their performance. While Candidates don't earn any QUs, running as a Candidate is essential for pushing solutions to the blockchain, which is a prerequisite for becoming a Computor. - -## Computor -[Computors](/learn/nodes) refer to the machines or nodes that participate in the network's consensus protocol and perform computation tasks. They are a critical component of the Qubic network, responsible for executing transactions on the Spectrum and running smart contracts. - -## Computor Controlled Fund (CCF) -The Computor Controlled Fund is a community-driven funding mechanism designed to support the development and growth of the Qubic ecosystem. It is used to finance approved projects that contribute to expanding the capabilities, reach or efficiency of the Qubic network. Projects are proposed by community members and selected through a voting process. The CCF enables the quick definition of project packages and efficient allocation of budgets. The aim of the CCF is to empower the community to collaboratively decide on and prioritize the network's development directions. - -## Energy -The amount of QUs per identity on the Spectrum (similar to "balance"). - -## Epoch -A one-week time period from Wednesday 12 UTC to Wednesday 12 UTC during which 1 trillion QUs are generated. - -## Identity -Qubic's equivalent of an address - -## Miners -Miners in Qubic are essential for supporting Computors. Miners acquire problems or tasks from Computors. Upon finding a solution to these tasks for a given qubic ID, miners transmit their results back to the Computors. This continuous exchange of tasks and solutions is pivotal for determining scores for each ID during an epoch. High scores are instrumental for a Computor to retain its position amidst the top 676 Computors. - -## Oracles -A feature in development for Qubic. In blockchain technology, oracles are third-party services that provide smart contracts with external information, enabling them to interact with the outside world. - -## $QUBIC -QUs or QUBIC [Qubic Units](/learn/tokenomics) is the native coin and positioned as equivalent of "energy" units spent to run smart contracts and access other services in Qubic (e.g. donations to oracles). Yes, QUs can be used as money, but they are more than that. Transfers are feeless and notion of "fee" for smart contracts doesn't make much sense, because qus are destroyed, not given to computors. When one asks an oracle he "burns" QUs as a sacrifice, not as a payment, it's not even guaranteed that the oracle will answer. - -## Quorum -A quorum is the minimum number of computors necessary to conduct any sort of business. In Qubic the [Quorum](/learn/quorum) is ⅔ (or 451) of all Computors to reach consensus. - -## Smart Contracts -Self-executing contracts with the terms of the agreement directly written into code. Qubic's first [smart contract](/learn/smart-contracts) was an Initial Public Offering ([IPO](/learn/ipo)) of 676 shares for a decentralized exchange (DEX) named [Qx](/learn/qx). - -## Spectrum -Qubic's equivalent of a ledger. In the [Spectrum](/learn/spectrum) the energy (i.e. QUs) per Identity is stored. Qubic itself does not not keep track of transactions. - -## Ticks -In the Qubic ecosystem, the tick is the interval within which the Quorum commes to an agreement on transactions and the outcome computed smart contracts. A single tick can last a very short interval of time (below 1 second). - -## Useful Proof of Work (UPoW) -A novel consensus mechanism that optimizes the energy expended in mining processes by directing computational power towards valuable, real-world tasks, such as training artificial intelligence models. Unlike traditional Proof of Work systems that "waste" energy by solving abstract puzzles, [UPoW](/learn/upow) contributes to meaningful applications. - - -\_ - -Please note that Qubic is still in development, and some aspects of the system are subject to change during the development and practical testing phase. No official whitepaper is available as of yet due to this ongoing development process. diff --git a/docs/learn/governance.md b/docs/learn/governance.md deleted file mode 100644 index f2ad9c6..0000000 --- a/docs/learn/governance.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -sidebar_label: 'Separation of Power' ---- - -# Separation of Power -The Qubic system has been designed with the core principle of decentralisation in mind. The unique approach to governance ensures that power within the system is not concentrated in a single entity. This is achieved through the separation of power between the [Quorum](/learn/quorum) and the [Arbitrator](/learn/arbitrator). - -The Quorum is defined as a group of ⅔+ (or 451+) [Computors](/learn/nodes) that participate in making important network decisions such as validating transactions and maintaining consensus (i.e reaching the same result before considering it final). The Arbitrator, on the other hand, resolves disagreements, sets parameters for the mining algorithm, publishes Computor lists after each epoch, and can remove underperforming Computors. To ensure there is no incentive to collude, the Arbitrator receives the remaining revenue after Computors have been allocated their reward. This averages around 1% per epoch. - -Both entities play significant roles in the Qubic ecosystem. However, it is crucial to prevent one entity from controlling both the Quorum and the Arbitrator to preserve the integrity and decentralisation of the network. If the same entity controls both, it may create an environment where Computors could choose to maintain their own status instead of promoting a healthy competition. This could potentially disrupt the overall balance of the network and hinder its growth and development. - -In conclusion, the separation of power in the Qubic ecosystem is not just about distributing responsibilities; it's about preserving the core principle of decentralisation and ensuring the network remains robust, fair, and democratic. diff --git a/docs/learn/hw.md b/docs/learn/hw.md deleted file mode 100644 index e8b6182..0000000 --- a/docs/learn/hw.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_label: 'Mining Hardware' ---- - -# Mining Hardware - -When planning to mine in the Qubic ecosystem, several factors are key to consider while selecting your hardware. These include your CPU's clock frequency, the speed of your RAM, and the read/write throughput of your storage medium. Some top-performing CPU models renowned for their mining performance include: - -## AMD Ryzen Threadripper Series - -The AMD Ryzen Threadripper series has been favored by CPU miners due to its high multi-core performance. These CPUs offer excellent computational rates, especially effective for mining tasks that benefit from multi-threaded operations. - -## AMD Ryzen 9 Series -AMD's Ryzen 9 CPUs, like the Ryzen 9 5950X, 7950x, and 9950x are known for their strong performance in both single-core and multi-core tasks. Offering a balance between performance and cost-effectiveness, these CPUs are popular choices for miners. - -## Intel Xeon CPUs -Certain Intel Xeon CPUs, often found in server-grade systems, can also be used for mining due to their high core counts and multi-threading capabilities. - -Remember, the optimal CPU for mining can vary depending on the mining task and the specific algorithm. In the case of Qubic, this can vary each epoch. Therefore, before investing in any CPU for mining, evaluate factors such as its availability, cost, power consumption, RAM speed, storage read/write throughput, and overall profitability. diff --git a/docs/learn/invest.md b/docs/learn/invest.md deleted file mode 100644 index 78f788f..0000000 --- a/docs/learn/invest.md +++ /dev/null @@ -1,66 +0,0 @@ -# How to Invest in Qubic - -There are several ways to invest in Qubic. This guide will walk you through the process. - -## 1. Cryptocurrency Exchanges - -The easiest and most common way to invest in Qubic is through cryptocurrency exchanges. QUBIC (Qubic's native coin) is available on these exchanges: - -- [MEXC](https://www.mexc.com/exchange/QUBIC_USDT) -- [Bitget](https://www.bitget.com/spot/QUBICUSDT) -- [Gate.io](https://www.gate.io/zh/trade/QUBIC_USDT) -- [XT.COM](https://www.xt.com/en/trade/qubic_usdt) -- [Bitpanda](https://www.bitpanda.com/en/prices/qubic-qubic) -- [Bit2Me](https://bit2me.com/price/qubic) -- [SafeTrade](https://safetrade.com/) -- [TradeOgre](https://tradeogre.com/exchange/QUBIC-USDT) -- [CoinEx](https://www.coinex.com/en/info/QUBIC) -- [HIBT](https://hibt.com/trade/QUBIC-USDT) -- [AscendEX](https://ascendex.com/en/cashtrade-spottrading/usdt/qubic) -- [BitKan](https://bitkan.com/trade/QUBIC-USDT) - -:::info -For the most up-to-date list of exchanges, please visit the official Qubic website at [qubic.org](https://qubic.org). -::: - -## 2. Create a Qubic Wallet - -Regardless of how you choose to invest, you will need a Qubic wallet to store your QUBIC: - -1. Create a seed: This is a 55-character lowercase string that acts as your password. For example: `lcehvbvddggkjfnokduyjuiyvkklrvrmsaozwbvjlzvgvfipqpnkkuf` - - :::caution - Never share your seed with anyone. If you lose it, you lose your Qubic Units (QUs). - ::: - -2. Get your Qubic ID: This is a 60-character string derived from your seed. You can obtain it by adding your seed to the [qubic.org wallet](https://wallet.qubic.org/). - -3. Use the [qubic.org wallet](https://wallet.qubic.org/) to manage your QUs: Create a vault and add your seed to interact with Qubic. - - :::note - This is an online wallet, so there are inherent risks. Always ensure you trust the browser you are using and understand the risks involved. - ::: - -## 3. Hardware Wallets - -For those interested in 'cold storage' of their QUs, here is a list of the current hardware wallet options: - -- [HASHWallet](https://www.gethashwallet.com/qubic-wallet) - -## 4. iOS and Android Wallets - -You can also store QUs on Apple or Android devices: - -iOS Wallet: https://apps.apple.com/us/app/qubic-wallet/id6502265811 - -Android Wallet: https://play.google.com/store/apps/details?id=org.qubic.wallet&pli=1 - -## 5. Stay Informed - -For those interested in additional information about the network, visit the [Qubic Explorer](https://explorer.qubic.org/). - -## 6. Future Developments - -Keep an eye out for the upcoming Qx exchange, which will be Qubic's own decentralised exchange. More information will be provided once the UI is ready for launch. - -By following these steps, you can start your journey in investing in Qubic. Remember to always do your own research and invest responsibly. diff --git a/docs/learn/ipo.md b/docs/learn/ipo.md deleted file mode 100644 index da1e795..0000000 --- a/docs/learn/ipo.md +++ /dev/null @@ -1,27 +0,0 @@ -# Initial Public Offering (IPO) (Draft) - -In the world of finance, an Initial Public Offering (IPO) refers to the process of offering shares of a private corporation to the public in a new stock issuance. In the Qubic universe, this concept has been creatively leveraged to facilitate the distribution and trading of digital assets on the Qubic network. - -## Qubic's First IPO - -The first IPO within the Qubic network was that of a Decentralised Exchange (DEX) known as QX. An innovative application of Qubic's smart contract technology was used to distribute 676 shares of QX. This marked a significant milestone for the Qubic project, as it demonstrated the potential of Qubic's smart contracts for creating and distributing digital assets in a decentralised manner. Subsequent IPOs have taken place, with the first three, including Qx, collectively burning 10.5 trillion of the total supply of $QUBIC. - -## IPO Process in Qubic - -Here's a brief look at how an IPO works in the Qubic network: - -1. **Creation of Shares:** Using Qubic's smart contract technology, a digital asset (like shares of a DEX) is created. This asset is unique and can be traced on the Qubic blockchain. - -2. **Offering to the Public:** The digital shares are then made available to the public. Just as with a traditional IPO, these shares represent a stake in the project and may provide certain rights to the holders. - -3. **Purchase and Trading of Shares:** Participants on the network can acquire these shares using QUBIC. Once purchased, these shares can be traded on the Qubic network. - -## The Significance of IPOs in Qubic - -The successful execution of an IPO within the Qubic network underlines the adaptability of blockchain technology to traditional financial processes. By providing a decentralised and transparent platform for conducting IPOs, Qubic brings a new level of accessibility and openness to the creation and distribution of digital assets. - -Moreover, the ability to conduct an IPO using Qubic's smart contract technology demonstrates the robustness of the network's infrastructure and its suitability for a diverse range of financial applications. - -In the Qubic ecosystem, [Dutch Auctions](/learn/dutch-auction) are integral to the Initial Public Offering (IPO) of smart contracts. By utilising a Dutch auction mechanism, Qubic ensures a fair and transparent bidding process where the highest bidder acquires the offering. This method allows participants to bid at the price they believe the offering is worth, potentially leading to a more accurate valuation compared to traditional methods. - -Dutch auctions are part of Qubic's commitment to creating a democratic and open environment, where market forces determine the price of offerings and every participant has an equal opportunity to contribute and benefit from the network's growth. This approach promotes fairness, inclusivity, and efficiency within the Qubic community. diff --git a/docs/learn/mlm.md b/docs/learn/mlm.md deleted file mode 100644 index 3385231..0000000 --- a/docs/learn/mlm.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_label: 'My Last Match (MLM)' ---- - -# My Last Match - -IPO Date: June 5, 2023, 12:00 UTC - -Description: My Last Match (MLM) is an online real-time game running on a dedicated server, with all economic interactions happening via Qubic - -The MLM Initial Public Offering (IPO) successfully closed with 473.876 billion $QUBIC bid and burned. -MLM has not officially launched and continued updates and enhancements will be rolled out as the game evolves. Further information will be provided when the game is set for launch, and as new features are introduced. - -## My Last Match in a Nutshell - -My Last Match (MLM) is an online real-time multiplayer game. Players engage in various in-game activities, and the Qubic network facilitates in-game transactions, asset ownership, and player interactions. The game operates using a decentralised infrastructure, ensuring that all actions are transparently managed through smart contracts. -Key Features of MLM include: - - In-game transactions: All transactions, from purchases to in-game rewards, are recorded on the Qubic blockchain. - - Asset ownership: Players can own, trade, and transfer in-game assets, with ownership validated on-chain. - - Multiplayer capabilities: MLM supports multiplayer interactions, with competitive matches and collaborative quests available to all players. - -## Game Updates and Future Developments -MLM represents just the beginning of online gaming for Qubic. This documentation will be updated once the game is launched, and subsequently updated regularly to reflect changes and new features as they are implemented. -Look out for more exciting developments as My Last Match continues to push the boundaries of decentralised gaming. \ No newline at end of file diff --git a/docs/learn/nodes.md b/docs/learn/nodes.md deleted file mode 100644 index 761f89f..0000000 --- a/docs/learn/nodes.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -sidebar_label: 'Node Types' ---- - -# Node Types in the Qubic Network - -Within the Qubic ecosystem, two primary node types work in tandem to support its decentralised infrastructure - the Computors and the miners. These entities shoulder unique responsibilities and ensure the efficient functioning of the network. - -
- Computors vs. Miners in a Nutshell -
-

- Traditional blockchains use miners to validate and add transactions to the blockchain. They compete for rewards in the form of cryptocurrency. Qubic, however, pivots to Computors that execute varied tasks and receive rewards in QUBIC based on overall participation. This distinction, including their reward mechanisms and roles, sets Computors apart from traditional miners, marking a shift in how decentralised systems might operate in the future. -

-
-
- -## Computors - -A Computor (validator) in the Qubic ecosystem is a specialised node who execute tasks, ranging from running smart contracts to facilitating transactions on the spectrum. Unlike traditional blockchain systems where miners verify and add transactions, Computors in the Qubic ecosystem bear a broader scope of duties. They are instrumental in executing tasks, participating in decentralised quorum-based decision making and maintaining the tokenomic equilibrium of the network. - -**Key Features**: -- Role in maintaining and ensuring network's decentralised nature. -- Allocation of a portion of newly minted QUBIC each epoch for their overall network participation. -- Involvement in essential network voting and decision-making processes. - -**Limitation**: There is a fixed upper limit of 676 Computors operating in the Qubic network at any given time, ensuring optimal performance and streamlined decision-making. A weekly score ranking based on solutions deliverd by their miners determines the top 451 performing Computors, who maintain their status, while the remaining 225 spots are filled from the pool of candidates and lower-ranking Computors each epoch. - -:::tip -**Challenges of Running a Computor on Qubic:** - -- Operates on bare metal, requiring UEFI control. -- Regular compilation of qubic.cpp every epoch. -- Continuous system updates. -- Need for backup systems to ensure consistent ticking. -- Competition: Must outperform candidates with enough mining power assigned to thei IDs to retain spot. - -Running a Computor demands technical expertise and constant vigilance. Ensure you're prepared for these challenges if considering operating as one! -::: - -## Miners - -**Miners** in the Qubic ecosystem differ from their counterparts in traditional blockchain networks. Instead of competing to verify and add transactions to a blockchain, miners on Qubic work on specific computational problems or tasks assigned to them by Computors. Once they find a solution, they relay it back to the respective Computor. This interaction not only assists in verifying the integrity of the tasks but also aids in the overall processing and validation of actions within the network. - -**Key Features**: -- Receive computational problems or tasks (represented by IDs) from Computors. -- Upon successful problem-solving, relay solutions back to Computors, contributing to their score. -- Integral to Qubic's innovative system, where the emphasis is not solely on transaction verification but on overall task execution. - -**Potential**: The Qubic network allows for a theoretically unlimited number of miners, promoting widespread participation and ensuring robust computational power backing the system. - -:::info -**Why Become a Miner?** - -It's crucial to note that only Computors receive weekly payments from the Qubic protocol. However, to maintain their position among the 676 Computors, they must accumulate sufficient solutions each epoch through their associated miners. Consequently, it's inevitable that every Computor will eventually need to cultivate a robust mining pool around them and provide incentives via pool payouts. - -Working as a miner is easier than working as a Computor and there are public [pools](/learn/pool) available. -::: - - - -It's essential for any participant or observer in the Qubic network to understand this fundamental distinction between miners and Computors. As we progress into this new era of Qubic, the roles and responsibilities of both will undoubtedly become increasingly important. diff --git a/docs/learn/overview.mdx b/docs/learn/overview.mdx deleted file mode 100644 index a5d1f68..0000000 --- a/docs/learn/overview.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -sidebar_label: 'Learn' -title: 'Learn' ---- - -# Qubic Learning Center - -import Card from "@site/src/components/Card/Card"; - -:::info - -The Qubic documentation is currently in public preview and may change significantly as feedback is captured from readers like you. Join the Qubic [Discord](https://discord.gg/2vDMR8m) to share your feedback in the #docs channel. - -::: - -Welcome to the Qubic Learning Center! This is your comprehensive guide to understanding the unique aspects of the Qubic ecosystem. Whether you're new to Qubic or looking to deepen your knowledge, our carefully curated resources are designed to offer you a thorough understanding of Qubic's key features, its advanced technology and the role you can play within the network. - -Qubic is a pioneering project that combines the capabilities of **Distributed Ledger Technology** and [Smart Contracts](/learn/smart-contracts), introducing unique features such as frictionless microtransactions, energy as the transaction medium ([Qubic Units](/learn/tokenomics) or QUs), decentralised [quorum-based decision making](/learn/quorum) and scalable [AI solutions](/learn/upow). With its innovative use of epoch-based processing and decentralised exchange, Qubic paves the way for a new era of distributed computing and finance. - -
- - - - -
diff --git a/docs/learn/pool.md b/docs/learn/pool.md deleted file mode 100644 index c4de65d..0000000 --- a/docs/learn/pool.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -sidebar_label: 'Joining a Pool' ---- - -# Joining a Pool - -Embarking on a journey to mine Qubic might seem like a monumental task if you're doing it alone. Pool mining is akin to collaborating with a team to conquer the task more efficiently and collectively reap the rewards. - -## The Treasure Hunt Analogy -In Qubic mining, the "treasure" represents the reward received in QUs, the native token of the Qubic ecosystem. To earn this reward, Computors compete to achieve a high enough score on Artificial Intelligence (AI) training tasks. - -## The Challenge of Solo Mining -In the early days of blockchain technology, individuals mined on their own, using their computers' computational power. As the network expanded, the difficulty of mining increased, making solo efforts akin to searching for treasure in an ocean. The competitive landscape became quite fierce. - -## Banding Together in a Mining Pool -To improve their odds, miners began forming mining pools. A mining pool is a collective of miners working together. When one miner in the pool achieves a high score on their AI task, the reward is shared among all pool members based on their respective contributions. - -## How Pool Mining Works in Qubic -Miners interested in joining a pool sign up on [qubic.li](https://app.qubic.li/) and connect their mining devices to the pool's network. - -Mining as a Team: Now, the pool's members work as a team. Each miner is assigned an AI training task — less complex than the tasks in solo mining — resembling the search for treasure in a pond rather than an ocean. Different pools have different types of payouts such as PPS vs. FPPS vs. PPLNS, refer to specific pools for the rewards distribution. Remember that each pool is soley operated and not directly under any control of the Qubic core Team, this increases competitiveness for the pool with the most computing power. - -Achieving High Scores: Once a miner in the pool finds a solution on their assigned AI task, they inform the pool's server. -Distributing the Rewards: The pool's server distributes the rewards, or QUs, among all the miners in the pool, proportionate to the solutions each miner contributed. The payout is once every epoch (i.e. weekly). - -## Benefits of Pool Mining -Improved Odds: Pool mining enhances the chances of earning Qus, as the collective power of many miners can complete AI tasks more efficiently. - -Consistent Payouts: Compared to solo miners who might face long periods without rewards, pool miners receive more regular and predictable payouts. - -Inclusivity: Pool mining enables miners with less powerful hardware to participate effectively and earn rewards. - -However, it's crucial to be aware of the potential risks associated with pool mining. While the collective effort can lead to more consistent rewards, it can also create a level of dependency on the pool operators. It's essential to ensure you're joining a trustworthy and reputable mining pool to avoid any potential issues. - -## Conclusion - -Pool mining within the Qubic ecosystem allows for collective effort, boosting the chances of earning rewards while making mining more accessible to a wider audience. Always ensure you choose a reliable and reputable mining pool, and here's to your successful mining journey! diff --git a/docs/learn/proposals.md b/docs/learn/proposals.md deleted file mode 100644 index 5489b06..0000000 --- a/docs/learn/proposals.md +++ /dev/null @@ -1,46 +0,0 @@ -# Proposals (Draft) - -In the Qubic community, decisions aren't made by a single person or a centralized group of people. Instead, they are made by the community as a whole through a democratic and transparent process. A key aspect of this process is the proposal system. - -## What are Proposals? - -Proposals are suggestions for changes, improvements, or new features for the Qubic ecosystem. They can be put forward by any member of the Qubic community. Proposals cover a wide range of topics, from minor tweaks and bug fixes to major changes that could redefine how Qubic operates. - -## How to Make a Proposal - -Anyone in the Qubic community can make a proposal. Here's how: - -1. **Identify an Issue or Opportunity:** You might have identified a problem that needs fixing, an opportunity for improvement, or a new feature that could benefit the entire community. -2. **Draft Your Proposal:** Write a detailed description of what you want to change. Be clear about the problem or opportunity, your proposed solution, and the benefits it would bring to Qubic. -3. **Submit Your Proposal:** Post your proposal on the designated platform where Qubic community members can review it. Be sure to check any formatting guidelines or submission rules. -4. **Community Review:** Community members can review, comment on, and ask questions about your proposal. Be open to feedback and ready to make revisions if necessary. - -## How are Proposals Reviewed? - -After a proposal is submitted, it is reviewed by the community. Review involves: - -- Evaluating the problem or opportunity identified in the proposal. -- Assessing the feasibility of the proposed solution. -- Considering the potential benefits and drawbacks. -- Asking questions and seeking clarifications from the proposer. - -Community members are encouraged to take an active role in the review process, as the decision will be made collectively. - -## How are Decisions Made on Proposals? - -Decisions on proposals are made democratically, through a voting process involving quorums. If a proposal gains support from the majority, it is accepted and moves onto the implementation phase. - -Remember, the proposal process is a chance for you to help shape the future of Qubic. Your ideas and opinions matter, so don't hesitate to get involved! - -## The voting Basics & Rules -- **A proposal consists** of a **URL** where the proposal is documented. This website should be something that **cannot be altered**. Explain what you propose and show which options the computors can choose from. -- A proposal can have up to **7 options** to vote for and **must be sorted without gaps, duplicates** make the proposal **invalid**. -- Proposals and ballots are **valid only per epoch** (lifetime) -- Per **epoch and computor** only **one** proposal is allowed per epoch -- A **computor that has proposed** anything is **not allowed to participate** in voting for this epoch. But the first option from the published proposal is taken as own computor's vote. -- Proposals and ballots are **published when** the **computor** is **tick leader** (in the worst case, you need to wait 676 ticks to see your votes counting) -- The **peer where the computor seed is running** must be in the **latest tick** to issue a vote -- A proposal with **less than 451** votes is **invalid** -- A **valid** vote is one that votes for **one of the given options** in the proposal -- The **result** of a proposal is the option which has got strictly more or equal than **50% (226 votes)** of Quorum (451) -- If **none** of the options has got the minimum votes (226), then **another proposal** should be published with the **two most popular** options only. In some cases if #1/#2 places are shared by several options more voting steps may be needed diff --git a/docs/learn/quorum.md b/docs/learn/quorum.md deleted file mode 100644 index 876f533..0000000 --- a/docs/learn/quorum.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_label: 'Quorum' ---- - -# Quorum - -## What is a Quorum? -A quorum is the minimum number of members required to be present at a meeting or assembly in order for official business to be conducted. The number of members needed to form a quorum is typically defined by the rules or bylaws of the organization holding the meeting. - -In many cases, a quorum is required for decisions to be made or votes to be taken. Without a quorum, a meeting may not be able to proceed or any actions taken may be considered invalid. - -For example, if the bylaws of a club state that a quorum is a majority of its members, then at least half of the members would need to be present at a meeting for any official business to take place. - -## The Qubic Quorum -In Qubic the Quorum is more than just a simple majority — it's a dynamic assembly of 451 [Computors](/learn/nodes). Any decision that has to be made by the Qubic Quorum means that there needs to be at least 451 votes from Computors. This assembly of Computors is at the heart of decision-making processes within the Qubic network. - -The Computors form a democratic ecosystem, with each having an equal vote. The aim is to decentralise power and promote a healthy competition for the network's best interests. This unique form of [Governance](/learn/governance) separates the roles of Computors and [Arbitrator](/learn/arbitrator), ensuring that no single entity can control both. - -## Quorum Functions -The Quorum in the Qubic ecosystem fulfills key functions: - -- Forming and Creating Ticks (Blocks) -- Proposing, Voting for and Accepting Polls - -These functions allow for a dynamic, community-oriented, and consensus-driven ecosystem that is key to the operations of the Qubic network. - - -## Quorum Voting on Proposals -When it comes to voting, a decision is considered valid when it has received the approval of at least 451 Computors. The [Proposal](/learn/proposals) with the most votes wins, fostering a system of majority rule. - -This requires a broad consensus and encourages active participation from Computors in order to make impactful decisions. In scenarios where there are two decision proposals, the winning option must secure at least 50% of the votes (or at least ⅓ of all Computors, if only ⅔ are participating). In scenarios where there are multiple options, the winning proposal is chosen by the most votes — still provided that at least 451 Computors have cast a vote. diff --git a/docs/learn/qx.md b/docs/learn/qx.md deleted file mode 100644 index 783225e..0000000 --- a/docs/learn/qx.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_label: 'Qx' ---- - -# Qx: Qubic's Decentralized Exchange - -Qx is the first decentralised exchange within the Qubic ecosystem. Its development was initiated after selling 676 shares to the community in epoch 65. Shareholders of Qx earn passive income generated from trading fees. - -:::note - -Qx has launched and is functioning, but it is still in development. Further updates and information will be provided as it progresses towards full functionality. - -::: - -## Qx in a Nutshell -Qx (what shareholders "own") is a [smart contract](/learn/smart-contracts), which will be used to trade anything on the Qubic network (likening this to a commodity exchange as well as a crypto dex): -- $QUBIC -- $QUBIC/BTC -- shares -Qx will (most likely) not be the only trading platform, the only access restriction is the [Quorum](/learn/quorum), which takes the decision if a certain smart contract is allowed on the platform or not (though, Qx may have a big advantage due to being first mover). -There is no frontend for trading or the ability to exercise voting rights included by default. The community will come up with such solutions. - - -## Qx Fees - -The operation of Qx is made possible through a series of service fees. Here is a brief explanation of each: - -1. **Execution Fee:** The Computors individually set this fee. The Quorum's decision is then applied, similar to how the original revenue algorithm worked. -2. **Trading Service Fee:** This fee is expressed as a percentage and is set by Qx shareholders. This fee is only charged to the party holding $QUBIC during a trade (e.g., BTC/$QUBIC, Qx/$QUBIC). -3. **Asset Transfer Fee:** This fee is a fixed amount in $QUBIC (for example, 1 million $QUBIC) and is charged when Qx shares are transferred from one ID to another. This fee is also set by the shareholders. -4. **Storage Fees:** Each asset in Qx takes up some space for its balance. The more space taken, the more storage fees are paid. These fees are paid by the smart contract (SC) itself, not the users, at every tick. It ensures that transfers, ownership of assets, and invocation of smart contracts remain free for users. -5. **Additional Service Fees:** More service fees can be introduced based on the use case. These could include asset issuance fees, among others. - -This information provides a fundamental understanding of Qx's functionality and fee structure. As Qx continues to develop and more features are introduced, this section will be updated to reflect the changes. diff --git a/docs/learn/random.md b/docs/learn/random.md deleted file mode 100644 index a0a860a..0000000 --- a/docs/learn/random.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_label: 'RANDOM' ---- - -# Random - -RANDOM is a smart contract within the Qubic ecosystem that generates random numbers. Its applications include gambling, gaming, NFTs, and security systems. -The IPO for RANDOM took place on December 21, 2023, and concluded with the burning of 1.02 trillion $QUBIC, which is equivalent to 1.34% of the total supply. - -## Passive Income for Shareholders - -RANDOM allows shareholders to earn passive $QUBIC income. $QUBIC is burned with each use, and a portion of that burned $QUBIC is distributed as passive income to shareholders. - -## RANDOM Burn Mechanism - -RANDOM includes a burn mechanism where $QUBIC is burned with each use, reducing the overall supply of $QUBIC and providing income to shareholders. -Burn Details: - - $QUBIC Burned: 1.02 trillion $QUBIC were burned at IPO, and $QUBIC continues to be burned with each use of RANDOM. - - Income Distribution: Shareholders receive passive income from the $QUBIC burned with each use. - -RANDOM is a key utility within the Qubic ecosystem, offering secure random number generation while providing income for its shareholders through its burn mechanism. It plays a vital role in industries like gambling, gaming, and security, where trust in randomness is essential. \ No newline at end of file diff --git a/docs/learn/smart-contracts.md b/docs/learn/smart-contracts.md deleted file mode 100644 index faad68c..0000000 --- a/docs/learn/smart-contracts.md +++ /dev/null @@ -1,48 +0,0 @@ -# Smart Contracts - -Smart contracts are blockchain-based, self-acting protocols that activate when specified code criteria are met. Among the myriad of blockchain applications, smart contracts emerge as a game-changer. Qubic enhances this game, pioneering an innovative approach to smart contracts, merging efficiency with security. - -## How Qubic's Smart Contracts Operate -Qubic's smart contracts revolve around public functions encapsulated in the contract's source code. These functions receive a C++ struct as input and emit another C++ struct as output. To trigger a function (which necessitates client software), a transaction is made with the `destinationPublicKey` associated with the contract index. - -
- Some more geeky details -
-

- The `inputType` of the transaction is set to the index of the called function, and `inputSize` is set to `sizeof(inputStruct)`. The `amount` can be non-zero to simultaneously transfer qus when a smart contract function is called, and the amount is deducted from `sourcePublicKey` only if the function is called. -

-

- Data from the input struct are injected between `inputSize` and the signature. If not enough data is supplied, the remaining portion is filled with zeros. If the data exceeds the actual input data, then the input is truncated. -

-
-
- - -## Proposal and IPO Process -Before a Smart Contract's integration: - -- It must undergo a [proposal](/learn/proposals) voting by the Quorum. Specifically, 451 of the 676 computors need to participate in the voting, with a majority required for contract acceptance. -- The shares associated with the smart contract undergo an [IPO](/learn/ipo) using a [Dutch auction](/learn/dutch-auction) model. -Spotlight on Qubic's Smart Contracts - -## Distinguishing Features -Key highlights include: - -- Use of Qubic Units (QUs) as "energy", making contracts frictionless and expansive. -- Deflationary by design, with QUs used during execution being "burned". -- Integration capability with real-world data using Qubic's Oracles. -- While QUs are used in smart contract execution, it remains cost-free for users due to self-financing from its IPO. However, there's flexibility, as contracts can charge users QUs for specialised services. - -## Voting rules -- A proposal with less than 451 valid votes is invalid. -- A valid vote is one with index above 0 and matching one of the options from the proposal. -- A proposal with duplicate options or option indices outside of [1; 7] range is invalid. -- Options must be sorted and listed without gaps starting from option #1 (e.g. "5 = yes / 2 = no" is an invalid option for a proposal). -- The result of a proposal is the option which has got strictly more than 50% of valid votes. -- If none of the options has got more than 50% then another proposal should be published with the two most popular options only, in some cases if #1/#2 places are shared by several options more voting steps may be needed. -- The Computor which publishes a proposal isn't allowed to vote that epoch with the only exception: The first option from the published proposal is taken as own Computor's vote. - -## The Road Ahead -With the robust Qubic blockchain combined with the adaptability of smart contracts, developers are armed with an unparalleled toolkit. As the Qubic framework grows, its smart contracts are set to diversify and expand their influence. - -In summation, Qubic rejuvenates the smart contract landscape, intensifying efficiency and making them apt for real-world applications. By merging external data, it broadens dApp possibilities, guiding us towards a future of unmatched blockchain interactions. diff --git a/docs/learn/spectrum.md b/docs/learn/spectrum.md deleted file mode 100644 index 2a86a02..0000000 --- a/docs/learn/spectrum.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_label: 'Spectrum' ---- - -# Spectrum: The Ledger of Qubic - -## Understanding the Spectrum -In the Qubic universe, the "Spectrum" signifies a critical, decentralised ledger system that preserves a transparent and tamper-proof transaction history for each epoch. Serving as an open record, the Spectrum presents a sequential record of every transaction conducted within the Qubic network per epoch. - -Consider the Spectrum as a digital, transparent ledger that is accessible to anyone. This ledger meticulously logs the transaction history of each epoch in the Qubic network. - -## Operation -Logging Transactions: When a transaction is executed, it is recorded as a new entry in the Spectrum. Detailed information such as the sender's and receiver's addresses and the transferred amount are logged. - -Immutable Records: Upon a transaction's recording in an epoch, it cannot be altered. This immutable nature of the Spectrum ensures the accuracy and security of the network's transaction history. - -## Accessibility -The Spectrum can be obtained directly from any Qubic node (Core/Full, Lite, or Bob) or downloaded from [storage.qubic.li](https://storage.qubic.li/network/). - -## Security and Decentralization -The Spectrum's decentralised structure ensures that control is not vested in a single entity. Instead, the Spectrum is distributed across all Computors. This decentralisation bolsters the resistance of the Spectrum to censorship and fraudulent attempts. Alterations to the Spectrum would necessitate the consensus of the majority of Computors, making it practically impossible. - - -## Summary -The Spectrum, as the clear and unalterable ledger within the Qubic network, maintains a comprehensive log of transactions executed on the network per epoch. With decentralised nodes managing its consensus, the Spectrum underscores its transparency, security, and decentralisation. These characteristics solidify it as a core component of the Qubic network, fostering trust and transparency for users across the globe. diff --git a/docs/learn/sw.md b/docs/learn/sw.md deleted file mode 100644 index 6267dce..0000000 --- a/docs/learn/sw.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -sidebar_label: 'Mining Software' ---- - -# Mining Software - -Understanding the software necessary to mine or find solutions on the Qubic network (and hence earn $QUBIC) is as important as understanding the hardware requirements. The software controls your hardware, facilitates communication with the Qubic network, and helps you manage your mining activity. - -## Available Mining Software - -Presently, there are a couple of software options available for mining on the Qubic network. - -### Qubic-li Miner -Qubic.li offers a client that can be used to mine $QUBIC. This software is user-friendly, making it a good choice for those new to mining. It provides essential features like managing your mining activity, monitoring performance, and connecting with the Qubic network. - -### Alienminer Custom Software -The Alienminer custom software is another option available to Qubic miners. This software has been developed with a focus on performance, and it may offer certain features and optimisations not found in the Qubic.li client. - -Both of these software options are actively maintained and updated to ensure the best mining performance and compatibility with the Qubic network. - -## Community Support -For help with setting up your mining software or to stay updated on the latest developments in Qubic, join the Qubic Discord. Discord is a communication platform where users discuss and collaborate on various topics, including Qubic and mining. There are different pools that maintain the artificial neural networks, which helps train the Qubic AI - each with its own pros and cons. If you're unsure which pool is best for you, or if you have specific questions or need assistance, don't hesitate to reach out to the community of developers and miners on the Qubic Discord. - -## Getting Started with Mining Software - -To get started with mining software, you'll first need to download and install the software that suits your needs best. Once installed, you'll configure the software to work with your hardware and connect with the Qubic network. The specific steps for setup and configuration can vary between software, so refer to the documentation provided with your chosen mining software for precise instructions. diff --git a/docs/learn/tokenomics.md b/docs/learn/tokenomics.md deleted file mode 100644 index 52b8cc4..0000000 --- a/docs/learn/tokenomics.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -sidebar_label: 'Tokenomics' ---- - -# Qubic Tokenomics - -The utility (or coin) driving the Qubic ecosystem is not a mere currency but an 'energy' unit. These units, known as $QUBIC, serve as the fuel for executing smart contracts and accessing other services on the Qubic platform. Unlike traditional monetary units, $QUBIC is burned when used, which is a fundamental concept in understanding the unique tokenomics of Qubic. - -## $QUBIC -$QUBIC acts as a measurement of computational 'energy' spent on the Qubic platform. Whether it's running smart contracts or seeking data from oracles, the consumption of $QUBIC is the bedrock of transactions within the system. It's vital to note that $QUBIC, while having a value, is not 'paid' to the system entities ([Computors](/learn/nodes)). Instead, it is 'burned' or permanently removed from circulation, contributing to a balance between inflation and deflation in the Qubic economy. - -:::info -The Qubic network utilizes $QUBIC (and not $QU) as its official financial ticker. -::: - -## Epoch and QU Generation -Each epoch in the Qubic network spans seven days and produces 1 trillion $QUBIC. These units are allocated to [Computors](/learn/nodes), the Computor Controlled Fund (CCF), QEarn, and burns. In scenarios of maximum efficiency, a Computor can potentially receive a revenue equivalent to 1 trillion $QUBIC divided by 676 (i.e. 1.479 billion $QUBIC). The distribution model encourages efficiency; Computors operating at suboptimal levels see reduced revenue. - -## Max Supply and Emission Schedule -The circulating supply is capped at 200 trillion $QUBIC, reduced from the original 1000 trillion via [community vote](https://app.qubic.li/public/proposal/81ca1427-2ebc-4e78-a662-25a643f48292). - -To reach this cap, Qubic implements a halving schedule that reduces net emissions by ~50% each halving (exact rates determined by quorum before each halving): - -| Epochs | Net Emissions per Epoch | -|--------|------------------------| -| 0-126 | 1 trillion $QUBIC | -| 127-174 | 850 billion $QUBIC | -| 175-226 | 450 billion $QUBIC | -| 227-278 | ~240 billion $QUBIC | -| 279-330 | ~125 billion $QUBIC | -| 331-382 | ~65 billion $QUBIC | -| 383-434 | ~35 billion $QUBIC | -| 435-486 | ~20 billion $QUBIC | -| 487-538 | ~10 billion $QUBIC | -| 539+ | ~5 billion $QUBIC | - -The first halving occurred at **Epoch 175** (August 2025), reducing net emissions from 850B to 450B per epoch. The Supply Watcher Smart Contract dynamically adjusts emissions based on real-time supply data. - -## Transfers and Fees -Qubic stands apart from traditional systems with its approach to transfers and fees. Transfers within the Qubic network are **feeless**, contributing to the efficiency and user-friendly nature of the platform. Furthermore, 'fees' associated with executing smart contracts are not fees in the traditional sense. This $QUBIC is burned and not given to Computors, further reinforcing the concept of $QUBIC as 'energy' rather than money. - -## The Role of Computors -[Computors](/learn/nodes) in the Qubic system play an instrumental role in maintaining its economic balance. They perform tasks assigned by the Arbitrator and vote by [Quorum](/learn/quorum) to determine the size of the commission for executing smart contracts. Interestingly, this commission does not become the Computors' income. Instead, it is burned, adjusting the inflation or deflation of $QUBIC in the ecosystem. - -## The Arbitrator -The [Arbitrator](/learn/arbitrator) oversees the assignment of AI training tasks in Qubic but does not exert influence over smart contract execution, voting procedures, or $QUBIC distribution. This segregation of roles aids in maintaining the decentralized nature of the platform. However, the Arbitrator also plays a crucial role in cases of disputes or challenges within the network, providing a balanced and fair resolution. As such, the Arbitrator contributes to maintaining the overall stability and order of the Qubic ecosystem. - -## Smart Contracts -Execution of [smart contracts](/learn/smart-contracts) on Qubic typically requires a commission, unlike many other crypto platforms. However, this commission does not go into the pockets of the Computors, but rather it is burned. The size of the commission is determined through a quorum vote by the Computors, effectively creating a mechanism for automatic adjustment of inflation or deflation. - -
- Burn Mechanism during IPO -
-

- Every new smart contract on Qubic requires an Initial Public Offering (IPO). This is not just a fundraising exercise but also a mechanism to control the QU supply. All $QUBIC spent during the IPO's Dutch auction will be permanently burned, ensuring a continuous reduction in the active supply of $QUBIC over time. -

-
-
- -:::info -While $QUBIC can be seen as the native coin, [Qx](/learn/qx) shares are the first ever tokens deployed on the Qubic ecosystem. -::: - -In essence, $QUBIC serves as the lifeblood of the Qubic network, driving its operations, incentivizing efficiency, and maintaining a balance in the tokenomics through a system of rewards and burns. The unique role of $QUBIC within the network design underlines the adaptive, efficient, and democratic nature of the Qubic platform. \ No newline at end of file diff --git a/docs/learn/updates-changes.md b/docs/learn/updates-changes.md deleted file mode 100644 index 650a7bf..0000000 --- a/docs/learn/updates-changes.md +++ /dev/null @@ -1,29 +0,0 @@ -# Updates and Changes (Draft) - -To ensure the continuous improvement and evolution of the Qubic ecosystem, regular updates and changes are essential. These updates can range from minor bug fixes to major feature additions or enhancements. Here's how the process works: - -## Proposal of Updates - -Anyone in the Qubic community can propose an update or change. This could be a developer identifying a potential improvement, a user suggesting a new feature, or a miner pinpointing a performance issue. Proposals are then shared with the community for consideration and discussion. - -## Evaluation and Testing - -Once an update has been proposed, it undergoes a thorough evaluation process. This involves technical reviews, performance testing, and potential impact assessment. This stage is crucial to ensure that any changes made will positively contribute to the Qubic ecosystem. - -## Community Feedback - -Feedback from the community is crucial in the decision-making process. Members of the Qubic community can voice their opinions on the proposed update, ask questions, or suggest modifications. This feedback helps ensure that the proposed changes meet the needs and expectations of the community. - -## Voting - -Following the feedback period, the proposed update is put to a vote. For a decision to be made, the Quorum must participate in the voting process. If the proposal receives majority support, it proceeds to the implementation phase. If not, it may be revised based on the feedback received or discarded. - -## Implementation - -Once an update has been approved, it moves onto the implementation phase. Developers work on incorporating the changes into the Qubic network. This might involve coding new features, optimising existing ones, or fixing reported bugs. - -## Communication - -Upon successful implementation, the update is communicated to the entire community. This helps ensure all members are aware of the changes and understand their impact. Regular communication keeps the community informed and engaged in the ongoing development of the Qubic ecosystem. - -The cycle of updates and changes is ongoing, contributing to the dynamic and evolving nature of the Qubic ecosystem. This process helps ensure that Qubic continues to meet the needs of its community while adapting to new technological advancements and challenges. diff --git a/docs/learn/upow.md b/docs/learn/upow.md deleted file mode 100644 index 16458b6..0000000 --- a/docs/learn/upow.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -sidebar_label: 'Useful Proof of Work' ---- - -# Useful Proof of Work (UPoW) and Artificial Intelligence (AI) in the Qubic Ecosystem - -Proof of Work (PoW) is a fundamental concept employed across various computer sciences and particularly in the realm of cryptocurrencies, where it ensures the security and reliability of decentralized networks like Bitcoin. It accomplishes this by making the process of altering or creating fraudulent transactions computationally expensive and time-consuming. However, in the innovative Qubic ecosystem, we've introduced an exciting twist on the traditional PoW by integrating AI training as a means of achieving the same consensus, giving rise to a novel consensus mechanism: Useful Proof of Work (UPoW). - -## Traditional Proof of Work -Proof of Work is essentially a competitive puzzle-solving process among computers. Whenever someone intends to make a transaction on the network, their computer must solve a complex mathematical puzzle. The first computer to solve the puzzle, or 'mine' the solution, gets the opportunity to validate the transaction and add it to a 'block' – a collection of transactions. This mining process is instrumental in preventing any single entity from controlling the network and ensures decentralised security. - -## The Qubic Approach: AI Training as Proof of Work -The Qubic ecosystem pushes the boundaries of the traditional PoW by employing AI training tasks in its consensus mechanism. Here, validators, known as Computors, backed by miners, often referred to as "AI miners," utilise AI models to solve intricate training tasks instead of conventional mathematical puzzles. - -### Functioning of AI Training for Proof of Work -In this approach, the network presents AI models with intricate training tasks, such as processing large datasets or training machine learning models on specific problems. This paradigm shift ensures that the work done by the Computors is not just for maintaining network security but also contributes to real-world applications and services. - -### Advantages of AI Training as Proof of Work -AI training as Proof of Work within the Qubic ecosystem presents numerous benefits. It's more energy-efficient as AI training can be optimised and run on normal hardware, consuming less energy per computational unit compared to traditional PoW. Additionally, AI training maintains the security and decentralisation of the network, with each AI miner competing to solve tasks, thus avoiding centralisation. - - -## Useful Proof of Work (UPoW) -Useful Proof of Work (UPoW) within the Qubic ecosystem transforms the computational energy expended in the mining process into valuable, beneficial outcomes. The UPoW protocol directs this computational power towards the training of Artificial Neural Networks (ANNs), thereby harnessing the network's immense computational capacity for the progression of machine learning. - -In the UPoW protocol of Qubic, the ranking of Computors hinges on the effectiveness of their AI miners in solving these complex problems. The primary objective of this mining operation is not merely the validation of transactions or creation of new blocks, but it's for establishing a Computor's ranking for each epoch, a time period of one week. The better a Computor's miner performs, the higher its ranking, and subsequently, its potential earnings. - -The integration of PoUW adds a layer of energy efficiency to the Qubic network. It ensures that the energy used in mining is channeled towards real-world problem-solving, such as machine learning tasks. This strategy increases the overall utility of the network, making it beneficial not only for network maintenance but also for external applications and services. - - -
- A Technical Exploration of the Mechanics of ANN-Driven UPoW in Qubic -
-

- In Qubic, we take a unique approach to mining through our 'Useful Proof of Work' (UPoW) system. A fundamental component of this approach is the utilization of artificial neural networks (ANNs), a model inspired by the human brain's own network of neurons. -

-

- Since the inception of ANNs, the objective has been to replicate the complexity and functionality of the human brain as closely as possible. While some researchers have chosen to mimic the sophisticated neuron activation function, which requires intricate mathematical models, we have focused on replicating the structural changes that occur in a developing brain. -

-

- If you think back to the early years of life, you'll realize that while the basic functionality of neurons remained the same, your mental abilities greatly improved. This development can largely be attributed to the increase in connections between neurons. -

-

- Research suggests that initialising an ANN with random parameters results in an entity possessing some primitive cognitive function. In fact, an ANN where all neurons are interconnected already has some degree of memory and intellect. The process of improving an ANN is actually a process of eliminating connections - up to a point. There's a 'sweet spot' where an ANN of a certain size demonstrates the best intellectual abilities. Beyond this point, further elimination of connections leads to degradation. -

-

- In Qubic, miners don't follow a path of destruction but instead generate ANNs with a random structure of connections. These parameters are changed, and Aigarth analyses the properties of the ANNs. The current stage involves collecting samples and trying to discern patterns that may provide insight into the future direction of development. This process reflects Qubic's unique approach to utilising ANNs and creates a mining process that is not only computationally challenging but also contributes to the development of these neural networks. -

-
-
- -## Conclusion - -The Qubic ecosystem's unique approach to PoW and the introduction of UPoW presents a promising and eco-friendly alternative to traditional consensus mechanisms. By employing AI models to solve complex tasks, Qubic maintains network security and decentralisation while reducing energy consumption and providing a valuable contribution to the advancement of machine learning and artificial intelligence. diff --git a/docs/learn/use-cases.md b/docs/learn/use-cases.md deleted file mode 100644 index a96a452..0000000 --- a/docs/learn/use-cases.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_label: 'Use Cases' ---- - -# Use Cases - -Qubic, with its unique consensus mechanism and native token $QUBIC, opens up a range of exciting possibilities for developers, businesses, and end-users. Let's explore some of the primary use cases that make Qubic a pioneering platform in the realm of distributed computing and decentralised finance. - -# Decentralised Computing Power -Qubic harnesses the power of distributed systems to create a global supercomputer. Users across the globe can tap into this network for a plethora of computational needs, from running complex simulations to training AI models. Qubic's consensus mechanism ensures that the computational tasks are executed efficiently and securely, with the added benefit of utilising underused computational resources across the globe. - -# Smart Contracts -Qubic's smart contracts promise sub-second finality and remarkable operational speed. This not only enables developers to create more efficient decentralized applications (dApps) but also expands the potential for real-time, interactive dApps. The quorum-based consensus ensures reliable execution of smart contracts, opening up new possibilities for decentralised finance, supply chain management, gaming, and many more sectors. - -# Micropayments -With its native coin, QUBIC, Qubic provides a mechanism for feeless transfers, promoting efficient micropayments. This can revolutionise industries where small transactions are frequent but often hindered by transaction fees, such as content monetisation and IoT communications. - -# Powering AI Training and Validation -The Qubic ecosystem utilizes Useful Proof of Work (UPoW) in training Artificial Neural Networks (ANNs). This unique approach uses the computational resources involved in mining processes more effectively, by directing the power towards meaningful, real-world applications. It can significantly contribute to AI development, offering a robust and decentralised platform for training and validating AI models. - -# Supply Chain and Logistics -Qubic can be a game-changer in supply chain and logistics. With its fast, secure, and scalable platform, real-time tracking and automation of supply chains become feasible. Smart contracts can be used for automatic validation and execution of agreements, reducing errors, fraud, and inefficiencies in the system. - -Overall, Qubic's versatile platform unlocks a myriad of possibilities across numerous domains. Its fast, reliable, and decentralised ecosystem is geared to drive innovation and efficiency in a variety of use cases. - diff --git a/docs/learn/wallets.md b/docs/learn/wallets.md deleted file mode 100644 index 9bc1529..0000000 --- a/docs/learn/wallets.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_label: 'Wallets' ---- - -# Wallets - -:::info -Qubic offers various wallet options to suit different user needs and preferences. For the most up-to-date list of available wallets, please consult [qubic.org](https://qubic.org/#wallets). -::: - -## Wallets by the Core Team - -All official wallets are open source. - -- 🌐 [Web Wallet](https://wallet.qubic.org) ([source code](https://github.com/qubic/wallet)) -- 📱 Mobile ([source code](https://github.com/qubic/wallet-app)) - - [iOS - App Store](https://apps.apple.com/us/app/qubic-wallet/id6502265811) - - [Android - Google Play](https://play.google.com/store/apps/details?id=org.qubic.wallet) - -## Community-Developed Wallets - -For community-developed wallets, visit [qubic.org](https://qubic.org/#wallets) and select "By Community". - -## Hardware Wallets - -1. [HashWallet](https://www.gethashwallet.com/qubic-wallet) - -## Types of Wallets - -Qubic wallets can be categorised into two main types: - -1. Direct Network Connected Wallet -2. Proxied Wallet - -### Direct Network Connected Wallet - -This type of wallet uses a direct connection to the Qubic network. It connects to at least 3 Qubic Nodes and interacts directly with them. - -Advantages: -- Most straightforward without any 3rd party software -- Mostly Open Source - -Disadvantages: -- More difficult to handle -- Requires direct connection to Qubic Peers - -### Proxied Wallet - -A Proxied Wallet uses a proxy service to interact with the network. The proxy provider ensures that your transaction is sent to the network. - -Advantages: -- Easy to handle -- Runs everywhere without direct connection to the network - -Disadvantages: -- Server-Part of Software may not be Open Source -- If the proxy service is offline, you can't interact with the network diff --git a/docs/overview/consensus.md b/docs/overview/consensus.md deleted file mode 100644 index 54d05f7..0000000 --- a/docs/overview/consensus.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_label: 'Qubic Consensus' ---- - -# Qubic Consensus aka Quorum - -Consensus is integral to maintaining harmony within a network of nodes (known as Computors in Qubic), allowing them to agree on specific decisions. In the context of Qubic, this consensus primarily pertains to the execution of transfers and smart contracts. Qubic's unique consensus protocol hinges on a quorum-based computation (QBC) system, which necessitates agreement from ⅔+ (or 451+) of the 676 Computors to validate the outcome of a calculation, referred to as [Quorum](/learn/quorum). - -Only the top-performing 676 [Computors](/learn/nodes), determined by the number of solutions their AI miners find, qualify for each epoch (a period of one week). This Useful Proof-of-Work mechanism thereby provides a system of ranking where the more solutions a Computor's miner can find, the higher their ranking. However, this mining operation is solely for the purpose of establishing their ranking and contributing to the devlopment of Aigarth, not for transaction validation as in traditional blockchain systems. - -Once qualified for an epoch, a Computor's role is to execute transactions on the Spectrum (the Qubic equivalent of a ledger) and execute smart contracts. However, to earn revenue, these Computors must demonstrate high performance in terms of speed and network compatibility. They are required to swiftly process transactions and be recognised by their fellow Computors in the network. Failure to keep up with the network's speed will result in them being ousted from their position, ensuring only the most efficient Computors participate in the decision-making process. - -The end result is a consensus protocol that maintains an equilibrium between computational work and operational efficiency. This consensus mechanism ensures a decentralised, adaptable, and high-performance blockchain network, that upholds the integrity and accuracy of the Spectrum. - -Key Features Include: - -- **Trustworthiness**: In Qubic, the consensus guarantees reliability as it mandates the majority agreement before a finalisation, reducing the chances of errors and maintaining the integrity of the shared Spectrum. - -- **Adaptive**: The Qubic consensus protocol is designed to be highly adaptive to ensure the network operates at peak performance. The system continually reassesses and ranks the Computors based on the solutions discovered by their AI miners during each epoch. Only the 676 most efficient Computors qualify to participate in the consensus process. Those unable to keep up with the network's pace are replaced, ensuring the network consistently comprises the most capable Computors. This adaptiveness creates a dynamic environment that values and rewards efficiency and performance. - -- **Decentralisation**: True decentralisation is a cornerstone of the Qubic platform. All major decisions, including validation of transfers and smart contract outcomes, are made through a quorum of 451+ Computors, rather than being controlled by a single entity. Moreover, the arbitrator has no influence over smart contract execution, voting, or Qubic units (qus) distribution. This structure maintains a balance of power and prevents any single party from dominating the network, keeping the system genuinely decentralized and democratic. - -In short, Qubic's consensus protocol contributes to a reliable, efficient, and democratic blockchain environment, setting it apart from many existing platforms. diff --git a/docs/overview/disclaimer.md b/docs/overview/disclaimer.md deleted file mode 100644 index 823e739..0000000 --- a/docs/overview/disclaimer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_label: 'Disclaimer' ---- - -# Disclaimer - -The Knowledge Base, including all articles on this site, is provided for informational and technical support purposes only, without any representation, warranty, or guarantee of any kind. This content does not constitute an offer to sell or solicitation of an offer to buy any security or other regulated financial instrument. The information provided is not intended as technical, investment, financial, accounting, tax, legal, or any other form of advice; please consult your own professional advisors. We encourage you to conduct your own research before connecting to or interacting with any decentralised application (dApp) or third party, or making any investment or financial decisions. Services or dApps you access, such as Qx and any others, are offered by third parties unaffiliated with us. Please review this Notice and the Terms of Use before accessing or using any content on this site. diff --git a/docs/overview/introduction.md b/docs/overview/introduction.md deleted file mode 100644 index 87d05d8..0000000 --- a/docs/overview/introduction.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_label: 'What is Qubic?' -sidebar_position: 1 -title: 'What is Qubic?' ---- - -# Introducing Qubic: The Future of Crypto - -:::info - -The Qubic documentation is currently in public preview and may change significantly as feedback is captured from readers like you. Join the Qubic [Discord](https://discord.gg/2vDMR8m) to share your feedback in the #docs channel. - -::: - -Get ready to dive into Qubic, an innovative crypto platform that's changing the game. Founded by Sergey Ivancheglo, the mastermind behind IOTA and NXT, Qubic is revolutionising the world of cryptocurrency with its quorum-based computer (QBC) system. - -At its core, Qubic is powered by 676 [Computors](/learn/nodes) responsible for executing smart contracts and securing the network. The platform ensures reliability by requiring a [Quorum](/learn/quorum) of ⅔+ (or 451+) Computors to reach a consensus before considering it final. Unlike traditional crypto platforms that consume massive amounts of energy for mining, Qubic boasts a [Useful Proof-of-Work](/learn/upow) system that leverages mining capacities for AI training. - -In addition to Computors, Qubic features candidates, who contribute to AI training without receiving compensation. A weekly ranking, or "epoch," determines the top 451 performing Computors, who maintain their status while the remaining spots are filled from the pool of candidates and lower-ranking Computors. - -Each epoch generates 1 trillion [Qubic Units](/learn/tokenomics) (QUs) to be distributed primarily among Computors. Computors also have the ability to support initiatives they believe will benefit the Qubic ecosystem by directing a percentage of their earnings to support them. Inefficient Computors and miners have a portion of their rewards burned, while the remainder goes to the [arbitrator](/learn/arbitrator). Notably, the arbitrator's role is limited to managing AI training tasks, resolving disputes and protecting user interests, and has no influence over smart contracts, voting, or qus distribution. - -Qubic sets itself apart with feeless transactions, a rarity among crypto platforms. While executing smart contracts typically incurs a commission, Computors vote by quorum to set the commission size, which is then burned to regulate inflation and deflation. - -Thanks to Qubic's direct "bare metal" code execution, it boasts the fastest Turing-complete smart contracts written in C++. As opposed to virtual machine-based platforms, Qubic's approach allows for full utilisation of computing power, enabling smart contract execution in mere seconds. - -In essence, Qubic combines the best features of existing platforms and eliminates their limitations, making it an ideal choice for those seeking a reliable, efficient, and user-friendly crypto platform. diff --git a/docs/overview/key-features.md b/docs/overview/key-features.md deleted file mode 100644 index b83b31a..0000000 --- a/docs/overview/key-features.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_label: 'Key Features' ---- - -# Key Features - -## Open-Source -Qubic is built on open-source principles. This means that its source code (https://github.com/qubic/core) is freely available for anyone to review, modify and enhance. Open-source fosters a collaborative environment where developers across the world can contribute to the evolution of the project, making it a community-driven platform. - -## Useful Proof-of-Work -Unlike traditional Proof-of-Work mechanisms that solely secure the network, Qubic's Useful PoW not only helps determine the ranking of computors for each epoch but also contributes to AI training. This dual-purpose approach optimises computational resources, ensuring no energy is wasted. - -## Operating System Independent -Qubic's design allows it to operate directly on bare metal without needing an operating system. This contributes to efficient use of the hardware, heightened security, and speedy execution of tasks. - -## Sub-second Finality -Qubic offers real sub-second finality, meaning the confirmation of transactions and the execution of smart contracts is practically instantaneous. Unlike many other platforms that can take several seconds or even minutes to achieve finality, Qubic's efficiency and speed are unparalleled. - -## Fastest Smart Contracts -The smart contracts in Qubic, written in C++, execute directly on bare metal, ensuring they are the fastest in the blockchain industry. This quick execution significantly reduces transaction times, making Qubic an ideal platform for businesses that require real-time, reliable smart contract execution. - -## Speed & Security -The design of Qubic has been meticulously optimised for speed and security. Operating directly on bare metal and in UEFI mode, Qubic is able to leverage the full potential of the underlying hardware, ensuring a high level of efficiency and performance. Unlike traditional systems that work through multiple layers of software and hardware, Qubic's direct interaction with the hardware allows it to bypass any potential bottlenecks and latency issues, leading to rapid execution of tasks. - -Furthermore, this approach also enhances the security of computors by reducing the attack surface typically associated with complex software layers. As a result, transactions are processed, and smart contracts executed, in an extremely timely manner. The Qubic network is specifically optimized for speed, both in terms of network transmission and computational execution, delivering a fast, secure, and efficient platform for users. This level of speed optimisation sets Qubic apart from many other crypto platforms, further solidifying its standing as a groundbreaking blockchain technology. diff --git a/docs/overview/overview.md b/docs/overview/overview.md deleted file mode 100644 index bc4a604..0000000 --- a/docs/overview/overview.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_label: 'Why Qubic?' ---- - -# Why Qubic - -## The Benefits and Advantages - -In a world where decentralisation, security, and efficiency are of paramount importance, Qubic stands out as a groundbreaking solution. Combining the power of distributed ledger technology, smart contracts, and decentralised applications, Qubic provides a robust platform for addressing many challenges faced by various industries today. - -Qubic's decentralised nature ensures that the network remains resilient against cyberattacks and single points of failure, fostering trust among participants. Its smart contract capabilities enable the automation of complex processes, reducing the need for intermediaries and enhancing transparency. Furthermore, Qubic's support for decentralised applications allows developers to create and deploy innovative solutions, driving the adoption of blockchain technology across different sectors. - -## How Qubic Works: A High-Level Overview - -Qubic is built upon a distributed ledger technology that utilises a consensus algorithm to maintain a secure and synchronized record of all transactions. Nodes in the network participate in the validation of these transactions, ensuring the integrity and immutability of the ledger. - -Smart contracts, self-executing agreements with the terms directly coded into the contract, are a core component of Qubic. They enable the automation of various processes, such as the transfer of assets or the execution of agreements, without the need for a centralised authority. This not only reduces costs but also enhances the overall security and transparency of the system. - -Decentralized applications (dApps) built on Qubic leverage the platform's smart contract and token functionalities, allowing developers to create innovative solutions tailored to various use cases. These DApps can interact with the underlying blockchain and smart contracts to provide users with a seamless and secure experience. - -## Qubic: A Superior Solution - -Qubic distinguishes itself from other blockchain solutions with its unique combination of features, including decentralisation, smart contract capabilities, and support for DApps. These characteristics make Qubic a powerful platform that can transform industries by offering enhanced security, efficiency, and scalability. - -The decentralised nature of Qubic ensures that no single entity can control or manipulate the network, fostering trust and collaboration among participants. Its smart contract functionality enables the automation of complex processes while reducing the need for intermediaries, promoting transparency and reducing costs. Moreover, the support for DApps allows developers to create and deploy a wide range of applications tailored to specific use cases, driving innovation and the adoption of blockchain technology. - -By providing a comprehensive and robust solution, Qubic stands out as a superior option for those looking to harness the potential of blockchain technology. diff --git a/docs/overview/whitepaper.md b/docs/overview/whitepaper.md deleted file mode 100644 index 736b22c..0000000 --- a/docs/overview/whitepaper.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -sidebar_label: 'Whitepaper' ---- - -# Whitepaper -Please find the current iteration of the whitepaper here: https://qubic.org/whitepaper - - -## Development Approach - -Instead of releasing a whitepaper in the early stages, Qubic will only publish a whitepaper upon completion of its development. This approach ensures that all the information in the whitepaper will be accurate and up-to-date, avoiding the common pitfall of many projects whose actual development diverges from their initial whitepaper. In the meantime, our source code is considered a 'living' whitepaper as it has been completely open-source since day one, https://github.com/qubic/core. diff --git a/docusaurus.config.js b/docusaurus.config.js deleted file mode 100644 index 809d574..0000000 --- a/docusaurus.config.js +++ /dev/null @@ -1,247 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const lightCodeTheme = require('prism-react-renderer').themes.github; -const darkCodeTheme = require('prism-react-renderer').themes.dracula; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: 'Qubic Docs', - tagline: 'Learn everything about Qubic you need to know.', - favicon: 'img/qubic.ico', - - // Set the production url of your site here - url: 'https://docs.qubic.org', - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: '/', - - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: 'qubic', // Usually your GitHub org/user name. - projectName: 'docs.qubic.org', // Usually your repo name. - scripts: [ - { - src: "https://dashboard.letmeexplain.ai/embed/lme_chatbot_widget.js", // LetMeExplain embed script - async: false, - }, - { - src: "/js/enable_lme_chatbot.js", // Custom initialization script - defer: true, - }, - ], - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', - - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: 'en', - locales: ['en'], - }, - - plugins: [ - [ - '@scalar/docusaurus', - { - id: 'query-api', - label: false, - route: '/apis/query', - configuration: { - spec: { - url: '/openapi/query-services.openapi.yaml', - }, - metaData: { - title: 'Query API', - }, - defaultOpenAllTags: true, - hideModels: true, - hideClientButton: true, - expandAllResponses: true, - }, - }, - ], - [ - '@scalar/docusaurus', - { - id: 'live-api', - label: false, - route: '/apis/live', - configuration: { - spec: { - url: '/openapi/qubic-http.openapi.yaml', - }, - metaData: { - title: 'Live API', - }, - defaultOpenAllTags: true, - hideModels: true, - hideClientButton: true, - expandAllResponses: true, - }, - }, - ], - ], - - presets: [ - [ - 'classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve('./sidebars.js'), - routeBasePath: '/', // Serve docs at the root - path: 'docs', - // Remove this to remove the "edit this page" links. - // editUrl: 'https://github.com/qubic/docs', - }, - blog: false, // Disable the blog plugin - theme: { - customCss: require.resolve('./src/css/custom.css'), - }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - image: 'img/qubic-docs-logo-lightmode.svg', - navbar: { - title: '', - logo: { - alt: 'Qubic Logo', - src: 'img/qubic-docs-logo-lightmode.svg', - srcDark: 'img/qubic-docs-logo-darkmode.svg', - }, - items: [ - { - label: 'Overview', - type: 'docSidebar', - sidebarId: 'overviewSidebar', - position: 'left', - }, - { - label: 'Learn', - type: 'docSidebar', - sidebarId: 'learnSidebar', - position: 'left', - }, - { - label: 'Computors', - type: 'docSidebar', - sidebarId: 'compSidebar', - position: 'left', - }, - { - label: 'Developers', - type: 'docSidebar', - sidebarId: 'devSidebar', - position: 'left', - }, - { - label: 'API Center', - to: '/apis', - position: 'left', - }, - { - href: 'https://github.com/qubic/docs', - label: 'GitHub', - position: 'right', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'Documentation', - items: [ - { - label: 'Overview', - to: '/overview/introduction', - }, - { - label: 'Learn', - to: '/learn/overview', - }, - { - label: 'Computors', - to: '/computors/prerequisites', - }, - { - label: 'Developers', - to: '/developers/intro', - }, - { - label: 'API Center', - to: '/apis', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Discord', - href: 'https://discord.gg/2vDMR8m', - }, - { - label: 'Twitter', - href: 'https://twitter.com/qubic_network', - }, - { - label: 'Telegram', - href: 'https://t.me/qubic_network', - }, - ], - }, - { - title: 'Official Links', - items: [ - { - label: 'Careers', - href: 'https://qubic.org/careers', - }, - { - label: 'Explorer', - href: 'https://explorer.qubic.org/', - }, - { - label: 'GitHub', - href: 'https://github.com/qubic/docs', - }, - { - label: 'Qubic Website', - href: 'https://qubic.org/', - }, - { - label: 'Wallet', - href: 'https://wallet.qubic.org/', - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} qubic.org`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - colorMode: { - defaultMode: 'dark', // Set dark mode as default - disableSwitch: false, // Allow users to switch between light and dark mode - respectPrefersColorScheme: false, // Ignore the user's system preference - }, - mermaid: { - theme: {light: 'neutral', dark: 'forest'}, - }, - }), - markdown: { - mermaid: true, - }, - themes: ['@docusaurus/theme-mermaid'], -}; - -module.exports = config; diff --git a/i18n/de/docusaurus-plugin-content-docs/current/overview/consensus.md b/i18n/de/docusaurus-plugin-content-docs/current/overview/consensus.md new file mode 100644 index 0000000..42127da --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/overview/consensus.md @@ -0,0 +1,23 @@ +--- +sidebar_label: 'Qubic-Konsens' +--- + +# Qubic-Konsens, auch bekannt als Quorum + +Konsens ist entscheidend für die Aufrechterhaltung der Harmonie innerhalb eines Netzwerks von Knoten (bei Qubic als Computoren bezeichnet), da er ihnen ermöglicht, sich auf bestimmte Entscheidungen zu einigen. Im Kontext von Qubic bezieht sich dieser Konsens hauptsächlich auf die Ausführung von Transfers und Smart Contracts. Das einzigartige Konsensprotokoll von Qubic basiert auf einem quorumbasierten Berechnungssystem (QBC), das die Zustimmung von ⅔+ (oder 451+) der 676 Computoren erfordert, um das Ergebnis einer Berechnung zu validieren, was als [Quorum](/learn/quorum) bezeichnet wird. + +Nur die 676 leistungsstärksten [Computoren](/learn/nodes), bestimmt durch die Anzahl der von ihren KI-Minern gefundenen Lösungen, qualifizieren sich für jede Epoche (ein Zeitraum von einer Woche). Dieser Useful Proof-of-Work-Mechanismus bietet somit ein Ranglistensystem, bei dem ein Computor umso höher eingestuft wird, je mehr Lösungen sein Miner finden kann. Dieser Mining-Vorgang dient jedoch ausschließlich der Ermittlung ihrer Rangfolge und der Weiterentwicklung von Aigarth, nicht der Transaktionsvalidierung wie in traditionellen Blockchain-Systemen. + +Sobald sich ein Computor für eine Epoche qualifiziert hat, besteht seine Aufgabe darin, Transaktionen auf dem Spectrum (dem Qubic-Äquivalent zu einem Ledger) auszuführen und Smart Contracts zu verarbeiten. Um jedoch Einnahmen zu erzielen, müssen diese Computoren hohe Leistung in Bezug auf Geschwindigkeit und Netzwerkkompatibilität nachweisen. Sie sind verpflichtet, Transaktionen schnell zu verarbeiten und von ihren Mit-Computoren im Netzwerk erkannt zu werden. Wenn sie mit der Geschwindigkeit des Netzwerks nicht Schritt halten können, werden sie aus ihrer Position entfernt, um sicherzustellen, dass nur die effizientesten Computoren am Entscheidungsprozess teilnehmen. + +Das Endergebnis ist ein Konsensprotokoll, das ein Gleichgewicht zwischen Rechenarbeit und Betriebseffizienz aufrechterhält. Dieser Konsensmechanismus gewährleistet ein dezentrales, anpassungsfähiges und leistungsstarkes Blockchain-Netzwerk, das die Integrität und Genauigkeit des Spectrum wahrt. + +Zu den Hauptmerkmalen gehören: + +- **Vertrauenswürdigkeit**: Bei Qubic garantiert der Konsens Zuverlässigkeit, da er eine Mehrheitszustimmung vor einer endgültigen Bestätigung erfordert. Dies verringert die Fehlerwahrscheinlichkeit und erhält die Integrität des gemeinsamen Spectrum. + +- **Anpassungsfähigkeit**: Das Qubic-Konsensprotokoll ist hochgradig anpassungsfähig konzipiert, um einen Spitzenbetrieb des Netzwerks zu gewährleisten. Das System bewertet und stuft die Computoren in jeder Epoche kontinuierlich basierend auf den von ihren KI-Minern entdeckten Lösungen neu ein. Nur die 676 effizientesten Computoren qualifizieren sich für die Teilnahme am Konsensprozess. Diejenigen, die mit dem Tempo des Netzwerks nicht mithalten können, werden ersetzt, sodass das Netzwerk stets aus den leistungsfähigsten Computoren besteht. Diese Anpassungsfähigkeit schafft eine dynamische Umgebung, die Effizienz und Leistung schätzt und belohnt. + +- **Dezentralisierung**: Echte Dezentralisierung ist ein Grundpfeiler der Qubic-Plattform. Alle wichtigen Entscheidungen, einschließlich der Validierung von Transfers und Smart-Contract-Ergebnissen, werden durch ein Quorum von 451+ Computoren getroffen und nicht von einer einzelnen Instanz kontrolliert. Darüber hinaus hat der Arbitrator keinen Einfluss auf die Ausführung von Smart Contracts, Abstimmungen oder die Verteilung von Qubic-Einheiten (qus). Diese Struktur hält die Machtbalance aufrecht und verhindert, dass eine einzelne Partei das Netzwerk dominiert, wodurch das System wirklich dezentral und demokratisch bleibt. + +Kurz gesagt trägt das Qubic-Konsensprotokoll zu einer zuverlässigen, effizienten und demokratischen Blockchain-Umgebung bei und hebt es damit von vielen bestehenden Plattformen ab. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/overview/disclaimer.md b/i18n/de/docusaurus-plugin-content-docs/current/overview/disclaimer.md new file mode 100644 index 0000000..494bf68 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/overview/disclaimer.md @@ -0,0 +1,7 @@ +--- +sidebar_label: 'Haftungsausschluss' +--- + +# Haftungsausschluss + +Die Wissensdatenbank, einschließlich aller Artikel auf dieser Website, wird ausschließlich zu Informations- und technischen Supportzwecken bereitgestellt, ohne jegliche Zusicherung, Gewährleistung oder Garantie jeglicher Art. Dieser Inhalt stellt kein Angebot zum Verkauf oder eine Aufforderung zum Kauf von Wertpapieren oder anderen regulierten Finanzinstrumenten dar. Die bereitgestellten Informationen sind nicht als technische, Anlage-, Finanz-, Buchhaltungs-, Steuer-, Rechts- oder sonstige Beratung gedacht; bitte konsultieren Sie Ihre eigenen professionellen Berater. Wir empfehlen Ihnen, eigene Recherchen durchzuführen, bevor Sie eine Verbindung zu einer dezentralen Anwendung (dApp) oder einem Dritten herstellen oder mit diesen interagieren oder Anlage- oder Finanzentscheidungen treffen. Dienste oder dApps, auf die Sie zugreifen, wie Qx und alle anderen, werden von nicht mit uns verbundenen Dritten angeboten. Bitte lesen Sie diese Hinweise und die Nutzungsbedingungen, bevor Sie auf Inhalte dieser Website zugreifen oder diese nutzen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/overview/introduction.md b/i18n/de/docusaurus-plugin-content-docs/current/overview/introduction.md new file mode 100644 index 0000000..faf769c --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/overview/introduction.md @@ -0,0 +1,27 @@ +--- +sidebar_label: 'Was ist Qubic?' +sidebar_position: 1 +title: 'Was ist Qubic?' +--- + +# Qubic: Die Zukunft der Kryptowelt + +:::info + +Die Qubic-Dokumentation befindet sich derzeit in der öffentlichen Vorschau und kann sich aufgrund von Rückmeldungen von Lesern wie Ihnen erheblich ändern. Treten Sie dem Qubic [Discord](https://discord.gg/2vDMR8m) bei, um Ihr Feedback im #docs-Kanal zu teilen. + +::: + +Machen Sie sich bereit, in Qubic einzutauchen – eine innovative Krypto-Plattform, die die Spielregeln verändert. Gegründet von Sergey Ivancheglo, dem Mastermind hinter IOTA und NXT, revolutioniert Qubic die Welt der Kryptowährungen mit seinem quorum-basierten Computersystem (QBC). + +Im Kern wird Qubic von 676 [Computoren](/learn/nodes) betrieben, die für die Ausführung von Smart Contracts und die Sicherung des Netzwerks verantwortlich sind. Die Plattform gewährleistet Zuverlässigkeit, indem sie ein [Quorum](/learn/quorum) von ⅔+ (oder 451+) Computoren erfordert, um einen Konsens zu erreichen, bevor dieser als endgültig betrachtet wird. Im Gegensatz zu traditionellen Krypto-Plattformen, die enorme Energiemengen für das Mining verbrauchen, verfügt Qubic über ein [Useful Proof-of-Work](/learn/upow)-System, das Mining-Kapazitäten für KI-Training nutzbar macht. + +Neben Computoren umfasst Qubic Kandidaten, die zum KI-Training beitragen, ohne dafür eine Vergütung zu erhalten. Ein wöchentliches Ranking, eine sogenannte "Epoche", bestimmt die 451 leistungsstärksten Computoren, die ihren Status behalten, während die verbleibenden Plätze aus dem Pool der Kandidaten und niedriger eingestuften Computoren besetzt werden. + +Jede Epoche generiert 1 Billion [Qubic Units](/learn/tokenomics) (QUs), die hauptsächlich unter den Computors verteilt werden. Computoren haben außerdem die Möglichkeit, Initiativen, von denen sie glauben, dass sie dem Qubic-Ökosystem zugutekommen, zu unterstützen, indem sie einen Prozentsatz ihrer Einnahmen für diese Zwecke verwenden. Ein Teil der Belohnungen von ineffizienten Computoren und Minern werden verbrannt, während der Rest an den [Arbitrator](/learn/arbitrator) geht. Davon abgesehen beschränkt sich die Rolle des Arbitrators auf die Verwaltung von KI-Trainingsaufgaben, die Beilegung von Streitigkeiten und den Schutz von Nutzerinteressen und hat keinen Einfluss auf Smart Contracts, Abstimmungen oder die QU-Verteilung. + +Qubic zeichnet sich durch gebührenfreie Transaktionen aus, eine Seltenheit unter Krypto-Plattformen. Während die Ausführung von Smart Contracts in der Regel eine Provision verursacht, stimmen Computoren per Quorum über die Höhe der Provision ab, die dann verbrannt wird, um Inflation und Deflation zu regulieren. + +Dank Qubics direkter "Bare-Metal"-Codeausführung verfügt es über die schnellsten Turing-kompletten Smart Contracts, die in C++ geschrieben sind. Im Gegensatz zu Plattformen auf Basis von Virtual-Machines ermöglicht Qubics Ansatz die volle Nutzung der Rechenleistung, was die Ausführung von Smart Contracts in nur wenigen Sekunden ermöglicht. + +Im Wesentlichen vereint Qubic die besten Eigenschaften bestehender Plattformen und beseitigt deren Einschränkungen, was es zur idealen Wahl für diejenigen macht, die eine zuverlässige, effiziente und benutzerfreundliche Krypto-Plattform suchen. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/overview/key-features.md b/i18n/de/docusaurus-plugin-content-docs/current/overview/key-features.md new file mode 100644 index 0000000..9a71c75 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/overview/key-features.md @@ -0,0 +1,25 @@ +--- +sidebar_label: 'Hauptmerkmale' +--- + +# Hauptmerkmale + +## Open-Source +Qubic basiert auf Open-Source-Prinzipien. Das bedeutet, dass sein Quellcode (https://github.com/qubic/core) für jeden frei einsehbar, modifizierbar und erweiterbar ist. Open-Source fördert eine kollaborative Umgebung, in der Entwickler weltweit zur Weiterentwicklung des Projekts beitragen können, wodurch es zu einer community-gesteuerten Plattform wird. + +## Useful Proof-of-Work +Im Gegensatz zu traditionellen Proof-of-Work-Mechanismen, die lediglich das Netzwerk absichern, dient Qubics Useful-PoW nicht nur zur Bestimmung des Rankings der Computoren für jede Epoche, sondern trägt auch zum KI-Training bei. Dieser doppelte Zweck optimiert die Rechenressourcen und stellt sicher, dass keine Energie verschwendet wird. + +## Betriebssystemunabhängig +Qubics Design ermöglicht den direkten Betrieb auf der Hardware ohne ein Betriebssystem. Dies trägt zur effizienten Nutzung der Hardware, erhöhter Sicherheit und schneller Ausführung von Aufgaben bei. + +## Sub-Sekunden-Finalität +Qubic bietet echte Sub-Sekunden-Finalität, was bedeutet, dass die Bestätigung von Transaktionen und die Ausführung von Smart Contracts praktisch augenblicklich erfolgen. Im Gegensatz zu vielen anderen Plattformen, die mehrere Sekunden oder sogar Minuten für die Finalität benötigen, sind Qubics Effizienz und Geschwindigkeit unübertroffen. + +## Schnellste Smart Contracts +Die Smart Contracts in Qubic, geschrieben in C++, werden direkt auf der Hardware ausgeführt, wodurch sie die schnellsten in der Blockchain-Branche sind. Diese schnelle Ausführung reduziert Transaktionszeiten erheblich und macht Qubic zur idealen Plattform für Unternehmen, die Echtzeit- und zuverlässige Smart-Contract-Ausführung benötigen. + +## Geschwindigkeit & Sicherheit +Das Design von Qubic wurde sorgfältig für Geschwindigkeit und Sicherheit optimiert. Durch den direkten Betrieb auf der Hardware und im UEFI-Modus kann Qubic das volle Potenzial der zugrundeliegenden Hardware ausschöpfen, was ein hohes Maß an Effizienz und Leistung gewährleistet. Im Gegensatz zu traditionellen Systemen, die durch mehrere Software- und Hardware-Schichten arbeiten, ermöglicht Qubics direkte Interaktion mit der Hardware, potenzielle Engpässe und Latenzprobleme zu umgehen, was zu einer schnellen Aufgabenerledigung führt. + +Darüber hinaus verbessert dieser Ansatz auch die Sicherheit der Computoren, indem die Angriffsfläche reduziert wird, die typischerweise mit komplexen Software-Schichten verbunden ist. Dadurch werden Transaktionen verarbeitet und Smart Contracts äußerst zeitnah ausgeführt. Das Qubic-Netzwerk ist speziell für Geschwindigkeit optimiert, sowohl in Bezug auf die Netzwerkübertragung als auch auf die rechnerische Ausführung, und bietet den Nutzern eine schnelle, sichere und effiziente Plattform. Dieses Maß an Geschwindigkeitsoptimierung hebt Qubic von vielen anderen Krypto-Plattformen ab und untermauert weiterhin seinen Status als bahnbrechende Blockchain-Technologie. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/overview/overview.md b/i18n/de/docusaurus-plugin-content-docs/current/overview/overview.md new file mode 100644 index 0000000..cfafeeb --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/overview/overview.md @@ -0,0 +1,27 @@ +--- +sidebar_label: 'Warum Qubic?' +--- + +# Warum Qubic + +## Die Vorteile und Vorzüge + +In einer Welt, in der Dezentralisierung, Sicherheit und Effizienz von größter Bedeutung sind, sticht Qubic als bahnbrechende Lösung hervor. Durch die Kombination der Stärken von Distributed-Ledger-Technologie, Smart Contracts und dezentralen Anwendungen bietet Qubic eine robuste Plattform zur Bewältigung vieler Herausforderungen, mit denen verschiedene Branchen heute konfrontiert sind. + +Der dezentrale Charakter von Qubic stellt sicher, dass das Netzwerk widerstandsfähig gegen Cyberangriffe und Single Points of Failure bleibt und Vertrauen unter den Teilnehmern fördert. Seine Smart-Contract Funktionen ermöglichen die Automatisierung komplexer Prozesse, reduzieren den Bedarf an Intermediären und erhöhen die Transparenz. Darüber hinaus erlaubt die Unterstützung für dezentrale Anwendungen (dApps) Entwicklern, innovative Lösungen zu erstellen und zu implementieren, was die Verbreitung der Blockchain-Technologie in verschiedenen Sektoren vorantreibt. + +## Wie Qubic funktioniert: Ein allgemeiner Überblick + +Qubic basiert auf einer Distributed-Ledger-Technologie, die einen Konsensalgorithmus nutzt, um eine sichere und synchronisierte Aufzeichnung aller Transaktionen zu führen. Knoten im Netzwerk beteiligen sich an der Validierung dieser Transaktionen und gewährleisten so die Integrität und Unveränderbarkeit des Ledgers. + +Smart Contracts – selbstausführende Vereinbarungen, deren Bedingungen direkt in den Code integriert sind – sind eine Kernkomponente von Qubic. Sie ermöglichen die Automatisierung verschiedener Prozesse, wie die Übertragung von Vermögenswerten oder die Ausführung von Vereinbarungen, ohne dass eine zentrale Autorität erforderlich ist. Dies reduziert nicht nur Kosten, sondern erhöht auch die allgemeine Sicherheit und Transparenz des Systems. + +Auf Qubic aufgebaute dezentrale Anwendungen (dApps) nutzen die Smart-Contract- und Token-Funktionalitäten der Plattform, sodass Entwickler innovative, auf verschiedene Anwendungsfälle zugeschnittene Lösungen erstellen können. Diese dApps können mit der zugrundeliegenden Blockchain und den Smart Contracts interagieren, um Nutzern ein nahtloses und sicheres Erlebnis zu bieten. + +## Qubic: Eine überlegene Lösung + +Qubic hebt sich durch seine einzigartige Kombination von Merkmalen – darunter Dezentralisierung, Smart-Contract Funktionen und Unterstützung für dApps – von anderen Blockchain-Lösungen ab. Diese Eigenschaften machen Qubic zu einer leistungsstarken Plattform, die Branchen durch verbesserte Sicherheit, Effizienz und Skalierbarkeit transformieren kann. + +Der dezentrale Charakter von Qubic stellt sicher, dass keine einzelne Entität das Netzwerk kontrollieren oder manipulieren kann, was Vertrauen und Zusammenarbeit unter den Teilnehmern fördert. Seine Smart-Contract-Funktionalität ermöglicht die Automatisierung komplexer Prozesse bei gleichzeitiger Reduzierung des Bedarfs an Intermediären, was Transparenz fördert und Kosten senkt. Darüber hinaus erlaubt die Unterstützung für dApps Entwicklern, eine breite Palette anwendungsfallspezifischer Anwendungen zu erstellen und zu implementieren, was Innovation und die Verbreitung der Blockchain-Technologie vorantreibt. + +Indem Qubic eine umfassende und robuste Lösung bietet, sticht es als überlegene Option für diejenigen hervor, die das Potenzial der Blockchain-Technologie nutzen möchten. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/overview/whitepaper.md b/i18n/de/docusaurus-plugin-content-docs/current/overview/whitepaper.md new file mode 100644 index 0000000..7784078 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/overview/whitepaper.md @@ -0,0 +1,10 @@ +--- +sidebar_label: 'Whitepaper' +--- + +# Whitepaper +Die aktuelle Version des Whitepapers finden Sie hier: https://qubic.org/whitepaper + +## Entwicklungsansatz + +Anstatt in frühen Phasen ein Whitepaper zu veröffentlichen, wird Qubic ein Whitepaper erst nach Abschluss der Entwicklung veröffentlichen. Dieser Ansatz stellt sicher, dass alle Informationen im Whitepaper korrekt und aktuell sind, und vermeidet die häufige Problematik vieler Projekte, deren tatsächliche Entwicklung vom ursprünglichen Whitepaper abweicht. In der Zwischenzeit gilt unser Quellcode als "lebendiges" Whitepaper, da er von Anfang an vollständig Open-Source ist: https://github.com/qubic/core. \ No newline at end of file diff --git a/package.json b/package.json deleted file mode 100644 index c245cb1..0000000 --- a/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "docs-qubic-org", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc" - }, - "dependencies": { - "@docusaurus/core": "^3.4.0", - "@docusaurus/preset-classic": "^3.4.0", - "@docusaurus/theme-mermaid": "^3.4.0", - "@mdx-js/react": "^3.0.1", - "@scalar/docusaurus": "^0.7.26", - "clsx": "^1.2.1", - "prism-react-renderer": "^2.3.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-player": "^2.12.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.0.0", - "@docusaurus/tsconfig": "3.0.0", - "@types/react": "^18.2.29", - "typescript": "~5.2.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=18.0" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index b8c61d6..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,11222 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@docusaurus/core': - specifier: ^3.4.0 - version: 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/preset-classic': - specifier: ^3.4.0 - version: 3.4.0(@algolia/client-search@4.23.3)(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.14.0)(typescript@5.2.2) - '@docusaurus/theme-mermaid': - specifier: ^3.4.0 - version: 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@mdx-js/react': - specifier: ^3.0.1 - version: 3.0.1(@types/react@18.2.29)(react@18.2.0) - '@scalar/docusaurus': - specifier: ^0.7.26 - version: 0.7.26(@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2))(react@18.2.0) - clsx: - specifier: ^1.2.1 - version: 1.2.1 - prism-react-renderer: - specifier: ^2.3.1 - version: 2.3.1(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-player: - specifier: ^2.12.0 - version: 2.12.0(react@18.2.0) - devDependencies: - '@docusaurus/module-type-aliases': - specifier: ^3.0.0 - version: 3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/tsconfig': - specifier: 3.0.0 - version: 3.0.0 - '@types/react': - specifier: ^18.2.29 - version: 18.2.29 - typescript: - specifier: ~5.2.2 - version: 5.2.2 - -packages: - - '@algolia/autocomplete-core@1.9.3': - resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} - - '@algolia/autocomplete-plugin-algolia-insights@1.9.3': - resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} - peerDependencies: - search-insights: '>= 1 < 3' - - '@algolia/autocomplete-preset-algolia@1.9.3': - resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/autocomplete-shared@1.9.3': - resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/cache-browser-local-storage@4.23.3': - resolution: {integrity: sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==} - - '@algolia/cache-common@4.23.3': - resolution: {integrity: sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==} - - '@algolia/cache-in-memory@4.23.3': - resolution: {integrity: sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==} - - '@algolia/client-account@4.23.3': - resolution: {integrity: sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==} - - '@algolia/client-analytics@4.23.3': - resolution: {integrity: sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==} - - '@algolia/client-common@4.23.3': - resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - - '@algolia/client-personalization@4.23.3': - resolution: {integrity: sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==} - - '@algolia/client-search@4.23.3': - resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - - '@algolia/events@4.0.1': - resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - - '@algolia/logger-common@4.23.3': - resolution: {integrity: sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==} - - '@algolia/logger-console@4.23.3': - resolution: {integrity: sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==} - - '@algolia/recommend@4.23.3': - resolution: {integrity: sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==} - - '@algolia/requester-browser-xhr@4.23.3': - resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - - '@algolia/requester-common@4.23.3': - resolution: {integrity: sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==} - - '@algolia/requester-node-http@4.23.3': - resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - - '@algolia/transporter@4.23.3': - resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.24.7': - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.24.7': - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.2': - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.24.7': - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.24.7': - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.24.7': - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.24.7': - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.24.7': - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.24.7': - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.24.7': - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.24.7': - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.24.7': - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.24.7': - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.24.7': - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.24.7': - resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.24.7': - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.24.7': - resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.24.7': - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.24.7': - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.24.7': - resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.24.7': - resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.24.7': - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.24.7': - resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.24.7': - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-constant-elements@7.21.3': - resolution: {integrity: sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-display-name@7.24.7': - resolution: {integrity: sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.24.7': - resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.24.7': - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.24.7': - resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-runtime@7.24.7': - resolution: {integrity: sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.24.7': - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.24.7': - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.24.7': - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.24.7': - resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.24.7': - resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.24.7': - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7': - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.24.7': - resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/preset-react@7.24.7': - resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.24.7': - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - - '@babel/runtime-corejs3@7.24.7': - resolution: {integrity: sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA==} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - - '@braintree/sanitize-url@6.0.2': - resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} - - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - - '@docsearch/css@3.6.0': - resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} - - '@docsearch/react@3.6.0': - resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} - 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 - - '@docusaurus/core@3.4.0': - resolution: {integrity: sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==} - engines: {node: '>=18.0'} - hasBin: true - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/cssnano-preset@3.4.0': - resolution: {integrity: sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==} - engines: {node: '>=18.0'} - - '@docusaurus/logger@3.4.0': - resolution: {integrity: sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==} - engines: {node: '>=18.0'} - - '@docusaurus/mdx-loader@3.4.0': - resolution: {integrity: sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/module-type-aliases@3.0.0': - resolution: {integrity: sha512-CfC6CgN4u/ce+2+L1JdsHNyBd8yYjl4De2B2CBj2a9F7WuJ5RjV1ciuU7KDg8uyju+NRVllRgvJvxVUjCdkPiw==} - peerDependencies: - react: '*' - react-dom: '*' - - '@docusaurus/module-type-aliases@3.4.0': - resolution: {integrity: sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==} - peerDependencies: - react: '*' - react-dom: '*' - - '@docusaurus/plugin-content-blog@3.4.0': - resolution: {integrity: sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-content-docs@3.4.0': - resolution: {integrity: sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-content-pages@3.4.0': - resolution: {integrity: sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-debug@3.4.0': - resolution: {integrity: sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-google-analytics@3.4.0': - resolution: {integrity: sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-google-gtag@3.4.0': - resolution: {integrity: sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-google-tag-manager@3.4.0': - resolution: {integrity: sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-sitemap@3.4.0': - resolution: {integrity: sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/preset-classic@3.4.0': - resolution: {integrity: sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/react-loadable@5.5.2': - resolution: {integrity: sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==} - peerDependencies: - react: '*' - - '@docusaurus/react-loadable@6.0.0': - resolution: {integrity: sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==} - peerDependencies: - react: '*' - - '@docusaurus/theme-classic@3.4.0': - resolution: {integrity: sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-common@3.4.0': - resolution: {integrity: sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-mermaid@3.4.0': - resolution: {integrity: sha512-3w5QW0HEZ2O6x2w6lU3ZvOe1gNXP2HIoKDMJBil1VmLBc9PmpAG17VmfhI/p3L2etNmOiVs5GgniUqvn8AFEGQ==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-search-algolia@3.4.0': - resolution: {integrity: sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-translations@3.4.0': - resolution: {integrity: sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==} - engines: {node: '>=18.0'} - - '@docusaurus/tsconfig@3.0.0': - resolution: {integrity: sha512-yR9sng4izFudS+v1xV5yboNfc1hATMDpYp9iYfWggbBDwKSm0J1IdIgkygRnqC/AWs1ARUQUpG0gFotPCE/4Ew==} - - '@docusaurus/types@3.0.0': - resolution: {integrity: sha512-Qb+l/hmCOVemReuzvvcFdk84bUmUFyD0Zi81y651ie3VwMrXqC7C0E7yZLKMOsLj/vkqsxHbtkAuYMI89YzNzg==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/types@3.4.0': - resolution: {integrity: sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/utils-common@3.4.0': - resolution: {integrity: sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==} - engines: {node: '>=18.0'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - - '@docusaurus/utils-validation@3.4.0': - resolution: {integrity: sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==} - engines: {node: '>=18.0'} - - '@docusaurus/utils@3.4.0': - resolution: {integrity: sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==} - engines: {node: '>=18.0'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - - '@jest/schemas@29.4.3': - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.5.0': - resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.3': - resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@leichtgewicht/ip-codec@2.0.4': - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} - - '@mdx-js/mdx@3.0.1': - resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} - - '@mdx-js/react@3.0.1': - resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.2.2': - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} - engines: {node: '>=12'} - - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - - '@scalar/docusaurus@0.7.26': - resolution: {integrity: sha512-5D/n9N17xzhRSqThR93WrjjOvRmVf+XHGE3MbAvtmpvRmvUhGSgfMucPm4tuuu9v3Y1j00XqDPlbWMIWbnjiAQ==} - engines: {node: '>=20'} - peerDependencies: - '@docusaurus/utils': ^3.7.0 - react: ^18.0.0 || ^19.0.0 - - '@scalar/helpers@0.2.4': - resolution: {integrity: sha512-G7oGybO2QXM+MIxa4OZLXaYsS9mxKygFgOcY4UOXO6xpVoY5+8rahdak9cPk7HNj8RZSt4m/BveoT8g5BtnXxg==} - engines: {node: '>=20'} - - '@scalar/types@0.5.4': - resolution: {integrity: sha512-5FNQH/zx3tnERzxfpErscPHfRxLCuhncmhFYiaSz196Xi2iG1YI08BtxTV2slfT6of52epJ/MrKerarplKf9eg==} - engines: {node: '>=20'} - - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - - '@sinclair/typebox@0.25.24': - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - - '@slorber/remark-comment@1.0.0': - resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0': - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0': - resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0': - resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-svg-component@8.0.0': - resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-preset@8.1.0': - resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/core@8.1.0': - resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} - engines: {node: '>=14'} - - '@svgr/hast-util-to-babel-ast@8.0.0': - resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} - engines: {node: '>=14'} - - '@svgr/plugin-jsx@8.1.0': - resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/plugin-svgo@8.1.0': - resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/webpack@8.1.0': - resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} - engines: {node: '>=14'} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - - '@types/acorn@4.0.6': - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - - '@types/body-parser@1.19.2': - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - - '@types/bonjour@3.5.10': - resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} - - '@types/connect-history-api-fallback@1.3.5': - resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} - - '@types/connect@3.4.35': - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - - '@types/d3-scale-chromatic@3.0.3': - resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} - - '@types/d3-scale@4.0.8': - resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} - - '@types/d3-time@3.0.3': - resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/eslint-scope@3.7.4': - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} - - '@types/eslint@8.37.0': - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - '@types/express-serve-static-core@4.17.33': - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} - - '@types/express@4.17.17': - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} - - '@types/gtag.js@0.0.12': - resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/history@4.7.11': - resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - - '@types/html-minifier-terser@6.1.0': - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - - '@types/http-proxy@1.17.10': - resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} - - '@types/istanbul-lib-coverage@2.0.4': - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - - '@types/istanbul-lib-report@3.0.0': - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} - - '@types/istanbul-reports@3.0.1': - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} - - '@types/json-schema@7.0.11': - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - - '@types/mdast@3.0.11': - resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - - '@types/mime@3.0.1': - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - - '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - - '@types/node@18.15.11': - resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - - '@types/parse-json@4.0.0': - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - - '@types/prismjs@1.26.4': - resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} - - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - - '@types/qs@6.9.7': - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - - '@types/range-parser@1.2.4': - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - - '@types/react-router-config@5.0.7': - resolution: {integrity: sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==} - - '@types/react-router-dom@5.3.3': - resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} - - '@types/react-router@5.1.20': - resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - - '@types/react@18.2.29': - resolution: {integrity: sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/sax@1.2.4': - resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} - - '@types/scheduler@0.16.3': - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - - '@types/serve-index@1.9.1': - resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} - - '@types/serve-static@1.15.1': - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} - - '@types/sockjs@0.3.33': - resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} - - '@types/unist@2.0.6': - resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - - '@types/ws@8.5.10': - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - - '@types/yargs-parser@21.0.0': - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - - '@types/yargs@17.0.24': - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@webassemblyjs/ast@1.12.1': - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} - - '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - - '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - - '@webassemblyjs/helper-buffer@1.12.1': - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - - '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - - '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - - '@webassemblyjs/helper-wasm-section@1.12.1': - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} - - '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - - '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - - '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - - '@webassemblyjs/wasm-edit@1.12.1': - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} - - '@webassemblyjs/wasm-gen@1.12.1': - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} - - '@webassemblyjs/wasm-opt@1.12.1': - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} - - '@webassemblyjs/wasm-parser@1.12.1': - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} - - '@webassemblyjs/wast-printer@1.12.1': - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - - acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - - address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv-keywords@5.1.0: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - - algoliasearch-helper@3.21.0: - resolution: {integrity: sha512-hjVOrL15I3Y3K8xG0icwG1/tWE+MocqBrhW6uVBWpU+/kVEMK0BnM2xdssj6mZM61eJ4iRxHR0djEI3ENOpR8w==} - peerDependencies: - algoliasearch: '>= 3.1 < 6' - - algoliasearch@4.23.3: - resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} - - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - - ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} - hasBin: true - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - autoprefixer@10.4.14: - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - babel-loader@9.1.3: - resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' - - babel-plugin-dynamic-import-node@2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - - babel-plugin-polyfill-corejs2@0.4.11: - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.2: - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - - big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - boxen@6.2.1: - resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - - caniuse-lite@1.0.30001628: - resolution: {integrity: sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - 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==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} - engines: {node: '>= 6'} - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - - chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - - ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - - clean-css@5.3.2: - resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} - engines: {node: '>= 10.0'} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - - cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} - - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - - clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - combine-promises@1.1.0: - resolution: {integrity: sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==} - engines: {node: '>=10'} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - - configstore@6.0.0: - resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} - engines: {node: '>=12'} - - connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - - consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} - - content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - - copy-text-to-clipboard@3.2.0: - resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} - engines: {node: '>=12'} - - copy-webpack-plugin@11.0.0: - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - - core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} - - core-js-pure@3.37.1: - resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} - - core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} - - cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 - - css-loader@6.11.0: - resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - css-minimizer-webpack-plugin@5.0.1: - resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@parcel/css': '*' - '@swc/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - lightningcss: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - '@swc/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - lightningcss: - optional: true - - css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cssnano-preset-advanced@6.1.2: - resolution: {integrity: sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano-preset-default@6.1.2: - resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano-utils@4.0.2: - resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano@6.1.2: - resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - - cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape@3.29.2: - resolution: {integrity: sha512-2G1ycU28Nh7OHT9rkXRLpCDP30MKH1dXJORZuBhtEhEW7pKwgPi77ImqlCWinouyE1PNepIOGZBOrE84DG7LyQ==} - engines: {node: '>=0.10'} - - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - - d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - - d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} - - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-geo@3.1.0: - resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - - d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-transition@3.0.1: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - - d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - - d3@7.8.5: - resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} - engines: {node: '>=12'} - - dagre-d3-es@7.0.10: - resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} - - dayjs@1.11.9: - resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} - - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - - del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - - delaunator@5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} - - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - - detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - - dns-packet@5.6.0: - resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} - engines: {node: '>=6'} - - dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - dompurify@3.1.5: - resolution: {integrity: sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA==} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - domutils@3.0.1: - resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - electron-to-chromium@1.4.790: - resolution: {integrity: sha512-eVGeQxpaBYbomDBa/Mehrs28MdvCXfJmEFzaMFsv8jH/MJDLIylJN81eTJ5kvx7B7p18OiPK0BkC06lydEy63A==} - - elkjs@0.9.3: - resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - emojilib@2.4.0: - resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - - emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - - emoticon@4.0.1: - resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-module-lexer@1.2.1: - resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-goat@4.0.0: - resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} - engines: {node: '>=12'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} - - estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - - estree-util-value-to-estree@3.1.1: - resolution: {integrity: sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==} - - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - eta@2.2.0: - resolution: {integrity: sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==} - engines: {node: '>=6.0.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - eval@0.1.8: - resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} - engines: {node: '>= 0.8'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - - feed@4.2.2: - resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} - engines: {node: '>=0.4.0'} - - file-loader@6.2.0: - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - - filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - - find-cache-dir@4.0.0: - resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} - engines: {node: '>=14.16'} - - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - fork-ts-checker-webpack-plugin@6.5.3: - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-monkey@1.0.3: - resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} - - get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - - global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - - global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globby@13.1.4: - resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - got@12.6.1: - resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} - engines: {node: '>=14.16'} - - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - - handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-yarn@3.0.0: - resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - - hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.0.3: - resolution: {integrity: sha512-ICWvVOF2fq4+7CMmtCPD5CM4QKjPbHpPotE6+8tDooV0ZuyJVUzHsrNX+O5NaRbieTf0F7FfeBOMAwi6Td0+yQ==} - - hast-util-to-estree@3.1.0: - resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - - hast-util-to-jsx-runtime@2.3.0: - resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} - - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - history@4.10.1: - resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - - html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - - html-minifier-terser@7.2.0: - resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true - - html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - html-webpack-plugin@5.6.0: - resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - - htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - - http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - - http-proxy-middleware@2.0.6: - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - image-size@1.0.2: - resolution: {integrity: sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==} - engines: {node: '>=14.0.0'} - hasBin: true - - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - infima@0.2.0-alpha.43: - resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==} - engines: {node: '>=12'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - - inline-style-parser@0.2.3: - resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipaddr.js@2.0.1: - resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} - engines: {node: '>= 10'} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - - is-core-module@2.12.0: - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - - is-npm@6.0.0: - resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - - is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - - is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - - is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - is-yarn-global@0.4.1: - resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} - engines: {node: '>=12'} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - jest-util@29.5.0: - resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jest-worker@29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jiti@1.21.3: - resolution: {integrity: sha512-uy2bNX5zQ+tESe+TiC7ilGRz8AtRGmnJH55NC5S0nSUjvvvM2hJHmefHErugGXN4pNv4Qx7vLsnNw9qJ9mtIsw==} - hasBin: true - - joi@17.13.1: - resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - katex@0.16.10: - resolution: {integrity: sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - khroma@2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - latest-version@7.0.0: - resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} - engines: {node: '>=14.16'} - - launch-editor@2.6.0: - resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} - - layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - load-script@1.0.0: - resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} - - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - - loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - - loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} - - markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - - mdast-util-directive@3.0.0: - resolution: {integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==} - - mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} - - mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} - - mdast-util-from-markdown@2.0.1: - resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} - - mdast-util-frontmatter@2.0.1: - resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} - - mdast-util-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} - - mdast-util-gfm-footnote@2.0.0: - resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - - mdast-util-gfm@3.0.0: - resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} - - mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} - - mdast-util-mdx-jsx@3.1.2: - resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} - - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.1.0: - resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} - - mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} - - mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - memfs@3.5.0: - resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} - engines: {node: '>= 4.0.0'} - - memoize-one@5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - mermaid@10.9.1: - resolution: {integrity: sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - - micromark-core-commonmark@2.0.1: - resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} - - micromark-extension-directive@3.0.0: - resolution: {integrity: sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==} - - micromark-extension-frontmatter@2.0.0: - resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} - - micromark-extension-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} - - micromark-extension-gfm-footnote@2.0.0: - resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} - - micromark-extension-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} - - micromark-extension-gfm-table@2.0.0: - resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - - micromark-extension-gfm-task-list-item@2.0.1: - resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - - micromark-extension-mdx-expression@3.0.0: - resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} - - micromark-extension-mdx-jsx@3.0.0: - resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} - - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} - - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - - micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} - - micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} - - micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} - - micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} - - micromark-factory-mdx-expression@2.0.1: - resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} - - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - - micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} - - micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} - - micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} - - micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} - - micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} - - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - - micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} - - micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} - - micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} - - micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} - - micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} - - micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} - - micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} - - micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} - - micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} - - micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} - - micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} - - micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - - micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} - - micromark-util-events-to-acorn@2.0.2: - resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} - - micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - - micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - - micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} - - micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} - - micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} - - micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} - - micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - - micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} - - micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - - micromark-util-subtokenize@2.0.1: - resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} - - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - - micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - - micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - - micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - - micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - mime-db@1.33.0: - resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} - engines: {node: '>= 0.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.18: - resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - mini-css-extract-plugin@2.9.0: - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} - engines: {node: ^18 || >=20} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-emoji@2.1.3: - resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} - engines: {node: '>=18'} - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - non-layered-tidy-tree-layout@2.0.2: - resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} - engines: {node: '>=14.16'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - nprogress@0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-json@8.1.1: - resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} - engines: {node: '>=14.16'} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - - parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} - - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - - path-to-regexp@1.8.0: - resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} - - path-to-regexp@2.2.1: - resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} - - pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - - postcss-calc@9.0.1: - resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.2.2 - - postcss-colormin@6.1.0: - resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-convert-values@6.1.0: - resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-comments@6.0.2: - resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-duplicates@6.0.3: - resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-empty@6.0.3: - resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-overridden@6.0.2: - resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-unused@6.0.5: - resolution: {integrity: sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-loader@7.3.4: - resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} - engines: {node: '>= 14.15.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - - postcss-merge-idents@6.0.3: - resolution: {integrity: sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-merge-longhand@6.0.5: - resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-merge-rules@6.1.1: - resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-font-values@6.1.0: - resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-gradients@6.0.3: - resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-params@6.1.0: - resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-selectors@6.0.4: - resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.0.5: - resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.0: - resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-values@4.0.0: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-normalize-charset@6.0.2: - resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-display-values@6.0.2: - resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-positions@6.0.2: - resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-repeat-style@6.0.2: - resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-string@6.0.2: - resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-timing-functions@6.0.2: - resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-unicode@6.1.0: - resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-url@6.0.2: - resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-whitespace@6.0.2: - resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-ordered-values@6.0.2: - resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-idents@6.0.3: - resolution: {integrity: sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-initial@6.1.0: - resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-transforms@6.0.2: - resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-selector-parser@6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} - engines: {node: '>=4'} - - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} - engines: {node: '>=4'} - - postcss-sort-media-queries@5.2.0: - resolution: {integrity: sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.4.23 - - postcss-svgo@6.0.3: - resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} - engines: {node: ^14 || ^16 || >= 18} - peerDependencies: - postcss: ^8.4.31 - - postcss-unique-selectors@6.0.4: - resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss-zindex@6.0.2: - resolution: {integrity: sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - - pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - - pretty-time@1.1.0: - resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} - engines: {node: '>=4'} - - prism-react-renderer@2.3.1: - resolution: {integrity: sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==} - peerDependencies: - react: '>=16.0.0' - - prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - - pupa@3.1.0: - resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} - engines: {node: '>=12.20'} - - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - range-parser@1.2.0: - resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} - engines: {node: '>= 0.6'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-dev-utils@12.0.1: - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - - react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - - react-fast-compare@3.2.1: - resolution: {integrity: sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==} - - react-helmet-async@1.3.0: - resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-json-view-lite@1.4.0: - resolution: {integrity: sha512-wh6F6uJyYAmQ4fK0e8dSQMEWuvTs2Wr3el3sLD9bambX1+pSWUVXIz1RFaoy3TI1mZ0FqdpKq9YgbgTTgyrmXA==} - engines: {node: '>=14'} - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - - react-loadable-ssr-addon-v5-slorber@1.0.1: - resolution: {integrity: sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==} - engines: {node: '>=10.13.0'} - peerDependencies: - react-loadable: '*' - webpack: '>=4.41.1 || 5.x' - - react-player@2.12.0: - resolution: {integrity: sha512-rymLRz/2GJJD+Wc01S7S+i9pGMFYnNmQibR2gVE3KmHJCBNN8BhPAlOPTGZtn1uKpJ6p4RPLlzPQ1OLreXd8gw==} - peerDependencies: - react: '>=16.6.0' - - react-router-config@5.1.1: - resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} - peerDependencies: - react: '>=15' - react-router: '>=5' - - react-router-dom@5.3.4: - resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} - peerDependencies: - react: '>=15' - - react-router@5.3.4: - resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} - peerDependencies: - react: '>=15' - - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - reading-time@1.5.0: - resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} - - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - - recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - - regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - - registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} - engines: {node: '>=14'} - - registry-url@6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} - engines: {node: '>=12'} - - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - - relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - - remark-directive@3.0.0: - resolution: {integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==} - - remark-emoji@4.0.1: - resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - remark-frontmatter@5.0.0: - resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} - - remark-gfm@4.0.0: - resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} - - remark-mdx@3.0.1: - resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - require-like@0.1.2: - resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pathname@3.0.0: - resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} - - resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - - rtl-detect@1.0.4: - resolution: {integrity: sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==} - - rtlcss@4.1.1: - resolution: {integrity: sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==} - engines: {node: '>=12.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - - schema-utils@4.0.1: - resolution: {integrity: sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==} - engines: {node: '>= 12.13.0'} - - search-insights@2.14.0: - resolution: {integrity: sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==} - - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - - select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - - selfsigned@2.1.1: - resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} - engines: {node: '>=10'} - - semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - - serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - - serve-handler@6.1.5: - resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} - - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - - shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - sitemap@7.1.1: - resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} - engines: {node: '>=12.0.0', npm: '>=5.6.0'} - hasBin: true - - skin-tone@2.0.0: - resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} - engines: {node: '>=8'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - - sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - - sort-css-media-queries@2.2.0: - resolution: {integrity: sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==} - engines: {node: '>= 6.3.0'} - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - - spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - srcset@4.0.0: - resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} - engines: {node: '>=12'} - - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - std-env@3.3.2: - resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} - engines: {node: '>=12'} - - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - - style-to-object@1.0.6: - resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} - - stylehacks@6.1.1: - resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - - stylis@4.3.0: - resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - - svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} - engines: {node: '>=14.0.0'} - hasBin: true - - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} - - tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} - engines: {node: '>=10'} - hasBin: true - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - - tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-fest@5.0.0: - resolution: {integrity: sha512-GeJop7+u7BYlQ6yQCAY1nBQiRSHR+6OdCEtd8Bwp9a3NK3+fWAVjOaPKJDteB9f6cIJ0wt4IfnScjLG450EpXA==} - engines: {node: '>=20'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - - typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - - unicode-emoji-modifier-base@1.0.0: - resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - - unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - - unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} - - 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==} - - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-notifier@6.0.2: - resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} - engines: {node: '>=14.16'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-loader@4.1.1: - resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - file-loader: '*' - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - file-loader: - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - - utility-types@3.10.0: - resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} - engines: {node: '>= 4'} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - - uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true - - uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true - - value-equal@1.0.1: - resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} - - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - - watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} - - wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - web-worker@1.2.0: - resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} - - webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} - engines: {node: '>= 10.13.0'} - hasBin: true - - webpack-dev-middleware@5.3.4: - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - - webpack-dev-server@4.15.2: - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - - webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack@5.91.0: - resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - webpackbar@5.0.2: - resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==} - engines: {node: '>=12'} - peerDependencies: - webpack: 3 || 4 || 5 - - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - - wildcard@2.0.0: - resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xdg-basedir@5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} - engines: {node: '>=12'} - - xml-js@1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} - hasBin: true - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - - zod@4.2.1: - resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0)': - dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - search-insights: 2.14.0 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': - dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 - - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': - dependencies: - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 - - '@algolia/cache-browser-local-storage@4.23.3': - dependencies: - '@algolia/cache-common': 4.23.3 - - '@algolia/cache-common@4.23.3': {} - - '@algolia/cache-in-memory@4.23.3': - dependencies: - '@algolia/cache-common': 4.23.3 - - '@algolia/client-account@4.23.3': - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/transporter': 4.23.3 - - '@algolia/client-analytics@4.23.3': - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - - '@algolia/client-common@4.23.3': - dependencies: - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - - '@algolia/client-personalization@4.23.3': - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - - '@algolia/client-search@4.23.3': - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - - '@algolia/events@4.0.1': {} - - '@algolia/logger-common@4.23.3': {} - - '@algolia/logger-console@4.23.3': - dependencies: - '@algolia/logger-common': 4.23.3 - - '@algolia/recommend@4.23.3': - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - - '@algolia/requester-browser-xhr@4.23.3': - dependencies: - '@algolia/requester-common': 4.23.3 - - '@algolia/requester-common@4.23.3': {} - - '@algolia/requester-node-http@4.23.3': - dependencies: - '@algolia/requester-common': 4.23.3 - - '@algolia/transporter@4.23.3': - dependencies: - '@algolia/cache-common': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.24.7': {} - - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-annotate-as-pure@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-compilation-targets@7.24.7': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-member-expression-to-functions@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.7': {} - - '@babel/helper-wrap-function@7.24.7': - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-split-export-declaration': 7.24.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/template': 7.24.7 - - '@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-react-constant-elements@7.21.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - regenerator-transform: 0.15.2 - - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/preset-env@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 - esutils: 2.0.3 - - '@babel/preset-react@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/regjsgen@0.8.0': {} - - '@babel/runtime-corejs3@7.24.7': - dependencies: - core-js-pure: 3.37.1 - regenerator-runtime: 0.14.1 - - '@babel/runtime@7.24.7': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.24.7': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@braintree/sanitize-url@6.0.2': {} - - '@colors/colors@1.5.0': - optional: true - - '@discoveryjs/json-ext@0.5.7': {} - - '@docsearch/css@3.6.0': {} - - '@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.14.0)': - dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@docsearch/css': 3.6.0 - algoliasearch: 4.23.3 - optionalDependencies: - '@types/react': 18.2.29 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - search-insights: 2.14.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@babel/core': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.24.7 - '@babel/runtime-corejs3': 7.24.7 - '@babel/traverse': 7.24.7 - '@docusaurus/cssnano-preset': 3.4.0 - '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - autoprefixer: 10.4.14(postcss@8.4.38) - babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.91.0) - babel-plugin-dynamic-import-node: 2.3.3 - boxen: 6.2.1 - chalk: 4.1.2 - chokidar: 3.5.3 - clean-css: 5.3.2 - cli-table3: 0.6.3 - combine-promises: 1.1.0 - commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.91.0) - core-js: 3.37.1 - css-loader: 6.11.0(webpack@5.91.0) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.2)(webpack@5.91.0) - cssnano: 6.1.2(postcss@8.4.38) - del: 6.1.1 - detect-port: 1.5.1 - escape-html: 1.0.3 - eta: 2.2.0 - eval: 0.1.8 - file-loader: 6.2.0(webpack@5.91.0) - fs-extra: 11.2.0 - html-minifier-terser: 7.2.0 - html-tags: 3.3.1 - html-webpack-plugin: 5.6.0(webpack@5.91.0) - leven: 3.1.0 - lodash: 4.17.21 - mini-css-extract-plugin: 2.9.0(webpack@5.91.0) - p-map: 4.0.0 - postcss: 8.4.38 - postcss-loader: 7.3.4(postcss@8.4.38)(typescript@5.2.2)(webpack@5.91.0) - prompts: 2.4.2 - react: 18.2.0 - react-dev-utils: 12.0.1(typescript@5.2.2)(webpack@5.91.0) - react-dom: 18.2.0(react@18.2.0) - react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.2.0)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.91.0) - react-router: 5.3.4(react@18.2.0) - react-router-config: 5.1.1(react-router@5.3.4(react@18.2.0))(react@18.2.0) - react-router-dom: 5.3.4(react@18.2.0) - rtl-detect: 1.0.4 - semver: 7.6.2 - serve-handler: 6.1.5 - shelljs: 0.8.5 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) - tslib: 2.6.3 - update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0) - webpack: 5.91.0 - webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.91.0) - webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.91.0) - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/cssnano-preset@3.4.0': - dependencies: - cssnano-preset-advanced: 6.1.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-sort-media-queries: 5.2.0(postcss@8.4.38) - tslib: 2.6.3 - - '@docusaurus/logger@3.4.0': - dependencies: - chalk: 4.1.2 - tslib: 2.6.3 - - '@docusaurus/mdx-loader@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@mdx-js/mdx': 3.0.1 - '@slorber/remark-comment': 1.0.0 - escape-html: 1.0.3 - estree-util-value-to-estree: 3.1.1 - file-loader: 6.2.0(webpack@5.91.0) - fs-extra: 11.2.0 - image-size: 1.0.2 - mdast-util-mdx: 3.0.0 - mdast-util-to-string: 4.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rehype-raw: 7.0.0 - remark-directive: 3.0.0 - remark-emoji: 4.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.0 - stringify-object: 3.3.0 - tslib: 2.6.3 - unified: 11.0.4 - unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0) - vfile: 6.0.1 - webpack: 5.91.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - - '@docusaurus/module-type-aliases@3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@docusaurus/react-loadable': 5.5.2(react@18.2.0) - '@docusaurus/types': 3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/history': 4.7.11 - '@types/react': 18.2.29 - '@types/react-router-config': 5.0.7 - '@types/react-router-dom': 5.3.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-loadable: '@docusaurus/react-loadable@5.5.2(react@18.2.0)' - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - - '@docusaurus/module-type-aliases@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/history': 4.7.11 - '@types/react': 18.2.29 - '@types/react-router-config': 5.0.7 - '@types/react-router-dom': 5.3.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.2.0)' - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - - '@docusaurus/plugin-content-blog@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - cheerio: 1.0.0-rc.12 - feed: 4.2.2 - fs-extra: 11.2.0 - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - reading-time: 1.5.0 - srcset: 4.0.0 - tslib: 2.6.3 - unist-util-visit: 5.0.0 - utility-types: 3.10.0 - webpack: 5.91.0 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-content-docs@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@types/react-router-config': 5.0.7 - combine-promises: 1.1.0 - fs-extra: 11.2.0 - js-yaml: 4.1.0 - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - utility-types: 3.10.0 - webpack: 5.91.0 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-content-pages@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - fs-extra: 11.2.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - webpack: 5.91.0 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-debug@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - fs-extra: 11.2.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-json-view-lite: 1.4.0(react@18.2.0) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-google-analytics@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-google-gtag@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@types/gtag.js': 0.0.12 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-google-tag-manager@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-sitemap@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/logger': 3.4.0 - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - fs-extra: 11.2.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - sitemap: 7.1.1 - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/preset-classic@3.4.0(@algolia/client-search@4.23.3)(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.14.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-blog': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-debug': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-google-analytics': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-google-gtag': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-google-tag-manager': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-sitemap': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-classic': 3.4.0(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-search-algolia': 3.4.0(@algolia/client-search@4.23.3)(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.14.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@algolia/client-search' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - search-insights - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/react-loadable@5.5.2(react@18.2.0)': - dependencies: - '@types/react': 18.2.29 - prop-types: 15.8.1 - react: 18.2.0 - - '@docusaurus/react-loadable@6.0.0(react@18.2.0)': - dependencies: - '@types/react': 18.2.29 - react: 18.2.0 - - '@docusaurus/theme-classic@3.4.0(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/plugin-content-blog': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-translations': 3.4.0 - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@mdx-js/react': 3.0.1(@types/react@18.2.29)(react@18.2.0) - clsx: 2.1.1 - copy-text-to-clipboard: 3.2.0 - infima: 0.2.0-alpha.43 - lodash: 4.17.21 - nprogress: 0.2.0 - postcss: 8.4.38 - prism-react-renderer: 2.3.1(react@18.2.0) - prismjs: 1.29.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router-dom: 5.3.4(react@18.2.0) - rtlcss: 4.1.1 - tslib: 2.6.3 - utility-types: 3.10.0 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/theme-common@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/plugin-content-blog': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@types/history': 4.7.11 - '@types/react': 18.2.29 - '@types/react-router-config': 5.0.7 - clsx: 2.1.1 - parse-numeric-range: 1.3.0 - prism-react-renderer: 2.3.1(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - utility-types: 3.10.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/theme-mermaid@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - mermaid: 10.9.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/theme-search-algolia@3.4.0(@algolia/client-search@4.23.3)(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.14.0)(typescript@5.2.2)': - dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.2.29)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.14.0) - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/logger': 3.4.0 - '@docusaurus/plugin-content-docs': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) - '@docusaurus/theme-translations': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - algoliasearch: 4.23.3 - algoliasearch-helper: 3.21.0(algoliasearch@4.23.3) - clsx: 2.1.1 - eta: 2.2.0 - fs-extra: 11.2.0 - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.3 - utility-types: 3.10.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - search-insights - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/theme-translations@3.4.0': - dependencies: - fs-extra: 11.2.0 - tslib: 2.6.3 - - '@docusaurus/tsconfig@3.0.0': {} - - '@docusaurus/types@3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.2.29 - commander: 5.1.0 - joi: 17.13.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - utility-types: 3.10.0 - webpack: 5.91.0 - webpack-merge: 5.10.0 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - - '@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@mdx-js/mdx': 3.0.1 - '@types/history': 4.7.11 - '@types/react': 18.2.29 - commander: 5.1.0 - joi: 17.13.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - utility-types: 3.10.0 - webpack: 5.91.0 - webpack-merge: 5.10.0 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - - '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - tslib: 2.6.3 - optionalDependencies: - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - - '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - fs-extra: 11.2.0 - joi: 17.13.1 - js-yaml: 4.1.0 - lodash: 4.17.21 - tslib: 2.6.3 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - - '@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@svgr/webpack': 8.1.0(typescript@5.2.2) - escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.91.0) - fs-extra: 11.2.0 - github-slugger: 1.5.0 - globby: 11.1.0 - gray-matter: 4.0.3 - jiti: 1.21.3 - js-yaml: 4.1.0 - lodash: 4.17.21 - micromatch: 4.0.5 - prompts: 2.4.2 - resolve-pathname: 3.0.0 - shelljs: 0.8.5 - tslib: 2.6.3 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0) - utility-types: 3.10.0 - webpack: 5.91.0 - optionalDependencies: - '@docusaurus/types': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - - '@jest/schemas@29.4.3': - dependencies: - '@sinclair/typebox': 0.25.24 - - '@jest/types@29.5.0': - dependencies: - '@jest/schemas': 29.4.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 - '@types/yargs': 17.0.24 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.1': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.3': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@leichtgewicht/ip-codec@2.0.4': {} - - '@mdx-js/mdx@3.0.1': - dependencies: - '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 - estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 - estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 - hast-util-to-jsx-runtime: 2.3.0 - markdown-extensions: 2.0.0 - periscopic: 3.1.0 - remark-mdx: 3.0.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.0 - source-map: 0.7.4 - unified: 11.0.4 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - transitivePeerDependencies: - - supports-color - - '@mdx-js/react@3.0.1(@types/react@18.2.29)(react@18.2.0)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 18.2.29 - react: 18.2.0 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pnpm/config.env-replace@1.1.0': {} - - '@pnpm/network.ca-file@1.0.2': - dependencies: - graceful-fs: 4.2.10 - - '@pnpm/npm-conf@2.2.2': - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - - '@polka/url@1.0.0-next.25': {} - - '@scalar/docusaurus@0.7.26(@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2))(react@18.2.0)': - dependencies: - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.2.2) - '@scalar/types': 0.5.4 - react: 18.2.0 - - '@scalar/helpers@0.2.4': {} - - '@scalar/types@0.5.4': - dependencies: - '@scalar/helpers': 0.2.4 - nanoid: 5.1.5 - type-fest: 5.0.0 - zod: 4.2.1 - - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - - '@sinclair/typebox@0.25.24': {} - - '@sindresorhus/is@4.6.0': {} - - '@sindresorhus/is@5.6.0': {} - - '@slorber/remark-comment@1.0.0': - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@svgr/babel-preset@8.1.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.7) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.7) - - '@svgr/core@8.1.0(typescript@5.2.2)': - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.7) - camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.2.2) - snake-case: 3.0.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@svgr/hast-util-to-babel-ast@8.0.0': - dependencies: - '@babel/types': 7.24.7 - entities: 4.5.0 - - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))': - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.7) - '@svgr/core': 8.1.0(typescript@5.2.2) - '@svgr/hast-util-to-babel-ast': 8.0.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))(typescript@5.2.2)': - dependencies: - '@svgr/core': 8.1.0(typescript@5.2.2) - cosmiconfig: 8.3.6(typescript@5.2.2) - deepmerge: 4.3.1 - svgo: 3.3.2 - transitivePeerDependencies: - - typescript - - '@svgr/webpack@8.1.0(typescript@5.2.2)': - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-constant-elements': 7.21.3(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@svgr/core': 8.1.0(typescript@5.2.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2))(typescript@5.2.2) - transitivePeerDependencies: - - supports-color - - typescript - - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - - '@trysound/sax@0.2.0': {} - - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.5 - - '@types/body-parser@1.19.2': - dependencies: - '@types/connect': 3.4.35 - '@types/node': 18.15.11 - - '@types/bonjour@3.5.10': - dependencies: - '@types/node': 18.15.11 - - '@types/connect-history-api-fallback@1.3.5': - dependencies: - '@types/express-serve-static-core': 4.17.33 - '@types/node': 18.15.11 - - '@types/connect@3.4.35': - dependencies: - '@types/node': 18.15.11 - - '@types/d3-scale-chromatic@3.0.3': {} - - '@types/d3-scale@4.0.8': - dependencies: - '@types/d3-time': 3.0.3 - - '@types/d3-time@3.0.3': {} - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 0.7.34 - - '@types/eslint-scope@3.7.4': - dependencies: - '@types/eslint': 8.37.0 - '@types/estree': 1.0.5 - - '@types/eslint@8.37.0': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.11 - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.5 - - '@types/estree@1.0.5': {} - - '@types/express-serve-static-core@4.17.33': - dependencies: - '@types/node': 18.15.11 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - - '@types/express@4.17.17': - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.33 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 - - '@types/gtag.js@0.0.12': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.2 - - '@types/history@4.7.11': {} - - '@types/html-minifier-terser@6.1.0': {} - - '@types/http-cache-semantics@4.0.4': {} - - '@types/http-proxy@1.17.10': - dependencies: - '@types/node': 18.15.11 - - '@types/istanbul-lib-coverage@2.0.4': {} - - '@types/istanbul-lib-report@3.0.0': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - - '@types/istanbul-reports@3.0.1': - dependencies: - '@types/istanbul-lib-report': 3.0.0 - - '@types/json-schema@7.0.11': {} - - '@types/mdast@3.0.11': - dependencies: - '@types/unist': 3.0.2 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.2 - - '@types/mdx@2.0.13': {} - - '@types/mime@3.0.1': {} - - '@types/ms@0.7.34': {} - - '@types/node@17.0.45': {} - - '@types/node@18.15.11': {} - - '@types/parse-json@4.0.0': {} - - '@types/prismjs@1.26.4': {} - - '@types/prop-types@15.7.5': {} - - '@types/qs@6.9.7': {} - - '@types/range-parser@1.2.4': {} - - '@types/react-router-config@5.0.7': - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.2.29 - '@types/react-router': 5.1.20 - - '@types/react-router-dom@5.3.3': - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.2.29 - '@types/react-router': 5.1.20 - - '@types/react-router@5.1.20': - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.2.29 - - '@types/react@18.2.29': - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 - - '@types/retry@0.12.0': {} - - '@types/sax@1.2.4': - dependencies: - '@types/node': 18.15.11 - - '@types/scheduler@0.16.3': {} - - '@types/serve-index@1.9.1': - dependencies: - '@types/express': 4.17.17 - - '@types/serve-static@1.15.1': - dependencies: - '@types/mime': 3.0.1 - '@types/node': 18.15.11 - - '@types/sockjs@0.3.33': - dependencies: - '@types/node': 18.15.11 - - '@types/unist@2.0.6': {} - - '@types/unist@3.0.2': {} - - '@types/ws@8.5.10': - dependencies: - '@types/node': 18.15.11 - - '@types/yargs-parser@21.0.0': {} - - '@types/yargs@17.0.24': - dependencies: - '@types/yargs-parser': 21.0.0 - - '@ungap/structured-clone@1.2.0': {} - - '@webassemblyjs/ast@1.12.1': - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - - '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - - '@webassemblyjs/helper-api-error@1.11.6': {} - - '@webassemblyjs/helper-buffer@1.12.1': {} - - '@webassemblyjs/helper-numbers@1.11.6': - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - - '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - - '@webassemblyjs/helper-wasm-section@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 - - '@webassemblyjs/ieee754@1.11.6': - dependencies: - '@xtuc/ieee754': 1.2.0 - - '@webassemblyjs/leb128@1.11.6': - dependencies: - '@xtuc/long': 4.2.2 - - '@webassemblyjs/utf8@1.11.6': {} - - '@webassemblyjs/wasm-edit@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 - - '@webassemblyjs/wasm-gen@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - - '@webassemblyjs/wasm-opt@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - - '@webassemblyjs/wasm-parser@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - - '@webassemblyjs/wast-printer@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@xtuc/long': 4.2.2 - - '@xtuc/ieee754@1.2.0': {} - - '@xtuc/long@4.2.2': {} - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-import-assertions@1.9.0(acorn@8.8.2): - dependencies: - acorn: 8.8.2 - - acorn-jsx@5.3.2(acorn@8.8.2): - dependencies: - acorn: 8.8.2 - - acorn-walk@8.2.0: {} - - acorn@8.8.2: {} - - address@1.2.2: {} - - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - - ajv-formats@2.1.1(ajv@8.12.0): - optionalDependencies: - ajv: 8.12.0 - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv-keywords@5.1.0(ajv@8.12.0): - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - algoliasearch-helper@3.21.0(algoliasearch@4.23.3): - dependencies: - '@algolia/events': 4.0.1 - algoliasearch: 4.23.3 - - algoliasearch@4.23.3: - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-account': 4.23.3 - '@algolia/client-analytics': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-personalization': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/recommend': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - - ansi-align@3.0.1: - dependencies: - string-width: 4.2.3 - - ansi-html-community@0.0.8: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - array-flatten@1.1.1: {} - - array-flatten@2.1.2: {} - - array-union@2.1.0: {} - - astring@1.8.6: {} - - at-least-node@1.0.0: {} - - autoprefixer@10.4.14(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001628 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - autoprefixer@10.4.19(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001628 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0): - dependencies: - '@babel/core': 7.24.7 - find-cache-dir: 4.0.0 - schema-utils: 4.0.1 - webpack: 5.91.0 - - babel-plugin-dynamic-import-node@2.3.3: - dependencies: - object.assign: 4.1.4 - - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - batch@0.6.1: {} - - big.js@5.2.2: {} - - binary-extensions@2.2.0: {} - - body-parser@1.20.1: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - bonjour-service@1.1.1: - dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - - boolbase@1.0.0: {} - - boxen@6.2.1: - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - - boxen@7.1.1: - dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.3.0 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.23.0: - dependencies: - caniuse-lite: 1.0.30001628 - electron-to-chromium: 1.4.790 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) - - buffer-from@1.1.2: {} - - bytes@3.0.0: {} - - bytes@3.1.2: {} - - cacheable-lookup@7.0.0: {} - - cacheable-request@10.2.14: - dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 6.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.0.1 - responselike: 3.0.0 - - call-bind@1.0.2: - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.0 - - callsites@3.1.0: {} - - camel-case@4.1.2: - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.3 - - camelcase@6.3.0: {} - - camelcase@7.0.1: {} - - caniuse-api@3.0.0: - dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001628 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - - caniuse-lite@1.0.30001628: {} - - ccount@2.0.1: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.3.0: {} - - char-regex@1.0.2: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - character-entities@2.0.2: {} - - character-reference-invalid@2.0.1: {} - - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.0.1 - - cheerio@1.0.0-rc.12: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.0.1 - htmlparser2: 8.0.2 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - - chrome-trace-event@1.0.3: {} - - ci-info@3.8.0: {} - - clean-css@5.3.2: - dependencies: - source-map: 0.6.1 - - clean-stack@2.2.0: {} - - cli-boxes@3.0.0: {} - - cli-table3@0.6.3: - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - - clsx@1.2.1: {} - - clsx@2.1.1: {} - - collapse-white-space@2.1.0: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - colord@2.9.3: {} - - colorette@2.0.20: {} - - combine-promises@1.1.0: {} - - comma-separated-tokens@2.0.3: {} - - commander@10.0.1: {} - - commander@2.20.3: {} - - commander@5.1.0: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - common-path-prefix@3.0.0: {} - - compressible@2.0.18: - dependencies: - mime-db: 1.52.0 - - compression@1.7.4: - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - concat-map@0.0.1: {} - - config-chain@1.1.13: - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - - configstore@6.0.0: - dependencies: - dot-prop: 6.0.1 - graceful-fs: 4.2.11 - unique-string: 3.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 5.1.0 - - connect-history-api-fallback@2.0.0: {} - - consola@2.15.3: {} - - content-disposition@0.5.2: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-source-map@2.0.0: {} - - cookie-signature@1.0.6: {} - - cookie@0.5.0: {} - - copy-text-to-clipboard@3.2.0: {} - - copy-webpack-plugin@11.0.0(webpack@5.91.0): - dependencies: - fast-glob: 3.2.12 - glob-parent: 6.0.2 - globby: 13.1.4 - normalize-path: 3.0.0 - schema-utils: 4.0.1 - serialize-javascript: 6.0.1 - webpack: 5.91.0 - - core-js-compat@3.37.1: - dependencies: - browserslist: 4.23.0 - - core-js-pure@3.37.1: {} - - core-js@3.37.1: {} - - core-util-is@1.0.3: {} - - cose-base@1.0.3: - dependencies: - layout-base: 1.0.2 - - cosmiconfig@6.0.0: - dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - cosmiconfig@8.3.6(typescript@5.2.2): - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.2.2 - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - crypto-random-string@4.0.0: - dependencies: - type-fest: 1.4.0 - - css-declaration-sorter@7.2.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - css-loader@6.11.0(webpack@5.91.0): - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) - postcss-value-parser: 4.2.0 - semver: 7.6.2 - optionalDependencies: - webpack: 5.91.0 - - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.2)(webpack@5.91.0): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - cssnano: 6.1.2(postcss@8.4.38) - jest-worker: 29.5.0 - postcss: 8.4.38 - schema-utils: 4.0.1 - serialize-javascript: 6.0.1 - webpack: 5.91.0 - optionalDependencies: - clean-css: 5.3.2 - - 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-select@5.1.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.0.1 - nth-check: 2.1.1 - - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.0 - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 - - css-what@6.1.0: {} - - cssesc@3.0.0: {} - - cssnano-preset-advanced@6.1.2(postcss@8.4.38): - dependencies: - autoprefixer: 10.4.19(postcss@8.4.38) - browserslist: 4.23.0 - cssnano-preset-default: 6.1.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-discard-unused: 6.0.5(postcss@8.4.38) - postcss-merge-idents: 6.0.3(postcss@8.4.38) - postcss-reduce-idents: 6.0.3(postcss@8.4.38) - postcss-zindex: 6.0.2(postcss@8.4.38) - - cssnano-preset-default@6.1.2(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - css-declaration-sorter: 7.2.0(postcss@8.4.38) - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-calc: 9.0.1(postcss@8.4.38) - postcss-colormin: 6.1.0(postcss@8.4.38) - postcss-convert-values: 6.1.0(postcss@8.4.38) - postcss-discard-comments: 6.0.2(postcss@8.4.38) - postcss-discard-duplicates: 6.0.3(postcss@8.4.38) - postcss-discard-empty: 6.0.3(postcss@8.4.38) - postcss-discard-overridden: 6.0.2(postcss@8.4.38) - postcss-merge-longhand: 6.0.5(postcss@8.4.38) - postcss-merge-rules: 6.1.1(postcss@8.4.38) - postcss-minify-font-values: 6.1.0(postcss@8.4.38) - postcss-minify-gradients: 6.0.3(postcss@8.4.38) - postcss-minify-params: 6.1.0(postcss@8.4.38) - postcss-minify-selectors: 6.0.4(postcss@8.4.38) - postcss-normalize-charset: 6.0.2(postcss@8.4.38) - postcss-normalize-display-values: 6.0.2(postcss@8.4.38) - postcss-normalize-positions: 6.0.2(postcss@8.4.38) - postcss-normalize-repeat-style: 6.0.2(postcss@8.4.38) - postcss-normalize-string: 6.0.2(postcss@8.4.38) - postcss-normalize-timing-functions: 6.0.2(postcss@8.4.38) - postcss-normalize-unicode: 6.1.0(postcss@8.4.38) - postcss-normalize-url: 6.0.2(postcss@8.4.38) - postcss-normalize-whitespace: 6.0.2(postcss@8.4.38) - postcss-ordered-values: 6.0.2(postcss@8.4.38) - postcss-reduce-initial: 6.1.0(postcss@8.4.38) - postcss-reduce-transforms: 6.0.2(postcss@8.4.38) - postcss-svgo: 6.0.3(postcss@8.4.38) - postcss-unique-selectors: 6.0.4(postcss@8.4.38) - - cssnano-utils@4.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - cssnano@6.1.2(postcss@8.4.38): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.4.38) - lilconfig: 3.1.1 - postcss: 8.4.38 - - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - - csstype@3.1.2: {} - - cytoscape-cose-bilkent@4.1.0(cytoscape@3.29.2): - dependencies: - cose-base: 1.0.3 - cytoscape: 3.29.2 - - cytoscape@3.29.2: {} - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-axis@3.0.0: {} - - d3-brush@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3-chord@3.0.1: - dependencies: - d3-path: 3.1.0 - - d3-color@3.1.0: {} - - d3-contour@4.0.2: - dependencies: - d3-array: 3.2.4 - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.0.0 - - d3-dispatch@3.0.1: {} - - d3-drag@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - - d3-ease@3.0.1: {} - - d3-fetch@3.0.1: - dependencies: - d3-dsv: 3.0.1 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - d3-format@3.1.0: {} - - d3-geo@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@3.1.2: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@1.0.9: {} - - d3-path@3.1.0: {} - - d3-polygon@3.0.1: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.0.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-selection@3.0.0: {} - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - d3-transition@3.0.1(d3-selection@3.0.0): - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - d3-zoom@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3@7.8.5: - dependencies: - d3-array: 3.2.4 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.2 - d3-delaunay: 6.0.4 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.1.0 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.1.0 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.0.0 - d3-selection: 3.0.0 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - - dagre-d3-es@7.0.10: - dependencies: - d3: 7.8.5 - lodash-es: 4.17.21 - - dayjs@1.11.9: {} - - debounce@1.2.1: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - decode-named-character-reference@1.0.2: - dependencies: - character-entities: 2.0.2 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - deep-extend@0.6.0: {} - - deepmerge@4.3.1: {} - - default-gateway@6.0.3: - dependencies: - execa: 5.1.1 - - defer-to-connect@2.0.1: {} - - define-lazy-prop@2.0.0: {} - - define-properties@1.2.0: - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - - del@6.1.1: - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - - delaunator@5.0.0: - dependencies: - robust-predicates: 3.0.2 - - depd@1.1.2: {} - - depd@2.0.0: {} - - dequal@2.0.3: {} - - destroy@1.2.0: {} - - detect-node@2.1.0: {} - - detect-port-alt@1.1.6: - dependencies: - address: 1.2.2 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - - detect-port@1.5.1: - dependencies: - address: 1.2.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - diff@5.2.0: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dns-equal@1.0.0: {} - - dns-packet@5.6.0: - dependencies: - '@leichtgewicht/ip-codec': 2.0.4 - - dom-converter@0.2.0: - dependencies: - utila: 0.4.0 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - dompurify@3.1.5: {} - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - domutils@3.0.1: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - - dot-prop@6.0.1: - dependencies: - is-obj: 2.0.0 - - duplexer@0.1.2: {} - - eastasianwidth@0.2.0: {} - - ee-first@1.1.1: {} - - electron-to-chromium@1.4.790: {} - - elkjs@0.9.3: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - emojilib@2.4.0: {} - - emojis-list@3.0.0: {} - - emoticon@4.0.1: {} - - encodeurl@1.0.2: {} - - enhanced-resolve@5.17.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - entities@2.2.0: {} - - entities@4.5.0: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-module-lexer@1.2.1: {} - - escalade@3.1.2: {} - - escape-goat@4.0.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - escape-string-regexp@5.0.0: {} - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - esprima@4.0.1: {} - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - estree-util-attach-comments@3.0.0: - dependencies: - '@types/estree': 1.0.5 - - estree-util-build-jsx@3.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-walker: 3.0.3 - - estree-util-is-identifier-name@3.0.0: {} - - estree-util-to-js@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - astring: 1.8.6 - source-map: 0.7.4 - - estree-util-value-to-estree@3.1.1: - dependencies: - '@types/estree': 1.0.5 - is-plain-obj: 4.1.0 - - estree-util-visit@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.2 - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.5 - - esutils@2.0.3: {} - - eta@2.2.0: {} - - etag@1.8.1: {} - - eval@0.1.8: - dependencies: - '@types/node': 18.15.11 - require-like: 0.1.2 - - eventemitter3@4.0.7: {} - - events@3.3.0: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - express@4.18.2: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.2.12: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-url-parser@1.1.3: - dependencies: - punycode: 1.4.1 - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fault@2.0.1: - dependencies: - format: 0.2.2 - - faye-websocket@0.11.4: - dependencies: - websocket-driver: 0.7.4 - - feed@4.2.2: - dependencies: - xml-js: 1.6.11 - - file-loader@6.2.0(webpack@5.91.0): - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.91.0 - - filesize@8.0.7: {} - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.2.0: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - find-cache-dir@4.0.0: - dependencies: - common-path-prefix: 3.0.0 - pkg-dir: 7.0.0 - - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - find-up@6.3.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - - flat@5.0.2: {} - - follow-redirects@1.15.6: {} - - fork-ts-checker-webpack-plugin@6.5.3(typescript@5.2.2)(webpack@5.91.0): - dependencies: - '@babel/code-frame': 7.24.7 - '@types/json-schema': 7.0.11 - chalk: 4.1.2 - chokidar: 3.5.3 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.0 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.6.2 - tapable: 1.1.3 - typescript: 5.2.2 - webpack: 5.91.0 - - form-data-encoder@2.1.4: {} - - format@0.2.2: {} - - forwarded@0.2.0: {} - - fraction.js@4.2.0: {} - - fraction.js@4.3.7: {} - - fresh@0.5.2: {} - - fs-extra@11.2.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - - fs-monkey@1.0.3: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.2: - optional: true - - function-bind@1.1.1: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.0: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - - get-own-enumerable-property-symbols@3.0.2: {} - - get-stream@6.0.1: {} - - github-slugger@1.5.0: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob-to-regexp@0.4.1: {} - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-dirs@3.0.1: - dependencies: - ini: 2.0.0 - - global-modules@2.0.0: - dependencies: - global-prefix: 3.0.0 - - global-prefix@3.0.0: - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - - globals@11.12.0: {} - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - - globby@13.1.4: - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - - got@12.6.1: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - - graceful-fs@4.2.10: {} - - graceful-fs@4.2.11: {} - - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - - handle-thing@2.0.1: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.0: - dependencies: - get-intrinsic: 1.2.0 - - has-symbols@1.0.3: {} - - has-yarn@3.0.0: {} - - has@1.0.3: - dependencies: - function-bind: 1.1.1 - - hast-util-from-parse5@8.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - devlop: 1.1.0 - hastscript: 8.0.0 - property-information: 6.5.0 - vfile: 6.0.1 - vfile-location: 5.0.2 - web-namespaces: 2.0.1 - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-raw@9.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.1 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - parse5: 7.1.2 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-estree@3.1.0: - dependencies: - '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - - hast-util-to-jsx-runtime@2.3.0: - dependencies: - '@types/estree': 1.0.5 - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - style-to-object: 1.0.6 - unist-util-position: 5.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - - hast-util-to-parse5@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - - he@1.2.0: {} - - history@4.10.1: - dependencies: - '@babel/runtime': 7.24.7 - loose-envify: 1.4.0 - resolve-pathname: 3.0.0 - tiny-invariant: 1.3.1 - tiny-warning: 1.0.3 - value-equal: 1.0.1 - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - hpack.js@2.1.6: - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - - html-entities@2.3.3: {} - - html-escaper@2.0.2: {} - - html-minifier-terser@6.1.0: - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.2 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.31.0 - - html-minifier-terser@7.2.0: - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.2 - commander: 10.0.1 - entities: 4.5.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.31.0 - - html-tags@3.3.1: {} - - html-void-elements@3.0.0: {} - - html-webpack-plugin@5.6.0(webpack@5.91.0): - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - optionalDependencies: - webpack: 5.91.0 - - htmlparser2@6.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - - htmlparser2@8.0.2: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.0.1 - entities: 4.5.0 - - http-cache-semantics@4.1.1: {} - - http-deceiver@1.2.7: {} - - http-errors@1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-parser-js@0.5.8: {} - - http-proxy-middleware@2.0.6(@types/express@4.17.17): - dependencies: - '@types/http-proxy': 1.17.10 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - optionalDependencies: - '@types/express': 4.17.17 - transitivePeerDependencies: - - debug - - http-proxy@1.18.1: - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.6 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - human-signals@2.1.0: {} - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - icss-utils@5.1.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - ignore@5.2.4: {} - - image-size@1.0.2: - dependencies: - queue: 6.0.2 - - immer@9.0.21: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-lazy@4.0.0: {} - - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - - infima@0.2.0-alpha.43: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.3: {} - - inherits@2.0.4: {} - - ini@1.3.8: {} - - ini@2.0.0: {} - - inline-style-parser@0.1.1: {} - - inline-style-parser@0.2.3: {} - - internmap@1.0.1: {} - - internmap@2.0.3: {} - - interpret@1.4.0: {} - - invariant@2.2.4: - dependencies: - loose-envify: 1.4.0 - - ipaddr.js@1.9.1: {} - - ipaddr.js@2.0.1: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-arrayish@0.2.1: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - - is-ci@3.0.1: - dependencies: - ci-info: 3.8.0 - - is-core-module@2.12.0: - dependencies: - has: 1.0.3 - - is-decimal@2.0.1: {} - - is-docker@2.2.1: {} - - is-extendable@0.1.1: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@2.0.1: {} - - is-installed-globally@0.4.0: - dependencies: - global-dirs: 3.0.1 - is-path-inside: 3.0.3 - - is-npm@6.0.0: {} - - is-number@7.0.0: {} - - is-obj@1.0.1: {} - - is-obj@2.0.0: {} - - is-path-cwd@2.2.0: {} - - is-path-inside@3.0.3: {} - - is-plain-obj@3.0.0: {} - - is-plain-obj@4.1.0: {} - - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - - is-regexp@1.0.0: {} - - is-root@2.1.0: {} - - is-stream@2.0.1: {} - - is-typedarray@1.0.0: {} - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - is-yarn-global@0.4.1: {} - - isarray@0.0.1: {} - - isarray@1.0.0: {} - - isexe@2.0.0: {} - - isobject@3.0.1: {} - - jest-util@29.5.0: - dependencies: - '@jest/types': 29.5.0 - '@types/node': 18.15.11 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-worker@27.5.1: - dependencies: - '@types/node': 18.15.11 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest-worker@29.5.0: - dependencies: - '@types/node': 18.15.11 - jest-util: 29.5.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jiti@1.21.3: {} - - joi@17.13.1: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsesc@0.5.0: {} - - jsesc@2.5.2: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-schema-traverse@1.0.0: {} - - json5@2.2.3: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.11 - - katex@0.16.10: - dependencies: - commander: 8.3.0 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - khroma@2.0.0: {} - - kind-of@6.0.3: {} - - kleur@3.0.3: {} - - kleur@4.1.5: {} - - latest-version@7.0.0: - dependencies: - package-json: 8.1.1 - - launch-editor@2.6.0: - dependencies: - picocolors: 1.0.1 - shell-quote: 1.8.1 - - layout-base@1.0.2: {} - - leven@3.1.0: {} - - lilconfig@3.1.1: {} - - lines-and-columns@1.2.4: {} - - load-script@1.0.0: {} - - loader-runner@4.3.0: {} - - loader-utils@2.0.4: - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - - loader-utils@3.2.1: {} - - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - - lodash-es@4.17.21: {} - - lodash.debounce@4.0.8: {} - - lodash.memoize@4.1.2: {} - - lodash.uniq@4.5.0: {} - - lodash@4.17.21: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lower-case@2.0.2: - dependencies: - tslib: 2.6.3 - - lowercase-keys@3.0.0: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - markdown-extensions@2.0.0: {} - - markdown-table@3.0.3: {} - - mdast-util-directive@3.0.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.2 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - parse-entities: 4.0.1 - stringify-entities: 4.0.4 - unist-util-visit-parents: 6.0.1 - transitivePeerDependencies: - - supports-color - - mdast-util-find-and-replace@3.0.1: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - mdast-util-from-markdown@1.3.1: - dependencies: - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 - decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.2.0 - micromark: 3.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-decode-string: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-stringify-position: 3.0.3 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.2 - decode-named-character-reference: 1.0.2 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-decode-string: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - micromark-extension-frontmatter: 2.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-autolink-literal@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.1 - micromark-util-character: 2.1.0 - - mdast-util-gfm-footnote@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - micromark-util-normalize-identifier: 2.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-table@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-task-list-item@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.1 - mdast-util-gfm-autolink-literal: 2.0.0 - mdast-util-gfm-footnote: 2.0.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.1.2: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.2 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - parse-entities: 4.0.1 - stringify-entities: 4.0.4 - unist-util-remove-position: 5.0.0 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.1 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 - mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 - - mdast-util-to-hast@13.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.0 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - - mdast-util-to-markdown@2.1.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.2 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-decode-string: 2.0.0 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@3.2.0: - dependencies: - '@types/mdast': 3.0.11 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdn-data@2.0.28: {} - - mdn-data@2.0.30: {} - - media-typer@0.3.0: {} - - memfs@3.5.0: - dependencies: - fs-monkey: 1.0.3 - - memoize-one@5.2.1: {} - - merge-descriptors@1.0.1: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - mermaid@10.9.1: - dependencies: - '@braintree/sanitize-url': 6.0.2 - '@types/d3-scale': 4.0.8 - '@types/d3-scale-chromatic': 3.0.3 - cytoscape: 3.29.2 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.29.2) - d3: 7.8.5 - d3-sankey: 0.12.3 - dagre-d3-es: 7.0.10 - dayjs: 1.11.9 - dompurify: 3.1.5 - elkjs: 0.9.3 - katex: 0.16.10 - khroma: 2.0.0 - lodash-es: 4.17.21 - mdast-util-from-markdown: 1.3.1 - non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.3.0 - ts-dedent: 2.2.0 - uuid: 9.0.0 - web-worker: 1.2.0 - transitivePeerDependencies: - - supports-color - - methods@1.1.2: {} - - micromark-core-commonmark@1.1.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.1.0 - micromark-factory-label: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-factory-title: 1.1.0 - micromark-factory-whitespace: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-html-tag-name: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-core-commonmark@2.0.1: - dependencies: - decode-named-character-reference: 1.0.2 - devlop: 1.1.0 - micromark-factory-destination: 2.0.0 - micromark-factory-label: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-factory-title: 2.0.0 - micromark-factory-whitespace: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-html-tag-name: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-directive@3.0.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-factory-whitespace: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - parse-entities: 4.0.1 - - micromark-extension-frontmatter@2.0.0: - dependencies: - fault: 2.0.1 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-gfm-autolink-literal@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-gfm-footnote@2.0.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-gfm-strikethrough@2.0.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-gfm-table@2.0.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-gfm-tagfilter@2.0.0: - dependencies: - micromark-util-types: 2.0.0 - - micromark-extension-gfm-task-list-item@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-gfm@3.0.0: - dependencies: - micromark-extension-gfm-autolink-literal: 2.0.0 - micromark-extension-gfm-footnote: 2.0.0 - micromark-extension-gfm-strikethrough: 2.0.0 - micromark-extension-gfm-table: 2.0.0 - micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.0.1 - micromark-util-combine-extensions: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-mdx-expression@3.0.0: - dependencies: - '@types/estree': 1.0.5 - devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-extension-mdx-jsx@3.0.0: - dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - vfile-message: 4.0.2 - - micromark-extension-mdx-md@2.0.0: - dependencies: - micromark-util-types: 2.0.0 - - micromark-extension-mdxjs-esm@3.0.0: - dependencies: - '@types/estree': 1.0.5 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 - micromark-util-character: 2.1.0 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 - - micromark-extension-mdxjs@3.0.0: - dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.0 - micromark-extension-mdx-md: 2.0.0 - micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-factory-destination@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-factory-destination@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-factory-label@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-factory-label@2.0.0: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-factory-mdx-expression@2.0.1: - dependencies: - '@types/estree': 1.0.5 - devlop: 1.1.0 - micromark-util-character: 2.1.0 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 - - micromark-factory-space@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-types: 1.1.0 - - micromark-factory-space@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-types: 2.0.0 - - micromark-factory-title@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-factory-title@2.0.0: - dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-factory-whitespace@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-factory-whitespace@2.0.0: - dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-util-character@1.2.0: - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-util-character@2.1.0: - dependencies: - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-util-chunked@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - - micromark-util-chunked@2.0.0: - dependencies: - micromark-util-symbol: 2.0.0 - - micromark-util-classify-character@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-util-classify-character@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-util-combine-extensions@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-util-combine-extensions@2.0.0: - dependencies: - micromark-util-chunked: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-util-decode-numeric-character-reference@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - - micromark-util-decode-numeric-character-reference@2.0.1: - dependencies: - micromark-util-symbol: 2.0.0 - - micromark-util-decode-string@1.1.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 1.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-symbol: 1.1.0 - - micromark-util-decode-string@2.0.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 2.1.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-symbol: 2.0.0 - - micromark-util-encode@1.1.0: {} - - micromark-util-encode@2.0.0: {} - - micromark-util-events-to-acorn@2.0.2: - dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 - '@types/unist': 3.0.2 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - vfile-message: 4.0.2 - - micromark-util-html-tag-name@1.2.0: {} - - micromark-util-html-tag-name@2.0.0: {} - - micromark-util-normalize-identifier@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - - micromark-util-normalize-identifier@2.0.0: - dependencies: - micromark-util-symbol: 2.0.0 - - micromark-util-resolve-all@1.1.0: - dependencies: - micromark-util-types: 1.1.0 - - micromark-util-resolve-all@2.0.0: - dependencies: - micromark-util-types: 2.0.0 - - micromark-util-sanitize-uri@1.2.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-encode: 1.1.0 - micromark-util-symbol: 1.1.0 - - micromark-util-sanitize-uri@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-encode: 2.0.0 - micromark-util-symbol: 2.0.0 - - micromark-util-subtokenize@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-util-subtokenize@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-util-symbol@1.1.0: {} - - micromark-util-symbol@2.0.0: {} - - micromark-util-types@1.1.0: {} - - micromark-util-types@2.0.0: {} - - micromark@3.2.0: - dependencies: - '@types/debug': 4.1.12 - debug: 4.3.4 - decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-combine-extensions: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-encode: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - - micromark@4.0.0: - dependencies: - '@types/debug': 4.1.12 - debug: 4.3.4 - decode-named-character-reference: 1.0.2 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-encode: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - mime-db@1.33.0: {} - - mime-db@1.52.0: {} - - mime-types@2.1.18: - dependencies: - mime-db: 1.33.0 - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@3.1.0: {} - - mimic-response@4.0.0: {} - - mini-css-extract-plugin@2.9.0(webpack@5.91.0): - dependencies: - schema-utils: 4.0.1 - tapable: 2.2.1 - webpack: 5.91.0 - - minimalistic-assert@1.0.1: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimist@1.2.8: {} - - mri@1.2.0: {} - - mrmime@2.0.0: {} - - ms@2.0.0: {} - - ms@2.1.2: {} - - ms@2.1.3: {} - - multicast-dns@7.2.5: - dependencies: - dns-packet: 5.6.0 - thunky: 1.1.0 - - nanoid@3.3.7: {} - - nanoid@5.1.5: {} - - negotiator@0.6.3: {} - - neo-async@2.6.2: {} - - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.6.3 - - node-emoji@2.1.3: - dependencies: - '@sindresorhus/is': 4.6.0 - char-regex: 1.0.2 - emojilib: 2.4.0 - skin-tone: 2.0.0 - - node-forge@1.3.1: {} - - node-releases@2.0.14: {} - - non-layered-tidy-tree-layout@2.0.2: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - normalize-url@8.0.1: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - nprogress@0.2.0: {} - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - object-assign@4.1.1: {} - - object-inspect@1.12.3: {} - - object-keys@1.1.1: {} - - object.assign@4.1.4: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - obuf@1.1.2: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - on-headers@1.0.2: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - opener@1.5.2: {} - - p-cancelable@3.0.0: {} - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-limit@4.0.0: - dependencies: - yocto-queue: 1.0.0 - - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-try@2.2.0: {} - - package-json@8.1.1: - dependencies: - got: 12.6.1 - registry-auth-token: 5.0.2 - registry-url: 6.0.1 - semver: 7.6.2 - - param-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@4.0.1: - dependencies: - '@types/unist': 2.0.6 - character-entities: 2.0.2 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.24.7 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-numeric-range@1.3.0: {} - - parse5-htmlparser2-tree-adapter@7.0.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.1.2 - - parse5@7.1.2: - dependencies: - entities: 4.5.0 - - parseurl@1.3.3: {} - - pascal-case@3.1.2: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - - path-exists@3.0.0: {} - - path-exists@4.0.0: {} - - path-exists@5.0.0: {} - - path-is-absolute@1.0.1: {} - - path-is-inside@1.0.2: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-to-regexp@0.1.7: {} - - path-to-regexp@1.8.0: - dependencies: - isarray: 0.0.1 - - path-to-regexp@2.2.1: {} - - path-type@4.0.0: {} - - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - pkg-dir@7.0.0: - dependencies: - find-up: 6.3.0 - - pkg-up@3.1.0: - dependencies: - find-up: 3.0.0 - - postcss-calc@9.0.1(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - - postcss-colormin@6.1.0(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-convert-values@6.1.0(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-discard-comments@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss-discard-duplicates@6.0.3(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss-discard-empty@6.0.3(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss-discard-overridden@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss-discard-unused@6.0.5(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - - postcss-loader@7.3.4(postcss@8.4.38)(typescript@5.2.2)(webpack@5.91.0): - dependencies: - cosmiconfig: 8.3.6(typescript@5.2.2) - jiti: 1.21.3 - postcss: 8.4.38 - semver: 7.6.2 - webpack: 5.91.0 - transitivePeerDependencies: - - typescript - - postcss-merge-idents@6.0.3(postcss@8.4.38): - dependencies: - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-merge-longhand@6.0.5(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.4.38) - - postcss-merge-rules@6.1.1(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - - postcss-minify-font-values@6.1.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-minify-gradients@6.0.3(postcss@8.4.38): - dependencies: - colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-minify-params@6.1.0(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-minify-selectors@6.0.4(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - - postcss-modules-extract-imports@3.1.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss-modules-local-by-default@4.0.5(postcss@8.4.38): - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - - postcss-modules-scope@3.2.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.11 - - postcss-modules-values@4.0.0(postcss@8.4.38): - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - - postcss-normalize-charset@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss-normalize-display-values@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-positions@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-repeat-style@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-string@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-timing-functions@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-unicode@6.1.0(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-url@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-normalize-whitespace@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-ordered-values@6.0.2(postcss@8.4.38): - dependencies: - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-reduce-idents@6.0.3(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-reduce-initial@6.1.0(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - caniuse-api: 3.0.0 - postcss: 8.4.38 - - postcss-reduce-transforms@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - postcss-selector-parser@6.0.11: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@6.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-sort-media-queries@5.2.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - sort-css-media-queries: 2.2.0 - - postcss-svgo@6.0.3(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - svgo: 3.3.2 - - postcss-unique-selectors@6.0.4(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - - postcss-value-parser@4.2.0: {} - - postcss-zindex@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss@8.4.38: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - pretty-error@4.0.0: - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - - pretty-time@1.1.0: {} - - prism-react-renderer@2.3.1(react@18.2.0): - dependencies: - '@types/prismjs': 1.26.4 - clsx: 2.1.1 - react: 18.2.0 - - prismjs@1.29.0: {} - - process-nextick-args@2.0.1: {} - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - property-information@6.5.0: {} - - proto-list@1.2.4: {} - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - punycode@1.4.1: {} - - punycode@2.3.0: {} - - pupa@3.1.0: - dependencies: - escape-goat: 4.0.0 - - qs@6.11.0: - dependencies: - side-channel: 1.0.4 - - queue-microtask@1.2.3: {} - - queue@6.0.2: - dependencies: - inherits: 2.0.4 - - quick-lru@5.1.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - range-parser@1.2.0: {} - - range-parser@1.2.1: {} - - raw-body@2.5.1: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - react-dev-utils@12.0.1(typescript@5.2.2)(webpack@5.91.0): - dependencies: - '@babel/code-frame': 7.24.7 - address: 1.2.2 - browserslist: 4.23.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(typescript@5.2.2)(webpack@5.91.0) - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.2.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.8.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - webpack: 5.91.0 - optionalDependencies: - typescript: 5.2.2 - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler - - react-dom@18.2.0(react@18.2.0): - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.2 - - react-error-overlay@6.0.11: {} - - react-fast-compare@3.2.1: {} - - react-helmet-async@1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@babel/runtime': 7.24.7 - invariant: 2.2.4 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-fast-compare: 3.2.1 - shallowequal: 1.1.0 - - react-is@16.13.1: {} - - react-json-view-lite@1.4.0(react@18.2.0): - dependencies: - react: 18.2.0 - - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.91.0): - dependencies: - '@babel/runtime': 7.24.7 - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.2.0)' - webpack: 5.91.0 - - react-player@2.12.0(react@18.2.0): - dependencies: - deepmerge: 4.3.1 - load-script: 1.0.0 - memoize-one: 5.2.1 - prop-types: 15.8.1 - react: 18.2.0 - react-fast-compare: 3.2.1 - - react-router-config@5.1.1(react-router@5.3.4(react@18.2.0))(react@18.2.0): - dependencies: - '@babel/runtime': 7.24.7 - react: 18.2.0 - react-router: 5.3.4(react@18.2.0) - - react-router-dom@5.3.4(react@18.2.0): - dependencies: - '@babel/runtime': 7.24.7 - history: 4.10.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.2.0 - react-router: 5.3.4(react@18.2.0) - tiny-invariant: 1.3.1 - tiny-warning: 1.0.3 - - react-router@5.3.4(react@18.2.0): - dependencies: - '@babel/runtime': 7.24.7 - history: 4.10.1 - hoist-non-react-statics: 3.3.2 - loose-envify: 1.4.0 - path-to-regexp: 1.8.0 - prop-types: 15.8.1 - react: 18.2.0 - react-is: 16.13.1 - tiny-invariant: 1.3.1 - tiny-warning: 1.0.3 - - react@18.2.0: - dependencies: - loose-envify: 1.4.0 - - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - reading-time@1.5.0: {} - - rechoir@0.6.2: - dependencies: - resolve: 1.22.2 - - recursive-readdir@2.2.3: - dependencies: - minimatch: 3.1.2 - - regenerate-unicode-properties@10.1.0: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regenerator-runtime@0.14.1: {} - - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.24.7 - - regexpu-core@5.3.2: - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - - registry-auth-token@5.0.2: - dependencies: - '@pnpm/npm-conf': 2.2.2 - - registry-url@6.0.1: - dependencies: - rc: 1.2.8 - - regjsparser@0.9.1: - dependencies: - jsesc: 0.5.0 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.0.3 - vfile: 6.0.1 - - relateurl@0.2.7: {} - - remark-directive@3.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-directive: 3.0.0 - micromark-extension-directive: 3.0.0 - unified: 11.0.4 - transitivePeerDependencies: - - supports-color - - remark-emoji@4.0.1: - dependencies: - '@types/mdast': 4.0.4 - emoticon: 4.0.1 - mdast-util-find-and-replace: 3.0.1 - node-emoji: 2.1.3 - unified: 11.0.4 - - remark-frontmatter@5.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 - micromark-extension-frontmatter: 2.0.0 - unified: 11.0.4 - transitivePeerDependencies: - - supports-color - - remark-gfm@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-gfm: 3.0.0 - micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.4 - transitivePeerDependencies: - - supports-color - - remark-mdx@3.0.1: - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.1 - micromark-util-types: 2.0.0 - unified: 11.0.4 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.1.0 - unified: 11.0.4 - vfile: 6.0.1 - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 - - renderkid@3.0.0: - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - - require-from-string@2.0.2: {} - - require-like@0.1.2: {} - - requires-port@1.0.0: {} - - resolve-alpn@1.2.1: {} - - resolve-from@4.0.0: {} - - resolve-pathname@3.0.0: {} - - resolve@1.22.2: - dependencies: - is-core-module: 2.12.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@3.0.0: - dependencies: - lowercase-keys: 3.0.0 - - retry@0.13.1: {} - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - robust-predicates@3.0.2: {} - - rtl-detect@1.0.4: {} - - rtlcss@4.1.1: - dependencies: - escalade: 3.1.2 - picocolors: 1.0.1 - postcss: 8.4.38 - strip-json-comments: 3.1.1 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rw@1.3.3: {} - - sade@1.8.1: - dependencies: - mri: 1.2.0 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - sax@1.2.4: {} - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - schema-utils@2.7.0: - dependencies: - '@types/json-schema': 7.0.11 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - schema-utils@3.3.0: - dependencies: - '@types/json-schema': 7.0.11 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - schema-utils@4.0.1: - dependencies: - '@types/json-schema': 7.0.11 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - - search-insights@2.14.0: {} - - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - - select-hose@2.0.0: {} - - selfsigned@2.1.1: - dependencies: - node-forge: 1.3.1 - - semver-diff@4.0.0: - dependencies: - semver: 7.6.2 - - semver@6.3.1: {} - - semver@7.6.2: {} - - send@0.18.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serialize-javascript@6.0.1: - dependencies: - randombytes: 2.1.0 - - serve-handler@6.1.5: - dependencies: - bytes: 3.0.0 - content-disposition: 0.5.2 - fast-url-parser: 1.1.3 - mime-types: 2.1.18 - minimatch: 3.1.2 - path-is-inside: 1.0.2 - path-to-regexp: 2.2.1 - range-parser: 1.2.0 - - serve-index@1.9.1: - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - - serve-static@1.15.0: - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - - setprototypeof@1.1.0: {} - - setprototypeof@1.2.0: {} - - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - - shallowequal@1.1.0: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shell-quote@1.8.1: {} - - shelljs@0.8.5: - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - - side-channel@1.0.4: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - object-inspect: 1.12.3 - - signal-exit@3.0.7: {} - - sirv@2.0.4: - dependencies: - '@polka/url': 1.0.0-next.25 - mrmime: 2.0.0 - totalist: 3.0.1 - - sisteransi@1.0.5: {} - - sitemap@7.1.1: - dependencies: - '@types/node': 17.0.45 - '@types/sax': 1.2.4 - arg: 5.0.2 - sax: 1.2.4 - - skin-tone@2.0.0: - dependencies: - unicode-emoji-modifier-base: 1.0.0 - - slash@3.0.0: {} - - slash@4.0.0: {} - - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - sockjs@0.3.24: - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - - sort-css-media-queries@2.2.0: {} - - source-map-js@1.2.0: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.4: {} - - space-separated-tokens@2.0.2: {} - - spdy-transport@3.0.0: - dependencies: - debug: 4.3.4 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - - spdy@4.0.2: - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - - sprintf-js@1.0.3: {} - - srcset@4.0.0: {} - - statuses@1.5.0: {} - - statuses@2.0.1: {} - - std-env@3.3.2: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.0.1 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - stringify-object@3.3.0: - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.0.1: - dependencies: - ansi-regex: 6.0.1 - - strip-bom-string@1.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-json-comments@2.0.1: {} - - strip-json-comments@3.1.1: {} - - style-to-object@0.4.4: - dependencies: - inline-style-parser: 0.1.1 - - style-to-object@1.0.6: - dependencies: - inline-style-parser: 0.2.3 - - stylehacks@6.1.1(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - - stylis@4.3.0: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - svg-parser@2.0.4: {} - - svgo@3.3.2: - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 5.1.0 - css-tree: 2.3.1 - css-what: 6.1.0 - csso: 5.0.5 - picocolors: 1.0.1 - - tagged-tag@1.0.0: {} - - tapable@1.1.3: {} - - tapable@2.2.1: {} - - terser-webpack-plugin@5.3.10(webpack@5.91.0): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.31.0 - webpack: 5.91.0 - - terser@5.31.0: - dependencies: - '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 - commander: 2.20.3 - source-map-support: 0.5.21 - - text-table@0.2.0: {} - - thunky@1.1.0: {} - - tiny-invariant@1.3.1: {} - - tiny-warning@1.0.3: {} - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - totalist@3.0.1: {} - - trim-lines@3.0.1: {} - - trough@2.2.0: {} - - ts-dedent@2.2.0: {} - - tslib@2.6.3: {} - - type-fest@1.4.0: {} - - type-fest@2.19.0: {} - - type-fest@5.0.0: - dependencies: - tagged-tag: 1.0.0 - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typedarray-to-buffer@3.1.5: - dependencies: - is-typedarray: 1.0.0 - - typescript@5.2.2: {} - - unicode-canonical-property-names-ecmascript@2.0.0: {} - - unicode-emoji-modifier-base@1.0.0: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - - unicode-match-property-value-ecmascript@2.1.0: {} - - unicode-property-aliases-ecmascript@2.1.0: {} - - unified@11.0.4: - dependencies: - '@types/unist': 3.0.2 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.1 - - unique-string@3.0.0: - dependencies: - crypto-random-string: 4.0.0 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.2 - - unist-util-position-from-estree@2.0.0: - dependencies: - '@types/unist': 3.0.2 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.2 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.2 - unist-util-visit: 5.0.0 - - unist-util-stringify-position@3.0.3: - dependencies: - '@types/unist': 2.0.6 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.2 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - universalify@2.0.0: {} - - unpipe@1.0.0: {} - - update-browserslist-db@1.0.16(browserslist@4.23.0): - dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.1 - - update-notifier@6.0.2: - dependencies: - boxen: 7.1.1 - chalk: 5.3.0 - configstore: 6.0.0 - has-yarn: 3.0.0 - import-lazy: 4.0.0 - is-ci: 3.0.1 - is-installed-globally: 0.4.0 - is-npm: 6.0.0 - is-yarn-global: 0.4.1 - latest-version: 7.0.0 - pupa: 3.1.0 - semver: 7.6.2 - semver-diff: 4.0.0 - xdg-basedir: 5.1.0 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.0 - - url-loader@4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0): - dependencies: - loader-utils: 2.0.4 - mime-types: 2.1.35 - schema-utils: 3.3.0 - webpack: 5.91.0 - optionalDependencies: - file-loader: 6.2.0(webpack@5.91.0) - - util-deprecate@1.0.2: {} - - utila@0.4.0: {} - - utility-types@3.10.0: {} - - utils-merge@1.0.1: {} - - uuid@8.3.2: {} - - uuid@9.0.0: {} - - uvu@0.5.6: - dependencies: - dequal: 2.0.3 - diff: 5.2.0 - kleur: 4.1.5 - sade: 1.8.1 - - value-equal@1.0.1: {} - - vary@1.1.2: {} - - vfile-location@5.0.2: - dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.1 - - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.1: - dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 - - watchpack@2.4.1: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - - wbuf@1.7.3: - dependencies: - minimalistic-assert: 1.0.1 - - web-namespaces@2.0.1: {} - - web-worker@1.2.0: {} - - webpack-bundle-analyzer@4.10.2: - dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.8.2 - acorn-walk: 8.2.0 - commander: 7.2.0 - debounce: 1.2.1 - escape-string-regexp: 4.0.0 - gzip-size: 6.0.0 - html-escaper: 2.0.2 - opener: 1.5.2 - picocolors: 1.0.1 - sirv: 2.0.4 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - webpack-dev-middleware@5.3.4(webpack@5.91.0): - dependencies: - colorette: 2.0.20 - memfs: 3.5.0 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.0.1 - webpack: 5.91.0 - - webpack-dev-server@4.15.2(webpack@5.91.0): - dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.17 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.10 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.11 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6(@types/express@4.17.17) - ipaddr.js: 2.0.1 - launch-editor: 2.6.0 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.0.1 - selfsigned: 2.1.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.13.0 - optionalDependencies: - webpack: 5.91.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack-merge@5.10.0: - dependencies: - clone-deep: 4.0.1 - flat: 5.0.2 - wildcard: 2.0.0 - - webpack-sources@3.2.3: {} - - webpack@5.91.0: - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.8.2 - acorn-import-assertions: 1.9.0(acorn@8.8.2) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.17.0 - es-module-lexer: 1.2.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) - watchpack: 2.4.1 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpackbar@5.0.2(webpack@5.91.0): - dependencies: - chalk: 4.1.2 - consola: 2.15.3 - pretty-time: 1.1.0 - std-env: 3.3.2 - webpack: 5.91.0 - - websocket-driver@0.7.4: - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - - websocket-extensions@0.1.4: {} - - which@1.3.1: - dependencies: - isexe: 2.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - widest-line@4.0.1: - dependencies: - string-width: 5.1.2 - - wildcard@2.0.0: {} - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.0.1 - - wrappy@1.0.2: {} - - write-file-atomic@3.0.3: - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - - ws@7.5.9: {} - - ws@8.13.0: {} - - xdg-basedir@5.1.0: {} - - xml-js@1.6.11: - dependencies: - sax: 1.2.4 - - yallist@3.1.1: {} - - yaml@1.10.2: {} - - yocto-queue@0.1.0: {} - - yocto-queue@1.0.0: {} - - zod@4.2.1: {} - - zwitch@2.0.4: {} diff --git a/sidebars.js b/sidebars.js deleted file mode 100644 index 57f5ead..0000000 --- a/sidebars.js +++ /dev/null @@ -1,248 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - // Hide sidebar that's home page - // tutorialSidebar: [{type: 'doc', id: 'index'}], - - overviewSidebar: [ - { - type: "category", - label: "Overview", - items: [ - "overview/introduction", - "overview/overview", - "overview/key-features", - "overview/consensus", - "overview/whitepaper", - "overview/disclaimer", - ], - }, - ], - learnSidebar: [ - "learn/overview", - "learn/glossary", - { - type: "category", - label: "Basics", - items: ["learn/nodes", "learn/spectrum", "learn/tokenomics"], - }, - { - type: "category", - label: "Governance", - items: [ - "learn/governance", - "learn/quorum", - "learn/arbitrator", - "learn/proposals", - "learn/decision-making", - "learn/dispute-resolution", - "learn/updates-changes", - ], - }, - { - type: "category", - label: "Mining", - items: ["learn/upow", "learn/hw", "learn/sw", "learn/pool"], - }, - { - type: "category", - label: "Smart Contracts and IPOs", - items: [ - "learn/smart-contracts", - "learn/ipo", - "learn/dutch-auction", - "learn/contract-execution-fees", - "learn/qx", - "learn/random", - "learn/mlm", - ], - }, - "learn/aigarth", - { - type: "category", - label: "How to buy", - items: ["learn/invest", "learn/wallets", "learn/qx"], - }, - ], - - compSidebar: [ - { - type: "category", - label: "Getting Started", - items: [ - "computors/challenges", - "computors/prerequisites", - "computors/installation", - "computors/configuration", - ], - }, - { - type: "category", - label: "Run a Computor", - items: ["computors/bm", "computors/vm"], - }, - { - type: "category", - label: "Monitoring & Maintenance", - items: [ - "computors/logging", - "computors/commands", - "computors/backup-restore", - "computors/upgrading", - ], - }, - ], - devSidebar: [ - "developers/intro", // Entry point explaining the paths - { - type: "category", - label: "Smart Contracts", // Comprehensive SC section - items: [ - "developers/smart-contracts/overview", - { - type: "category", - label: "Getting Started", - items: [ - "developers/dev-kit", // Enhanced setup guide - "developers/smart-contracts/getting-started/setup-environment", - "developers/smart-contracts/getting-started/add-your-contract", - "developers/smart-contracts/getting-started/test-your-contract", - "developers/smart-contracts/getting-started/congratulations", - ], - }, - { - type: "category", - label: "Contract Development", - items: [ - "developers/qpi", // Enhanced QPI guide - "developers/smart-contracts/smart-contract/overview", - "developers/smart-contracts/smart-contract/contract-structure", - "developers/smart-contracts/smart-contract/data-types", - "developers/smart-contracts/smart-contract/procedures-and-functions", - "developers/smart-contracts/smart-contract/states", - "developers/smart-contracts/smart-contract/cross-inner-call", - "developers/smart-contracts/smart-contract/assets-and-shares", - "developers/smart-contracts/smart-contract/how-sc-actually-work", - "developers/smart-contracts/smart-contract/code-style", - "developers/smart-contracts/smart-contract/programs-in-practice", - "developers/smart-contracts/smart-contract/restrictions", - ], - }, - { - type: "category", - label: "CLI Tools", - items: [ - "developers/smart-contracts/cli/Overview", - "developers/smart-contracts/cli/call-contract-function", - "developers/smart-contracts/cli/invoke-contract-procedure", - ], - }, - { - type: "category", - label: "Examples", - items: [ - "developers/smart-contracts/sc-by-examples/assets-and-shares", - "developers/smart-contracts/sc-by-examples/qns", - ], - }, - { - type: "category", - label: "Testing", - items: [ - "developers/testnet-resources", // Enhanced testing resources - "developers/smart-contracts/testing/overview", - "developers/smart-contracts/testing/contract-testing", - "developers/smart-contracts/testing/testnet", - ], - }, - { - type: "category", - label: "Resources", - items: [ - "developers/oracles", // Advanced SC concept - "developers/smart-contracts/resources/contract-verify-tool", - "developers/smart-contracts/resources/qubic-lite-core", - ], - }, - "developers/dev-kit", // Setup - "developers/testnet-resources", // Testing Env - "developers/qpi", // Core Language/Interface - "developers/oracles", // Advanced SC concept - ], - }, - { - type: "category", - label: "Frontend & Interaction", // Path 2 & 3 combined - items: [ - "api/rpc", // Connecting (Included directly) - "api/wallet-integrations", // Wallets (Moved from apiSidebar) - "developers/frontend-integration", // Guide for interaction - { - type: "category", - label: "RPC Integration", // Enhanced RPC section - items: [ - "developers/smart-contracts/rpc/Overview", - "developers/smart-contracts/rpc/setup-rpc", - "developers/smart-contracts/rpc/ts-library", - ], - }, - { - type: "category", - label: "Libraries", // Key tools for this path - items: [ - "developers/library-typescript", - "developers/library-java", - "developers/library-go", - "developers/library-http", - "developers/library-csharp", - "developers/library-rust", - ], - }, - ], - }, - { - type: "category", - label: "Developer Guide", - items: [ - "developers/ticks-and-concurrency", - "developers/smart-contract-architecture", - ], - }, - { - type: "category", - label: "Tools & Clients", // General tools - items: [ - "developers/qubic-node", - "developers/qubic-cli", - "developers/client-qubicj-shell", - ], - }, - { - type: "category", - label: "Community & Programs", - items: [ - "developers/contribute", - "developers/grants", - ], - }, - { - type: "category", - label: "Tutorials", - items: ["developers/tutorials"], - }, - ], -}; - -module.exports = sidebars; diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx deleted file mode 100644 index 91e1ff5..0000000 --- a/src/components/Card/Card.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; - -import styles from './Card.module.css'; - -const Card = ({ title, description, imageUrl, href }) => { - return ( - -
- {title} -
-

{title}

-

{description}

-
-
-
- ); -}; - -export default Card; diff --git a/src/components/Card/Card.module.css b/src/components/Card/Card.module.css deleted file mode 100644 index 982d407..0000000 --- a/src/components/Card/Card.module.css +++ /dev/null @@ -1,31 +0,0 @@ -/* src/components/Card.module.css */ -.card { - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - border-radius: 8px; - overflow: hidden; - transition: transform 0.2s; - } - - .card:hover { - transform: translateY(-4px); - } - - .cardImage { - width: 100%; - height: 200px; - object-fit: cover; - } - - .cardContent { - padding: 10px; - } - - .cardTitle { - - } - - .cardDescription { - - } - - \ No newline at end of file diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index 92c5d02..0000000 --- a/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import styles from './styles.module.css'; -import Link from '@docusaurus/Link'; - -type FeatureItem = { - title: string; - //Svg: React.ComponentType>; - description: JSX.Element; - link: URL; -}; - -const FeatureList: FeatureItem[] = [ - { - title: 'Learn about Qubic', - // Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, - description: ( - <> - Dive into the world of Qubic, a revolutionary crypto platform that's reshaping the digital landscape. - With its unique quorum-based computation (QBC) system, Useful Proof-of-Work, and feeless transfers, - Qubic sets a new standard for reliability, efficiency, and user-friendliness. - Explore how Qubic combines the best aspects of existing platforms and eradicates their limitations." - - ), - link: '/learn/overview', - }, - { - title: 'Become a Computor', - //Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, - description: ( - <> - Take part in the future of blockchain technology. By becoming a Computor in the Qubic network, - you're not just a participant, but a pillar of our innovative consensus protocol. - Maintain high computational standards, execute smart contracts and contribute to the - decentralization and security of the Qubic platform. - Discover how you can leverage your computing prowess for rewards and play a pivotal role in the Qubic ecosystem. - - ), - link: '/computors/prerequisites', - }, - { - title: 'Become an Investor', - //Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, - description: ( - <> - Seize the opportunity to invest in one of the most promising crypto platforms on the horizon. - Qubic's unique approach to consensus, mining, and smart contract execution not only sets it apart - but also ensures a scalable and robust platform. By investing in Qubic, you're not just backing a - cryptocurrency; you're fuelling an advanced, sustainable, and game-changing technology. - Learn more about the potential of Qubic and embark on an exciting investment journey. - - ), - link: '/learn/invest', - }, -]; - -function Feature({title, Svg, description, link}: FeatureItem) { - return ( - -
- {/* -
- -
- */} - -
-

{title}

-

{description}

-
- -
- ); -} - -export default function HomepageFeatures(): JSX.Element { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index cbcf8a2..0000000 --- a/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,27 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} - -.featureLink { - display: block; - color: inherit; - text-decoration: none; - border: 1px solid #eee; - padding: 10px; - border-radius: 4px; - transition: box-shadow 0.3s ease; -} - -.featureLink:hover { - box-shadow: 0px 0px 10px rgba(0,0,0,0.1); - text-decoration: none; - -} diff --git a/src/css/custom.css b/src/css/custom.css deleted file mode 100644 index e60f9b4..0000000 --- a/src/css/custom.css +++ /dev/null @@ -1,165 +0,0 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: #0F172A; /* #2e8555; */ - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - --ifm-navbar-link-hover-color: #1ADEF5; - --ifm-menu-color-active: #1ADEF5; - --ifm-link-color: #1ADEF5; - --code-highlighter-green: #98fb98; - --code-highlighter-yellow: #fffdd0; - --code-highlighter-red: #FF69B4; - --code-highlighter-blue: #40e0d0; - --ifm-font-family-base: "PP Telegraf Regular", "PP Telegraf Regular Placeholder", sans-serif; - --ifm-font-color-base: rgba(38, 38, 42, .65); - --ifm-heading-color: #000; -} - - -/* For readability concerns, please should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #1ADEF5; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); - --code-highlighter-green: #006400; - --code-highlighter-yellow: #FFA500; - --code-highlighter-red: #FF6961; - --code-highlighter-blue: #1ADEF5; - --ifm-font-family-base: "PP Telegraf Regular", "PP Telegraf Regular Placeholder", sans-serif; - --ifm-font-color-base: #BDBFC6; - --ifm-heading-color: #FFF; -} - -.hero { - background-image: url("/static/img/qubic_background.png"); -} - -.hero__title { - background-color: rgba(0, 0, 0, 0.5); /* 50% transparent black */ - color: #FFF; -} - -[data-theme='dark'] .hero__title { - color: #FFFFFF; -} - - -.hero__subtitle { - background-color: rgba(0, 0, 0, 0.5); /* 50% transparent black */ -} - -[data-theme='dark'] .hero__subtitle { - color: #FFFFFF; -} - -/* APIs Landing Page */ -.apis-container { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; -} - -.apis-hero { - text-align: center; - margin-bottom: 3rem; -} - -.apis-hero h1 { - font-size: 2.5rem; - margin-bottom: 1rem; -} - -.apis-hero p { - font-size: 1.2rem; - opacity: 0.8; -} - -.apis-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; - margin-bottom: 3rem; -} - -.api-card { - display: block; - padding: 1.5rem; - border-radius: 8px; - border: 1px solid var(--ifm-color-emphasis-300); - background: var(--ifm-background-surface-color); - text-decoration: none; - transition: transform 0.2s, box-shadow 0.2s; -} - -.api-card:hover { - transform: translateY(-4px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - text-decoration: none; -} - -.api-card-header { - display: flex; - align-items: center; - gap: 0.75rem; - margin-bottom: 0.75rem; -} - -.api-card h3 { - margin: 0; - color: var(--ifm-heading-color); -} - -.api-badge { - font-size: 0.75rem; - padding: 0.25rem 0.5rem; - border-radius: 4px; - background: var(--ifm-color-primary); - color: white; -} - -.api-card p { - margin: 0; - color: var(--ifm-font-color-base); - font-size: 0.95rem; -} - -.apis-info { - text-align: center; - padding: 2rem; - border-radius: 8px; - background: var(--ifm-background-surface-color); - border: 1px solid var(--ifm-color-emphasis-300); -} - -.apis-info h2 { - margin-bottom: 1rem; -} - -.apis-info code { - font-size: 1.1rem; - padding: 0.5rem 1rem; - background: var(--ifm-color-emphasis-200); - border-radius: 4px; -} - -.apis-info p { - margin-top: 1rem; - opacity: 0.8; -} \ No newline at end of file diff --git a/src/pages/apis/index.js b/src/pages/apis/index.js deleted file mode 100644 index ce57c8e..0000000 --- a/src/pages/apis/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; - -const apis = [ - { - title: 'Query API', - description: 'Access historical blockchain data, transactions, and archived information.', - link: '/apis/query#description/introduction', - }, - { - title: 'Live API', - description: 'Real-time interaction with the Qubic network. Submit transactions, check balances, and monitor network status.', - link: '/apis/live#description/introduction', - badge: 'REST', - }, -]; - -function ApiCard({ title, description, link, badge }) { - return ( - -
-
-

{title}

- {badge && {badge}} -
-

{description}

-
- - ); -} - -export default function ApisPage() { - return ( - -
-
-

Qubic API Center

-

Explore our APIs to build powerful integrations with the Qubic network.

-
-
- {apis.map((api, idx) => ( - - ))} -
-
-
- ); -} diff --git a/static/.nojekyll b/static/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/static/admin/config.yml b/static/admin/config.yml deleted file mode 100644 index 409fbc2..0000000 --- a/static/admin/config.yml +++ /dev/null @@ -1,117 +0,0 @@ -backend: - name: github - branch: main - repo: qubic/docs - -# These lines should *not* be indented -media_folder: "static/img" # Media files will be stored in the repo under static/images/uploads -public_folder: "/img/" # The src attribute for uploaded media will begin with /images/uploads - -collections: - - name: blog - label: "Blog" - folder: blog - identifier_field: title - extension: md - widget: "list" - create: true - slug: "{{year}}-{{month}}-{{day}}-{{slug}}" # Filename template, e.g., YYYY-MM-DD-title.md - fields: - - { name: title, label: Title, widget: string } - - { name: body, label: Body, widget: markdown } - - { name: slug, label: Slug, widget: string } - - label: "Tags" - name: "tags" - widget: "list" - - label: "Authors" - name: "authors" - widget: "list" - fields: - - { name: name, label: Name, widget: string } - - { name: title, label: Title, widget: string } - - { name: url, label: URL, widget: string } - - { name: imageUrl, label: ImageURL, widget: string } - - name: API - label: "API" - folder: docs/api - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} - - name: Computors - label: "Computors" - folder: docs/computors - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} - - name: Developers - label: "Developers" - folder: docs/developers - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} - - name: Learn - label: "Learn" - folder: docs/learn - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} - - name: Overview - label: "Overview" - folder: docs/overview - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} - - name: Tutorial-Basics - label: "Tutorial-Basics" - folder: docs/tutorial-basics - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} - - name: Tutorial-Extras - label: "Tutorial-Extras" - folder: docs/tutorial-extras - create: true - nested: - depth: 100 # max depth to show in the collection tree - summary: '{{title}}' - fields: - - {label: "Title", name: "title", widget: "string"} - - {label: "Publish Date", name: "date", widget: "datetime"} - - {label: "Featured Image", name: "thumbnail", widget: "image", required: false} - - {label: "Body", name: "body", widget: "markdown"} \ No newline at end of file diff --git a/static/admin/index.html b/static/admin/index.html deleted file mode 100644 index 9fbd6e5..0000000 --- a/static/admin/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Docs Manager - - - - - - \ No newline at end of file diff --git a/static/img/Qubic-Logo-Dark.png b/static/img/Qubic-Logo-Dark.png deleted file mode 100644 index 69c92c5..0000000 Binary files a/static/img/Qubic-Logo-Dark.png and /dev/null differ diff --git a/static/img/Qubic-Logo-White.png b/static/img/Qubic-Logo-White.png deleted file mode 100644 index 7507e49..0000000 Binary files a/static/img/Qubic-Logo-White.png and /dev/null differ diff --git a/static/img/Qubic-Symbol-White.png b/static/img/Qubic-Symbol-White.png deleted file mode 100644 index 40b5b62..0000000 Binary files a/static/img/Qubic-Symbol-White.png and /dev/null differ diff --git a/static/img/acquireShares.png b/static/img/acquireShares.png deleted file mode 100644 index b58163a..0000000 Binary files a/static/img/acquireShares.png and /dev/null differ diff --git a/static/img/computor.png b/static/img/computor.png deleted file mode 100644 index 7b217ae..0000000 Binary files a/static/img/computor.png and /dev/null differ diff --git a/static/img/data_pipeline.png b/static/img/data_pipeline.png deleted file mode 100644 index 3d5bd16..0000000 Binary files a/static/img/data_pipeline.png and /dev/null differ diff --git a/static/img/docusaurus-social-card.jpg b/static/img/docusaurus-social-card.jpg deleted file mode 100644 index ffcb448..0000000 Binary files a/static/img/docusaurus-social-card.jpg and /dev/null differ diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png deleted file mode 100644 index f458149..0000000 Binary files a/static/img/docusaurus.png and /dev/null differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico deleted file mode 100644 index c01d54b..0000000 Binary files a/static/img/favicon.ico and /dev/null differ diff --git a/static/img/frame-hackathon.jpg b/static/img/frame-hackathon.jpg deleted file mode 100644 index 7cd2e77..0000000 Binary files a/static/img/frame-hackathon.jpg and /dev/null differ diff --git a/static/img/helix-logic-gate.png b/static/img/helix-logic-gate.png deleted file mode 100644 index 2e8b093..0000000 Binary files a/static/img/helix-logic-gate.png and /dev/null differ diff --git a/static/img/id_state.png b/static/img/id_state.png deleted file mode 100644 index 73d9cba..0000000 Binary files a/static/img/id_state.png and /dev/null differ diff --git a/static/img/install_vs1.png b/static/img/install_vs1.png deleted file mode 100644 index 0d8f0b6..0000000 Binary files a/static/img/install_vs1.png and /dev/null differ diff --git a/static/img/install_vs10.png b/static/img/install_vs10.png deleted file mode 100644 index 251acdb..0000000 Binary files a/static/img/install_vs10.png and /dev/null differ diff --git a/static/img/install_vs11.png b/static/img/install_vs11.png deleted file mode 100644 index 8702c4e..0000000 Binary files a/static/img/install_vs11.png and /dev/null differ diff --git a/static/img/install_vs2.png b/static/img/install_vs2.png deleted file mode 100644 index 4ae33db..0000000 Binary files a/static/img/install_vs2.png and /dev/null differ diff --git a/static/img/install_vs3.png b/static/img/install_vs3.png deleted file mode 100644 index 0f4086d..0000000 Binary files a/static/img/install_vs3.png and /dev/null differ diff --git a/static/img/install_vs4.png b/static/img/install_vs4.png deleted file mode 100644 index 6edfb59..0000000 Binary files a/static/img/install_vs4.png and /dev/null differ diff --git a/static/img/install_vs5.png b/static/img/install_vs5.png deleted file mode 100644 index 1c814ac..0000000 Binary files a/static/img/install_vs5.png and /dev/null differ diff --git a/static/img/install_vs6.png b/static/img/install_vs6.png deleted file mode 100644 index 92ed20b..0000000 Binary files a/static/img/install_vs6.png and /dev/null differ diff --git a/static/img/install_vs7.png b/static/img/install_vs7.png deleted file mode 100644 index a618952..0000000 Binary files a/static/img/install_vs7.png and /dev/null differ diff --git a/static/img/install_vs8.png b/static/img/install_vs8.png deleted file mode 100644 index 976bd3b..0000000 Binary files a/static/img/install_vs8.png and /dev/null differ diff --git a/static/img/install_vs8_fix1.png b/static/img/install_vs8_fix1.png deleted file mode 100644 index 86e1529..0000000 Binary files a/static/img/install_vs8_fix1.png and /dev/null differ diff --git a/static/img/install_vs9.png b/static/img/install_vs9.png deleted file mode 100644 index 127c682..0000000 Binary files a/static/img/install_vs9.png and /dev/null differ diff --git a/static/img/logo.svg b/static/img/logo.svg deleted file mode 100644 index 9db6d0d..0000000 --- a/static/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/qlogo.png b/static/img/qlogo.png deleted file mode 100644 index 90fe120..0000000 Binary files a/static/img/qlogo.png and /dev/null differ diff --git a/static/img/qrdp_1.png b/static/img/qrdp_1.png deleted file mode 100644 index 264fde8..0000000 Binary files a/static/img/qrdp_1.png and /dev/null differ diff --git a/static/img/qrdp_2.png b/static/img/qrdp_2.png deleted file mode 100644 index cf6b62d..0000000 Binary files a/static/img/qrdp_2.png and /dev/null differ diff --git a/static/img/qrdp_3.png b/static/img/qrdp_3.png deleted file mode 100644 index fca8e6d..0000000 Binary files a/static/img/qrdp_3.png and /dev/null differ diff --git a/static/img/qrdp_4.png b/static/img/qrdp_4.png deleted file mode 100644 index 14500c3..0000000 Binary files a/static/img/qrdp_4.png and /dev/null differ diff --git a/static/img/qubic-docs-logo-darkmode.svg b/static/img/qubic-docs-logo-darkmode.svg deleted file mode 100644 index 1478f78..0000000 --- a/static/img/qubic-docs-logo-darkmode.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/static/img/qubic-docs-logo-lightmode.svg b/static/img/qubic-docs-logo-lightmode.svg deleted file mode 100644 index c6d2180..0000000 --- a/static/img/qubic-docs-logo-lightmode.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/static/img/qubic-li-cube.ico b/static/img/qubic-li-cube.ico deleted file mode 100644 index e0a8ce9..0000000 Binary files a/static/img/qubic-li-cube.ico and /dev/null differ diff --git a/static/img/qubic-li-cube.svg b/static/img/qubic-li-cube.svg deleted file mode 100644 index 44f4af4..0000000 --- a/static/img/qubic-li-cube.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/img/qubic-units.png b/static/img/qubic-units.png deleted file mode 100644 index b8648cf..0000000 Binary files a/static/img/qubic-units.png and /dev/null differ diff --git a/static/img/qubic-world-logo.png b/static/img/qubic-world-logo.png deleted file mode 100644 index aba5dee..0000000 Binary files a/static/img/qubic-world-logo.png and /dev/null differ diff --git a/static/img/qubic.ico b/static/img/qubic.ico deleted file mode 100644 index 1bb12f6..0000000 Binary files a/static/img/qubic.ico and /dev/null differ diff --git a/static/img/qubic_background.png b/static/img/qubic_background.png deleted file mode 100644 index cae4a71..0000000 Binary files a/static/img/qubic_background.png and /dev/null differ diff --git a/static/img/quorum.png b/static/img/quorum.png deleted file mode 100644 index 143af55..0000000 Binary files a/static/img/quorum.png and /dev/null differ diff --git a/static/img/releaseShares.png b/static/img/releaseShares.png deleted file mode 100644 index 4f77931..0000000 Binary files a/static/img/releaseShares.png and /dev/null differ diff --git a/static/img/time_flow.png b/static/img/time_flow.png deleted file mode 100644 index d0fc80a..0000000 Binary files a/static/img/time_flow.png and /dev/null differ diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index af961c4..0000000 --- a/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,171 +0,0 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf0..0000000 --- a/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d3..0000000 --- a/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/js/enable_lme_chatbot.js b/static/js/enable_lme_chatbot.js deleted file mode 100644 index 60f9b19..0000000 --- a/static/js/enable_lme_chatbot.js +++ /dev/null @@ -1,18 +0,0 @@ -/* This code enables the integration of the LetMeExplain.ai chatbot to this page. - -Parameters: orgId, - Unique identifier of the chatbot in the letmeexplain.ai client dashboard. -For support of LetMeExplain.ai chatbot or access to client dashboard, please contact - -Email: hello@letmeexplain.ai -Discord ID: @minus1618 -Telegram: @amiri_uk - -*/ - -window.addEventListener("DOMContentLoaded", function() { - if (window.loadCustomWidget) { - window.loadCustomWidget({ - orgId: "968dce85-5513-43" - }); - } -}); \ No newline at end of file diff --git a/static/media/230719_IPO_Qx.mp4 b/static/media/230719_IPO_Qx.mp4 deleted file mode 100644 index 3a7577f..0000000 Binary files a/static/media/230719_IPO_Qx.mp4 and /dev/null differ diff --git a/static/openapi/qubic-http.openapi.yaml b/static/openapi/qubic-http.openapi.yaml deleted file mode 100644 index 1a520aa..0000000 --- a/static/openapi/qubic-http.openapi.yaml +++ /dev/null @@ -1,749 +0,0 @@ -# Generated with protoc-gen-openapi -# https://github.com/google/gnostic/tree/master/cmd/protoc-gen-openapi - -openapi: 3.0.3 -info: - title: Qubic Live API - description: Bridge service for Qubic network operations. - version: 1.0.0 -servers: - - url: https://rpc.qubic.org/live/v1 -paths: - /assets/issuances: - get: - tags: - - QubicLiveService - - Assets - summary: Search Asset Issuances - description: Returns a list of issued assets filtered by issuer identity and asset name. - operationId: QubicLiveService_GetIssuedAssetsByFilter - parameters: - - name: issuerIdentity - in: query - schema: - type: string - - name: assetName - in: query - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/AssetIssuances' - /assets/issuances/{index}: - get: - tags: - - QubicLiveService - - Assets - summary: Get Asset Issuance By Index - description: Returns an asset issuance by universe index. - operationId: QubicLiveService_GetIssuedAssetByUniverseIndex - parameters: - - name: index - in: path - required: true - schema: - type: integer - format: uint32 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/AssetIssuance' - /assets/ownerships: - get: - tags: - - QubicLiveService - - Assets - summary: Search Asset Ownerships - description: Returns a list of asset ownerships filtered by issuer, asset name, owner and managing contract. - operationId: QubicLiveService_GetOwnedAssetsByFilter - parameters: - - name: issuerIdentity - in: query - description: Identity of the issuer. Defaults to the zero address (smart contract shares). - schema: - type: string - - name: assetName - in: query - description: Name of the asset (required). - schema: - type: string - - name: ownerIdentity - in: query - description: Identity of the owner of the asset (optional). - schema: - type: string - - name: ownershipManagingContract - in: query - description: Index of the contract that manages the ownership (optional). - schema: - type: integer - format: uint32 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/AssetOwnerships' - /assets/ownerships/{index}: - get: - tags: - - QubicLiveService - - Assets - summary: Get Asset Ownership By Index - description: Returns an asset ownership by universe index. - operationId: QubicLiveService_GetOwnedAssetByUniverseIndex - parameters: - - name: index - in: path - required: true - schema: - type: integer - format: uint32 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/AssetOwnership' - /assets/possessions: - get: - tags: - - QubicLiveService - - Assets - summary: Search Asset Possessions - description: Returns a list of asset possessions filtered by issuer, asset name, owner, possessor and managing contracts. - operationId: QubicLiveService_GetPossessedAssetsByFilter - parameters: - - name: issuerIdentity - in: query - description: Identity of the issuer (required). Defaults to the zero address (smart contract shares). - schema: - type: string - - name: assetName - in: query - description: Name of the asset (required). - schema: - type: string - - name: ownerIdentity - in: query - description: Identity of the owner of the asset (optional). - schema: - type: string - - name: possessorIdentity - in: query - description: Identity of the possessor of the asset (optional). - schema: - type: string - - name: ownershipManagingContract - in: query - description: Index of the contract that manages the ownership (optional). - schema: - type: integer - format: uint32 - - name: possessionManagingContract - in: query - description: Index of the contract that manages the possession (optional). - schema: - type: integer - format: uint32 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/AssetPossessions' - /assets/possessions/{index}: - get: - tags: - - QubicLiveService - - Assets - summary: Get Asset Possession By Index - description: Returns an asset possession by universe index. - operationId: QubicLiveService_GetPossessedAssetByUniverseIndex - parameters: - - name: index - in: path - required: true - schema: - type: integer - format: uint32 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/AssetPossession' - /assets/{identity}/issued: - get: - tags: - - QubicLiveService - - Assets - summary: List Issued Assets - description: Gets assets issued by the specified identity. - operationId: QubicLiveService_GetIssuedAssets - parameters: - - name: identity - in: path - required: true - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/IssuedAssetsResponse' - /assets/{identity}/owned: - get: - tags: - - QubicLiveService - - Assets - summary: List Owned Assets - description: Gets assets that are owned by the specified identity. - operationId: QubicLiveService_GetOwnedAssets - parameters: - - name: identity - in: path - required: true - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/OwnedAssetsResponse' - /assets/{identity}/possessed: - get: - tags: - - QubicLiveService - - Assets - summary: List Possessed Assets - description: Gets assets that are possessed by the specified identity. - operationId: QubicLiveService_GetPossessedAssets - parameters: - - name: identity - in: path - required: true - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/PossessedAssetsResponse' - /balances/{id}: - get: - tags: - - QubicLiveService - - Accounts - summary: Get Balance - description: Gets the balance of the specified identity. - operationId: QubicLiveService_GetBalance - parameters: - - name: id - in: path - required: true - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetBalanceResponse' - /block-height: - get: - tags: - - QubicLiveService - - Network - summary: Get Block Height - description: 'Deprecated: use /tick-info instead.' - operationId: QubicLiveService_GetBlockHeight - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetBlockHeightResponse' - deprecated: true - /broadcast-transaction: - post: - tags: - - QubicLiveService - - Transactions - summary: Broadcast Transaction - description: Broadcasts a transaction to the network. - operationId: QubicLiveService_BroadcastTransaction - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/BroadcastTransactionRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/BroadcastTransactionResponse' - /ipos/active: - get: - tags: - - QubicLiveService - - Smart Contracts - summary: Get Active IPOs - description: Returns a list of IPOs that are active in the current epoch. - operationId: QubicLiveService_GetActiveIpos - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetActiveIposResponse' - /querySmartContract: - post: - tags: - - QubicLiveService - - Smart Contracts - summary: Query Smart Contract - description: Queries a smart contract function. - operationId: QubicLiveService_QuerySmartContract - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/QuerySmartContractRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/QuerySmartContractResponse' - /tick-info: - get: - tags: - - QubicLiveService - - Network - summary: Get Tick Info - description: Gets the current tick information. - operationId: QubicLiveService_GetTickInfo - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetTickInfoResponse' -components: - schemas: - AssetInfo: - type: object - properties: - tick: - type: integer - format: uint32 - universeIndex: - type: integer - format: uint32 - description: AssetInfo - AssetIssuance: - type: object - properties: - data: - $ref: '#/components/schemas/AssetIssuanceData' - tick: - type: integer - format: uint32 - universeIndex: - type: integer - format: uint32 - description: AssetIssuance - AssetIssuanceData: - type: object - properties: - issuerIdentity: - type: string - type: - type: integer - format: uint32 - name: - type: string - numberOfDecimalPlaces: - type: integer - format: int32 - unitOfMeasurement: - type: array - items: - type: integer - format: int32 - description: AssetIssuanceData - AssetIssuances: - type: object - properties: - assets: - type: array - items: - $ref: '#/components/schemas/AssetIssuance' - description: AssetIssuances - AssetOwnership: - type: object - properties: - data: - $ref: '#/components/schemas/AssetOwnershipData' - tick: - type: integer - format: uint32 - universeIndex: - type: integer - format: uint32 - description: AssetOwnership - AssetOwnershipData: - type: object - properties: - ownerIdentity: - type: string - type: - type: integer - format: uint32 - managingContractIndex: - type: integer - format: uint32 - issuanceIndex: - type: integer - format: uint32 - numberOfUnits: - type: string - description: AssetOwnershipData - AssetOwnerships: - type: object - properties: - assets: - type: array - items: - $ref: '#/components/schemas/AssetOwnership' - description: AssetOwnerships - AssetPossession: - type: object - properties: - data: - $ref: '#/components/schemas/AssetPossessionData' - tick: - type: integer - format: uint32 - universeIndex: - type: integer - format: uint32 - description: AssetPossession - AssetPossessionData: - type: object - properties: - possessorIdentity: - type: string - type: - type: integer - format: uint32 - managingContractIndex: - type: integer - format: uint32 - ownershipIndex: - type: integer - format: uint32 - numberOfUnits: - type: string - description: AssetPossessionData - AssetPossessions: - type: object - properties: - assets: - type: array - items: - $ref: '#/components/schemas/AssetPossession' - description: AssetPossessions - Balance: - type: object - properties: - id: - type: string - description: The identity relevant to this balance. - balance: - type: string - description: The amount of funds the identity holds. - validForTick: - type: integer - description: The tick that this balance is valid for. - format: uint32 - latestIncomingTransferTick: - type: integer - description: The last tick when this identity received funds through a transfer. - format: uint32 - latestOutgoingTransferTick: - type: integer - description: The last tick when this identity sent funds through a transfer. - format: uint32 - incomingAmount: - type: string - description: The total sum of received funds over time. - outgoingAmount: - type: string - description: The total sum of sent funds over time. - numberOfIncomingTransfers: - type: integer - description: The number of incoming transfers. - format: uint32 - numberOfOutgoingTransfers: - type: integer - description: The number of outgoing transfers. - format: uint32 - description: Balance - BroadcastTransactionRequest: - type: object - properties: - encodedTransaction: - type: string - description: Base64 encoded binary transaction data. - description: BroadcastTransactionRequest - BroadcastTransactionResponse: - type: object - properties: - peersBroadcasted: - type: integer - description: The number of Qubic node peers this transactions has been broadcast to. - format: int32 - encodedTransaction: - type: string - description: The Base 64 encoded binary transaction from the request. - transactionId: - type: string - description: The id / hash of the transaction. - description: BroadcastTransactionResponse - GetActiveIposResponse: - type: object - properties: - ipos: - type: array - items: - $ref: '#/components/schemas/Ipo' - description: GetActiveIposResponse - GetBalanceResponse: - type: object - properties: - balance: - $ref: '#/components/schemas/Balance' - description: GetBalanceResponse - GetBlockHeightResponse: - type: object - properties: - blockHeight: - $ref: '#/components/schemas/TickInfo' - description: GetBlockHeightResponse - GetTickInfoResponse: - type: object - properties: - tickInfo: - $ref: '#/components/schemas/TickInfo' - description: GetTickInfoResponse - Ipo: - type: object - properties: - contractIndex: - type: integer - description: The index of the related contract (contract address). - format: uint32 - assetName: - type: string - description: The name of the related asset. - description: IPO - IssuedAsset: - type: object - properties: - data: - $ref: '#/components/schemas/IssuedAssetData' - info: - $ref: '#/components/schemas/AssetInfo' - description: IssuedAsset - IssuedAssetData: - type: object - properties: - issuerIdentity: - type: string - type: - type: integer - format: uint32 - name: - type: string - numberOfDecimalPlaces: - type: integer - format: int32 - unitOfMeasurement: - type: array - items: - type: integer - format: int32 - description: IssuedAssetData - IssuedAssetsResponse: - type: object - properties: - issuedAssets: - type: array - items: - $ref: '#/components/schemas/IssuedAsset' - description: IssuedAssetsResponse - OwnedAsset: - type: object - properties: - data: - $ref: '#/components/schemas/OwnedAssetData' - info: - $ref: '#/components/schemas/AssetInfo' - description: OwnedAsset - OwnedAssetData: - type: object - properties: - ownerIdentity: - type: string - type: - type: integer - format: uint32 - padding: - type: integer - format: int32 - managingContractIndex: - type: integer - format: uint32 - issuanceIndex: - type: integer - format: uint32 - numberOfUnits: - type: string - issuedAsset: - $ref: '#/components/schemas/IssuedAssetData' - description: OwnedAssetData - OwnedAssetsResponse: - type: object - properties: - ownedAssets: - type: array - items: - $ref: '#/components/schemas/OwnedAsset' - description: OwnedAssetsResponse - PossessedAsset: - type: object - properties: - data: - $ref: '#/components/schemas/PossessedAssetData' - info: - $ref: '#/components/schemas/AssetInfo' - description: PossessedAsset - PossessedAssetData: - type: object - properties: - possessorIdentity: - type: string - type: - type: integer - format: uint32 - padding: - type: integer - format: int32 - managingContractIndex: - type: integer - format: uint32 - issuanceIndex: - type: integer - format: uint32 - numberOfUnits: - type: string - ownedAsset: - $ref: '#/components/schemas/OwnedAssetData' - description: PossessedAssetData - PossessedAssetsResponse: - type: object - properties: - possessedAssets: - type: array - items: - $ref: '#/components/schemas/PossessedAsset' - description: PossessedAssetsResponse - QuerySmartContractRequest: - type: object - properties: - contractIndex: - type: integer - description: identifies the smart contract - format: uint32 - inputType: - type: integer - description: identifies the function to be queried - format: uint32 - inputSize: - type: integer - description: the size of the input data (request data) - format: uint32 - requestData: - type: string - description: base64 encoded input data - description: QuerySmartContractRequest - QuerySmartContractResponse: - type: object - properties: - responseData: - type: string - description: Binary data encoded as Base64. This data is returned directly from the called SC function. - description: QuerySmartContractResponse - TickInfo: - type: object - properties: - tick: - type: integer - description: current network tick - format: uint32 - duration: - type: integer - format: uint32 - epoch: - type: integer - description: current epoch - format: uint32 - initialTick: - type: integer - description: initial tick of epoch - format: uint32 - description: TickInfo -tags: - - name: Accounts - description: Check account balances and transfer history. - - name: Assets - description: Query and manage assets including issuances, ownerships, and possessions. - - name: Network - description: Network status and tick information. - - name: QubicLiveService - x-scalar-ignore: true - - name: Smart Contracts - description: Query smart contracts and view active IPOs. - - name: Transactions - description: Broadcast transactions to the network. -externalDocs: - description: GitHub - url: https://github.com/qubic/qubic-http diff --git a/static/openapi/query-services.openapi.yaml b/static/openapi/query-services.openapi.yaml deleted file mode 100644 index aece2dc..0000000 --- a/static/openapi/query-services.openapi.yaml +++ /dev/null @@ -1,599 +0,0 @@ -# Generated with protoc-gen-openapi -# https://github.com/google/gnostic/tree/master/cmd/protoc-gen-openapi - -openapi: 3.0.3 -info: - title: Qubic Query API - description: API for querying historical Qubic ledger data. - version: 1.0.0 -servers: - - url: https://rpc.qubic.org/query/v1 -paths: - /getComputorListsForEpoch: - post: - tags: - - Network - summary: Get Epoch Computors - description: |- - Get the list(s) of computors for one epoch. These are the computors (IDs signed by the arbitrator) that - are allowed to make quorum decisions. It is possible that this list changes within the epoch in case of - arbitrator intervention. - operationId: ArchiveQueryService_GetComputorsListsForEpoch - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GetComputorListsForEpochRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetComputorListsForEpochResponse' - /getLastProcessedTick: - get: - tags: - - Archive - summary: Get Last Processed Tick - description: |- - Get the last processed tick and other processing information from the archive. - All data queried from the archive is only fully processed up to this tick. - Before calling the service you should check the last processed tick to be sure to get - valid data and do not request data for future ticks that are not processed yet. You can use - the epoch and initial tick information in the response to switch to a new interval. - operationId: ArchiveQueryService_GetLastProcessedTick - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetLastProcessedTickResponse' - /getProcessedTickIntervals: - get: - tags: - - Archive - summary: Get Processed Tick Intervals - description: |- - Get the tick intervals that are available in the archive. A new tick interval is typically - created on epoch change or network restart within the epoch. Use this endpoint to skip the - tick numbers that are not part of the intervals. This endpoint is only necessary for users - that need to process all available ticks. For most users it is enough to switch to a new - interval by using the `get last processed tick` endpoint. - operationId: ArchiveQueryService_GetProcessedTickIntervals - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetProcessedTickIntervalsResponse' - /getTickData: - post: - tags: - - Ticks - summary: Get Tick Data - description: Get the tick data for one tick. - operationId: ArchiveQueryService_GetTickData - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GetTickDataRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetTickDataResponse' - /getTransactionByHash: - post: - tags: - - Transactions - summary: Get Transaction By Hash - description: Get a single transaction by its hash. - operationId: ArchiveQueryService_GetTransactionByHash - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GetTransactionByHashRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetTransactionByHashResponse' - /getTransactionsForIdentity: - post: - tags: - - Transactions - summary: Get Transactions For Identity - description: |- - Get the transactions for one identity sorted by tick number descending. - - ### Request structure - - | Name | Type | Necessity | Description | - |------------|--------------------|-----------|--------------------------------------------------------------------------------| - | identity | string | required | 60 characters uppercase identity. | - | filters | map | optional | Filters that restrict results to single value. | - | ranges | map | optional | Filters that restrict results to a value range. | - | pagination | Pagination | optional | Allows to specify the first record and the number of records to be retrieved. | - - Without filters and ranges all transactions from and to that identity ordered by tick number descending are returned. - - ### Filters - - Filters restrict the results by single values. - - #### Allowed properties - - | Name | Type | Format | Description | - |-------------|---------|------------------------|--------------------------------------------------------------------| - | source | string | 60 character identity, up to 5, comma separated. | Only find transactions that were sent from the specified identities. | - | source-exclude | string | 60 character identity, up to 5, comma separated. | Only find transactions that were not sent from the specified identities. | - | destination | string | 60 character identity, up to 5, comma separated. | Only find transactions that were sent to the specified identities. | - | destination-exclude | string | 60 character identity, up to 5, comma separated. | Only find transactions that were not sent to the specified identities. | - | amount | string | Numeric | Only find transactions with the specified amount. | - | inputType | string | Numeric | Only find transactions with the specified input type. | - | tickNumber | string | Numeric | Only find transactions with the specified tick number. | - - source` and `source-exclude` are mutually exclusive. - destination` and `destination-exclude` are mutually exclusive. - - #### Examples - - ``` - "source": "IIJHZSNPDRYYXCQBWNGKBSWYYDCARTYPOBXGOXZEVEZMMWYHPBVXZLJARRCB", - "destination": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB" - "amount": "1000000" - "inputType": "0" - ``` - - ### Ranges - - Ranges restrict the results by a range of values. On range per property is supported. - - #### Allowed properties - - | Name | Type | Format | Description | - |------------|--------|------------------------------------------|---------------------------------------------| - | amount | string | Numeric | Only find transactions in amount range. | - | tickNumber | string | Numeric | Only find transactions in tick range. | - | inputType | string | Numeric | Only find transactions in input type range. | - | timestamp | string | Numeric (Unix Timestamp in milliseconds) | Only find transactions in time range. | - - #### Range definition - - A range with size of 0 or 1 is not allowed. - - | Name | Type | Necessity | Description | - |-----------|--------|-----------|-------------------------------------------| - | field | string | required | Name of the field you wish to search for. | - | gt | string | optional | Greater than. | - | gte | string | optional | Greater than or equal to. | - | lt | string | optional | Less than. | - | lte | string | optional | Less than or equal to. | - - Only one lower bound and one upper bound can be specified. - - #### Examples - - ``` - "amount": { "gt": "1000000" } - "tickNumber": { "gte": "25563000", "lte": "28300000" } - "inputType": { "gt": "0" } - "timestamp": { "lt": "1757376000000" } - ``` - - ### Pagination - - | Name | Type | Necessity | Description | - |--------|--------|-----------|-----------------------------------------------------------------------------------------------------| - | offset | uint32 | optional | The offset of the first record to return. Defaults to zero (first record). Maximum offset is 10000. | - | size | uint32 | optional | Defaults to 10. Maximum size is 1000. Zero value is ignored (uses default). | - operationId: ArchiveQueryService_GetTransactionsForIdentity - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GetTransactionsForIdentityRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetTransactionsForIdentityResponse' - /getTransactionsForTick: - post: - tags: - - Transactions - summary: Get Transactions For Tick - description: |- - Get the transactions that are in included in one tick. - - ### Request structure - - | Name | Type | Necessity | Description | - |------------|--------------------|-----------|-------------------------------------------------| - | identity | string | required | 60 characters uppercase identity. | - | filters | map | optional | Filters that restrict results to single value. | - | ranges | map | optional | Filters that restrict results to a value range. | - - ### Filters - - Filters restrict the results by single values. - - #### Allowed properties - - | Name | Type | Format | Description | - |-------------|---------|------------------------|--------------------------------------------------------------------| - | source | string | 60 character identity | Only find transactions that were sent from the specified identities. | - | destination | string | 60 character identity | Only find transactions that were sent to the specified identities. | - | amount | string | Numeric | Only find transactions with the specified amount. | - | inputType | string | Numeric | Only find transactions with the specified input type. | - - ### Ranges - - Ranges restrict the results by a range of values. On range per property is supported. - - #### Allowed properties - - | Name | Type | Format | Description | - |------------|--------|------------------------------------------|---------------------------------------------| - | amount | string | Numeric | Only find transactions in amount range. | - | inputType | string | Numeric | Only find transactions in input type range. | - - #### Range definition - - A range with size of 0 or 1 is not allowed. - - | Name | Type | Necessity | Description | - |-----------|--------|-----------|-------------------------------------------| - | field | string | required | Name of the field you wish to search for. | - | gt | string | optional | Greater than. | - | gte | string | optional | Greater than or equal to. | - | lt | string | optional | Less than. | - | lte | string | optional | Less than or equal to. | - - Only one lower bound and one upper bound can be specified. - - For examples how to use filters and ranges see the GetTransactionsForIdentity endpoint documentation. - operationId: ArchiveQueryService_GetTransactionsForTick - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GetTransactionsForTickRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetTransactionsForTickResponse' -components: - schemas: - ComputorList: - type: object - properties: - epoch: - type: integer - description: Epoch number. - format: uint32 - tickNumber: - type: integer - description: Tick number when the list was received by the archive after it was published. - format: uint32 - identities: - type: array - items: - type: string - description: List of computor identities (signed by arbitrator). - signature: - type: string - description: Signature of the arbitrator. - description: ComputorList - GetComputorListsForEpochRequest: - type: object - properties: - epoch: - type: integer - description: The epoch number to get the computor lists for. - format: uint32 - description: GetComputorListsForEpochRequest - GetComputorListsForEpochResponse: - type: object - properties: - computorsLists: - type: array - items: - $ref: '#/components/schemas/ComputorList' - description: The lists of computors that voted in this epoch. - description: GetComputorListsForEpochResponse - GetLastProcessedTickResponse: - type: object - properties: - tickNumber: - type: integer - description: The last processed tick that is available in the archive. - format: uint32 - epoch: - type: integer - description: The epoch the last processed tick is in. - format: uint32 - intervalInitialTick: - type: integer - description: The initial tick of the current tick interval. - format: uint32 - description: GetLastProcessedTickResponse - GetProcessedTickIntervalsResponse: - type: object - properties: - processedTickIntervals: - type: array - items: - $ref: '#/components/schemas/ProcessedTickInterval' - description: A list of tick intervals that were processed. - description: GetProcessedTickIntervalsResponse - GetTickDataRequest: - type: object - properties: - tickNumber: - type: integer - description: The number of tick the tick data is requested for. - format: uint32 - description: GetTickDataRequest - GetTickDataResponse: - type: object - properties: - tickData: - $ref: '#/components/schemas/TickData' - description: GetTickDataResponse - GetTransactionByHashRequest: - type: object - properties: - hash: - type: string - description: The hash of the transaction. - description: GetTransactionByHashRequest - GetTransactionByHashResponse: - type: object - properties: - transaction: - $ref: '#/components/schemas/Transaction' - description: GetTransactionByHashResponse - GetTransactionsForIdentityRequest: - example: - identity: AFZPUAIYVPNUYGJRQVLUKOPPVLHAZQTGLYAAUUNBXFTVTAMSBKQBLEIEPCVJ - filters: - destination: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB - inputType: "0" - ranges: - amount: - gte: "1000000000" - pagination: - offset: 0 - size: 10 - type: object - properties: - identity: - type: string - description: The identity to get the transactions for. Incoming and outgoing transactions are queried by default. - filters: - type: object - additionalProperties: - type: string - description: Filters restrict the results by single values. - ranges: - type: object - additionalProperties: - $ref: '#/components/schemas/Range' - description: Ranges restrict the results by a maximum and minimum value. - pagination: - $ref: '#/components/schemas/Pagination' - description: GetTransactionsForIdentityRequest - GetTransactionsForIdentityResponse: - type: object - properties: - validForTick: - type: integer - description: The response is valid for this tick number. - format: uint32 - hits: - $ref: '#/components/schemas/Hits' - transactions: - type: array - items: - $ref: '#/components/schemas/Transaction' - description: List of transactions that matched the search criteria. - description: GetTransactionsForIdentityResponse - GetTransactionsForTickRequest: - example: - tickNumber: 42977140 - filters: - destination: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB - ranges: - amount: - gte: "1" - type: object - properties: - tickNumber: - type: integer - description: The tick number to get the transactions for. - format: uint32 - filters: - type: object - additionalProperties: - type: string - description: 'Filters restrict the results by single values. Allowed: source, destination, amount, inputType' - ranges: - type: object - additionalProperties: - $ref: '#/components/schemas/Range' - description: 'Ranges restrict the results by a maximum and minimum value. Allowed: amount, inputType' - description: GetTransactionsForTickRequest - GetTransactionsForTickResponse: - type: object - properties: - transactions: - type: array - items: - $ref: '#/components/schemas/Transaction' - description: The transactions for the requested tick number. - description: GetTransactionsForTickResponse - HealthResponse: - type: object - properties: - status: - type: string - description: Health status information. - description: HealthResponse - Hits: - type: object - properties: - total: - type: integer - description: The total number of hits available in the archive. Capped at 10000. - format: uint32 - from: - type: integer - description: Starting offset of the hits that were returned. - format: uint32 - size: - type: integer - description: Number of returned hits. - format: uint32 - description: Provides information about the number of results. - Pagination: - type: object - properties: - offset: - type: integer - description: The offset specifies the starting point of the returned data. Defaults to zero. - format: uint32 - size: - type: integer - description: The size specifies how many results should be returned. Defaults to 10. - format: uint32 - description: The number of maximum results (offset + size) is limited to 10000. - ProcessedTickInterval: - type: object - properties: - epoch: - type: integer - description: The epoch the interval is in. - format: uint32 - firstTick: - type: integer - description: The initial processed tick of the interval. - format: uint32 - lastTick: - type: integer - description: The last processed tick of the interval. - format: uint32 - description: ProcessedTickInterval - Range: - type: object - properties: - gt: - type: string - description: Greater than. - gte: - type: string - description: Greater than or equal. - lt: - type: string - description: Less than. - lte: - type: string - description: Less than or equal. - description: Range - TickData: - type: object - properties: - tickNumber: - type: integer - format: uint32 - epoch: - type: integer - format: uint32 - computorIndex: - type: integer - format: uint32 - timestamp: - type: string - varStruct: - type: string - timeLock: - type: string - transactionHashes: - type: array - items: - type: string - contractFees: - type: array - items: - type: string - signature: - type: string - description: TickData - Transaction: - type: object - properties: - hash: - type: string - amount: - type: string - source: - type: string - destination: - type: string - tickNumber: - type: integer - format: uint32 - timestamp: - type: string - inputType: - type: integer - description: Smart contract procedure index. (The smart contract procedure this transaction is supposed to trigger) - format: uint32 - inputSize: - type: integer - description: Size of input_data byte array. - format: uint32 - inputData: - type: string - description: Base64 encoded byte array containing a smart contract payload. - signature: - type: string - description: Base64 encoded byte array representing the transactions's signature. - moneyFlew: - type: boolean - description: Money flew is an additional information provided by some nodes with the tx status addon patch. - description: Transaction -tags: - - name: Archive - description: Archive processing status and coverage information. - - name: ArchiveQueryService - description: Qubic Query API - x-scalar-ignore: true - - name: Network - description: Network status and computor information. - - name: Ticks - description: Query tick data from the archive. - - name: Transactions - description: Search and retrieve transaction history. -externalDocs: - description: GitHub - url: https://github.com/qubic/archive-query-service diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 314eab8..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // This file is not used in compilation. It is here just for a nice editor experience. - "extends": "@docusaurus/tsconfig", - "compilerOptions": { - "baseUrl": "." - } -}