commit d4ba035a0b644ff7928147572097697c23ec7854 Author: Kerboul Date: Tue Mar 10 02:12:55 2026 -0700 feat: presentation RevealJS - Groupe Lazarus et hack de Bybit 2025 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..5f73206 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,17 @@ +{ + "name": "Presentation Cybersecurite - Lazarus Group", + "image": "mcr.microsoft.com/devcontainers/javascript-node:20", + "forwardPorts": [8000], + "postCreateCommand": "npm install", + "customizations": { + "vscode": { + "extensions": [ + "ritwickdey.LiveServer" + ], + "settings": { + "liveServer.settings.port": 8000, + "liveServer.settings.root": "/" + } + } + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..98c3d2c --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +.DS_Store +Thumbs.db +*.log +.env +dist/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..6c152d6 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# Presentation Cybersecurite : Le Groupe Lazarus et le hack de Bybit (2025) + +Presentation Reveal.js sur l'attaque du Groupe Lazarus contre l'exchange Bybit en fevrier 2025 (vol de ~1,5 milliard de dollars en Ethereum). Destinee a un public d'etudiants en informatique, duree d'environ 20 minutes. + +## Lancer la presentation + +### En local + +```bash +npm install +npm start +``` + +Puis ouvrir `http://localhost:8000` dans un navigateur. + +### Dans un Codespace + +Ce depot est configure comme un **Codespace template**. Il suffit de : + +1. Creer un Codespace depuis ce depot +2. Attendre que `npm install` s'execute automatiquement (via `postCreateCommand`) +3. Ouvrir le port 8000 ou utiliser l'extension Live Server + +## Structure du projet + +``` +. +├── .devcontainer/ +│ └── devcontainer.json # Configuration Codespace +├── css/ +│ └── custom.css # Theme sombre cybersecurite +├── index.html # Presentation (toutes les slides) +├── package.json # Dependances (reveal.js, serve) +├── .gitignore +└── README.md +``` + +## Contenu de la presentation + +1. Page de titre +2. Sommaire +3. Qui est le Groupe Lazarus ? +4. Historique des attaques majeures +5. Le virage vers les cryptomonnaies +6. Bybit : la cible +7. Anatomie technique de l'attaque (3 slides) +8. Impact sur le marche +9. Reponse de Bybit et attribution +10. Comment se proteger ? +11. Enjeux geopolitiques +12. Conclusion +13. Questions + +## Technologies + +- [Reveal.js](https://revealjs.com/) v5 +- HTML / CSS +- Servi localement via [serve](https://www.npmjs.com/package/serve) diff --git a/css/custom.css b/css/custom.css new file mode 100644 index 0000000..e6aed09 --- /dev/null +++ b/css/custom.css @@ -0,0 +1,335 @@ +/* ============================================ + Theme personnalise : Hacker / Cybersecurite + ============================================ */ + +:root { + --color-bg: #0a0a0a; + --color-bg-alt: #111111; + --color-green: #00ff41; + --color-red: #ff3333; + --color-cyan: #00e5ff; + --color-yellow: #ffd600; + --color-text: #e0e0e0; + --color-muted: #888888; + --color-border: #2a2a2a; + --font-mono: 'Fira Code', 'Cascadia Code', 'Consolas', monospace; + --font-sans: 'Inter', 'Segoe UI', Arial, sans-serif; +} + +/* ---- Arriere-plan global ---- */ +.reveal { + background: var(--color-bg); + color: var(--color-text); + font-family: var(--font-sans); +} + +.reveal .slides { + text-align: left; +} + +/* ---- Titres ---- */ +.reveal h1, +.reveal h2, +.reveal h3 { + color: var(--color-green); + font-family: var(--font-mono); + text-transform: none; + letter-spacing: -0.02em; +} + +.reveal h1 { + font-size: 2.2em; + border-bottom: 3px solid var(--color-green); + padding-bottom: 0.3em; + margin-bottom: 0.6em; +} + +.reveal h2 { + font-size: 1.6em; + margin-bottom: 0.5em; +} + +.reveal h3 { + font-size: 1.2em; + color: var(--color-cyan); +} + +/* ---- Texte ---- */ +.reveal p, +.reveal li { + font-size: 0.85em; + line-height: 1.7; + color: var(--color-text); +} + +.reveal ul, +.reveal ol { + margin-left: 1em; +} + +.reveal li { + margin-bottom: 0.4em; +} + +.reveal strong { + color: var(--color-green); +} + +.reveal em { + color: var(--color-cyan); + font-style: italic; +} + +/* ---- Liens ---- */ +.reveal a { + color: var(--color-cyan); + text-decoration: underline; + text-underline-offset: 3px; +} + +.reveal a:hover { + color: var(--color-green); +} + +/* ---- Code inline ---- */ +.reveal code { + font-family: var(--font-mono); + background: var(--color-bg-alt); + border: 1px solid var(--color-border); + border-radius: 4px; + padding: 0.15em 0.4em; + font-size: 0.85em; + color: var(--color-green); +} + +/* ---- Blocs de code ---- */ +.reveal pre { + background: var(--color-bg-alt); + border: 1px solid var(--color-border); + border-radius: 6px; + padding: 1em; + width: 100%; + box-sizing: border-box; +} + +.reveal pre code { + background: transparent; + border: none; + padding: 0; + font-size: 0.75em; + line-height: 1.6; +} + +/* ---- Slide de titre ---- */ +.reveal .title-slide { + text-align: center; +} + +.reveal .title-slide h1 { + border-bottom: none; + font-size: 2.6em; + margin-bottom: 0.3em; +} + +.reveal .title-slide .subtitle { + color: var(--color-cyan); + font-size: 1.1em; + font-family: var(--font-mono); + margin-bottom: 1.5em; +} + +.reveal .title-slide .authors { + color: var(--color-muted); + font-size: 0.9em; + margin-top: 1em; +} + +.reveal .title-slide .date { + color: var(--color-muted); + font-size: 0.75em; + margin-top: 0.5em; + font-family: var(--font-mono); +} + +/* ---- Classe utilitaire : alerte rouge ---- */ +.reveal .alert { + color: var(--color-red); + font-weight: bold; +} + +/* ---- Classe utilitaire : chiffre mis en avant ---- */ +.reveal .big-number { + font-size: 3em; + font-family: var(--font-mono); + color: var(--color-red); + font-weight: bold; + text-align: center; + margin: 0.5em 0; +} + +/* ---- Classe utilitaire : citation / source ---- */ +.reveal .source { + font-size: 0.6em; + color: var(--color-muted); + font-style: italic; + margin-top: 1em; +} + +/* ---- Timeline ---- */ +.reveal .timeline { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} + +.reveal .timeline::before { + content: ''; + position: absolute; + left: 8px; + top: 0; + bottom: 0; + width: 2px; + background: var(--color-green); +} + +.reveal .timeline li { + padding-left: 30px; + position: relative; + margin-bottom: 0.6em; + font-size: 0.8em; +} + +.reveal .timeline li::before { + content: ''; + position: absolute; + left: 3px; + top: 0.45em; + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--color-bg); + border: 2px solid var(--color-green); +} + +.reveal .timeline .year { + color: var(--color-cyan); + font-family: var(--font-mono); + font-weight: bold; + margin-right: 0.5em; +} + +/* ---- Schema / Diagramme en blocs ---- */ +.reveal .diagram { + display: flex; + align-items: center; + justify-content: center; + gap: 0.5em; + margin: 1.5em 0; + flex-wrap: wrap; +} + +.reveal .diagram .box { + background: var(--color-bg-alt); + border: 2px solid var(--color-green); + border-radius: 6px; + padding: 0.6em 1em; + font-family: var(--font-mono); + font-size: 0.7em; + color: var(--color-green); + text-align: center; + min-width: 100px; +} + +.reveal .diagram .box.red { + border-color: var(--color-red); + color: var(--color-red); +} + +.reveal .diagram .box.cyan { + border-color: var(--color-cyan); + color: var(--color-cyan); +} + +.reveal .diagram .arrow { + color: var(--color-muted); + font-size: 1.5em; + font-family: var(--font-mono); +} + +/* ---- Grille 2 colonnes ---- */ +.reveal .two-cols { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2em; + align-items: start; +} + +/* ---- Slide sommaire ---- */ +.reveal .toc ol { + list-style: decimal; + font-family: var(--font-mono); + font-size: 0.85em; +} + +.reveal .toc ol li { + margin-bottom: 0.5em; + color: var(--color-text); +} + +/* ---- Barre de progression ---- */ +.reveal .progress { + color: var(--color-green); +} + +/* ---- Numeros de slide ---- */ +.reveal .slide-number { + font-family: var(--font-mono); + font-size: 0.6em; + color: var(--color-muted); +} + +/* ---- Fragment animation ---- */ +.reveal .fragment.highlight-green.visible { + color: var(--color-green); +} + +.reveal .fragment.highlight-red.visible { + color: var(--color-red); +} + +/* ---- Table ---- */ +.reveal table { + border-collapse: collapse; + width: 100%; + font-size: 0.75em; +} + +.reveal table th { + background: var(--color-bg-alt); + color: var(--color-green); + font-family: var(--font-mono); + padding: 0.5em 0.8em; + border-bottom: 2px solid var(--color-green); + text-align: left; +} + +.reveal table td { + padding: 0.4em 0.8em; + border-bottom: 1px solid var(--color-border); + color: var(--color-text); +} + +.reveal table tr:hover td { + background: var(--color-bg-alt); +} + +/* ---- Slide finale ---- */ +.reveal .end-slide { + text-align: center; +} + +.reveal .end-slide h1 { + border-bottom: none; + font-size: 3em; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..21e7d35 --- /dev/null +++ b/index.html @@ -0,0 +1,422 @@ + + + + + + Le Groupe Lazarus et le hack de Bybit (2025) + + + + + + + + + + + + + + + + +
+
+ + + + +
+

Le Groupe Lazarus
& le hack de Bybit

+
Fevrier 2025 / 1,5 milliard de dollars en Ethereum
+
Presentation par [Prenom 1], [Prenom 2] et [Prenom 3]
+
2025 / 2026
+
+ + + + +
+

Sommaire

+
+
    +
  1. Qui est le Groupe Lazarus ?
  2. +
  3. Historique des attaques majeures
  4. +
  5. Le virage vers les cryptomonnaies
  6. +
  7. Bybit : la cible
  8. +
  9. Anatomie technique de l'attaque
  10. +
  11. Impact sur le marche
  12. +
  13. Reponse de Bybit et attribution
  14. +
  15. Se proteger contre ce type d'attaque
  16. +
  17. Enjeux geopolitiques
  18. +
  19. Conclusion
  20. +
+
+
+ + + + +
+

Qui est le Groupe Lazarus ?

+
+
+

Groupe de hackers etatique lie a la Coree du Nord, actif depuis 2009.

+

Classe comme Advanced Persistent Threat (APT) par les agences de renseignement occidentales.

+

Rattache au Reconnaissance General Bureau (renseignement militaire nord-coreen) et au Bureau 121, l'unite de cyberguerre.

+

Compose de deux sous-groupes principaux :

+
    +
  • BlueNorOff (APT38) : operations financieres
  • +
  • AndAriel : espionnage cible sur la Coree du Sud
  • +
+
+
+

Alias connus

+
    +
  • Hidden Cobra (Dept. Homeland Security)
  • +
  • ZINC / Diamond Sleet (Microsoft)
  • +
  • APT38 (Mandiant)
  • +
  • Stardust Chollima (CrowdStrike)
  • +
  • Guardians of Peace
  • +
  • NICKEL ACADEMY (Secureworks)
  • +
+

Sources : MITRE ATT&CK G0032, US Treasury OFAC, Kaspersky

+
+
+
+ + + + +
+

Historique des attaques majeures

+
    +
  • 2009 Operation Troy : attaques DDoS contre la Coree du Sud
  • +
  • 2013 DarkSeoul : wiper contre banques et medias sud-coreens
  • +
  • 2014 Hack de Sony Pictures : vol de donnees, destruction de systemes
  • +
  • 2016 Braquage de la Bangladesh Bank via SWIFT : 81 M$ voles
  • +
  • 2017 WannaCry : ransomware mondial, 200 000 machines dans 150 pays
  • +
  • 2022 Ronin Network (Axie Infinity) : 620 M$ en crypto
  • +
  • 2022 Horizon Bridge (Harmony) : 100 M$
  • +
  • 2023 Atomic Wallet : 100 M$, Stake.com : 41 M$
  • +
  • 2024 WazirX (Inde) : 235 M$
  • +
  • 2025 Bybit : 1,5 milliard de dollars
  • +
+

Sources : FBI, Chainalysis, Wikipedia

+
+ + + + +
+

Le virage vers les cryptomonnaies

+
+
+

Pourquoi la crypto ?

+
    +
  • Les sanctions internationales (ONU, USA, UE) bloquent les circuits financiers classiques
  • +
  • La blockchain offre un pseudo-anonymat exploitable avec des mixers et des bridges cross-chain
  • +
  • Les exchanges centralisees concentrent des milliards dans quelques wallets
  • +
  • Les smart contracts tiers representent une surface d'attaque sous-estimee
  • +
+
+
+

Estimation des vols

+
> 3 Md$
+

voles en cryptomonnaies depuis 2017 par des groupes lies a la Coree du Nord.

+

Selon les estimations, les revenus issus du cybercrime representent environ 50% des rentrees en devises etrangeres de la RPDC.

+

Ces fonds financent directement les programmes nucleaire et balistique.

+

Sources : Chainalysis 2024 Crypto Crime Report, Nations Unies

+
+
+
+ + + + +
+

Bybit : la cible

+
+
+
    +
  • Fondee en 2018, basee a Dubai
  • +
  • 2e exchange mondial par volume de trading au moment de l'attaque
  • +
  • Environ 16 milliards de dollars d'actifs sous gestion
  • +
  • Des millions d'utilisateurs dans le monde
  • +
+

L'attaque a cible le cold wallet Ethereum de Bybit, le coffre-fort hors ligne cense etre la couche de securite ultime.

+
+
+

Cold wallet vs Hot wallet

+
+
Hot Wallet
en ligne, rapide
+
←→
+
Cold Wallet
hors ligne, securise
+
+

Un cold wallet necessite plusieurs signatures (multisig) pour autoriser un transfert. En theorie, meme si un signataire est compromis, les fonds restent proteges.

+

En theorie.

+
+
+
+ + + + +
+

Anatomie de l'attaque (1/3)

+

Vecteur initial : Safe{Wallet}

+

Safe{Wallet} (anciennement Gnosis Safe) est un service tiers utilise par Bybit pour gerer la signature multiple (multisig) de ses cold wallets.

+

Les attaquants ont compromis l'infrastructure de Safe{Wallet} elle-meme, + pas directement les systemes de Bybit.

+
+
Lazarus
+
+
Safe{Wallet}
compromis
+
+
Interface de
signature Bybit
+
+
Signataires
Bybit
+
+

Les signataires de Bybit ont vu une interface apparemment legitime. Ils ont approuve ce qui semblait etre une transaction de routine, mais le contenu reel de la transaction avait ete modifie cote serveur.

+

Source : CoinTelegraph, Fevrier 2025

+
+ + + + +
+

Anatomie de l'attaque (2/3)

+

Exploitation du smart contract

+

La fausse transaction approuvee par les signataires a modifie la logique du smart contract du cold wallet :

+
    +
  1. Les signataires approuvent une transaction qui semble normale
  2. +
  3. La transaction reelle modifie le implementation contract du proxy wallet
  4. +
  5. La nouvelle logique donne le controle total a l'attaquant
  6. +
  7. L'attaquant transfere ~400 000 ETH en une seule operation
  8. +
+
+
~400 000 ETH
+

soit environ 1,5 milliard de dollars au cours du jour

+
+

C'est le plus gros vol de cryptomonnaies de l'histoire.

+
+ + + + +
+

Anatomie de l'attaque (3/3)

+

Phase de blanchiment

+

Une fois les fonds transferes, les attaquants ont lance un processus de blanchiment sophistique et rapide :

+
+
400K ETH
voles
+
+
Dispersion
multiples wallets
+
+
Mixers
Tornado Cash etc.
+
+
Bridges
cross-chain
+
+
Conversion
en BTC
+
+
    +
  • Les fonds sont disperses vers des centaines de wallets intermediaires
  • +
  • Utilisation de mixers (protocoles de melange) pour brouiller l'origine
  • +
  • Passage par des bridges cross-chain (Ethereum vers d'autres blockchains)
  • +
  • Conversion progressive en Bitcoin puis potentiellement en monnaie fiat via des exchanges non-regulees
  • +
  • Utilisation de DEX (exchanges decentralisees) pour eviter le KYC
  • +
+
+ + + + +
+

Impact sur le marche

+
+
+

Chute des cours

+
ETH : -20%
+

Ethereum a perdu plus de 20% de sa valeur dans les heures suivant l'annonce du hack.

+
BTC < 90K$
+

Le Bitcoin est passe sous la barre symbolique des 90 000 dollars.

+
+
+

Effets en chaine

+
    +
  • Ruee vers les retraits sur Bybit et d'autres exchanges
  • +
  • Plusieurs plateformes ont temporairement suspendu les retraits
  • +
  • Panique generalisee sur les marches crypto
  • +
  • Les regulateurs de plusieurs pays ont ouvert des enquetes sur la securite des exchanges
  • +
  • Remise en question de la fiabilite des solutions multisig tierces
  • +
+
+
+

Sources : CNA, CoinTelegraph, Fevrier 2025

+
+ + + + +
+

Reponse de Bybit

+
    +
  • Detection rapide : l'incident a ete identifie en quelques heures
  • +
  • Communication de crise : Bybit a publie des communiques transparents des le jour meme
  • +
  • Bounty program : une prime a ete offerte pour aider a tracer et recuperer les fonds
  • +
  • ZachXBT, analyste blockchain independant, a identifie le Groupe Lazarus comme responsable en quelques heures, via des patterns de transactions reconnaissables
  • +
  • Arkham Intelligence a confirme l'attribution en tracant les wallets vers des adresses liees a des operations precedentes de Lazarus
  • +
  • Le FBI a ensuite officiellement confirme l'implication de la Coree du Nord
  • +
+
+

Bybit a declare etre reste solvable tout au long de la crise et a annonce avoir recupere une partie des fonds voles.

+
+
+ + + + +
+

Attribution a Lazarus

+

Comment sait-on que c'est eux ?

+
+
+

Indices techniques

+
    +
  • Reutilisation de wallets lies a des hacks precedents (Axie Infinity, Horizon Bridge)
  • +
  • Patterns de blanchiment identiques : meme sequence mixer/bridge/DEX
  • +
  • Infrastructure de commande et controle (C2) recoupee avec des operations anterieures
  • +
  • Timing et methodes coherents avec le modus operandi de BlueNorOff
  • +
+
+
+

Confirmations officielles

+
    +
  • ZachXBT : attribution publique en moins de 24h
  • +
  • Arkham Intelligence : analyse on-chain confirmant les liens
  • +
  • FBI : communique officiel confirmant l'implication de la RPDC
  • +
  • Chainalysis et Elliptic : rapports detailles de tracage des fonds
  • +
+

L'attribution en cybersecurite est toujours delicate, mais le faisceau de preuves ici est particulierement solide.

+
+
+
+ + + + +
+

Comment se proteger ?

+
+
+

Pour les exchanges / entreprises

+
    +
  • Auditer regulierement les dependances tierces (supply chain security)
  • +
  • Implementer une approche zero-trust pour les outils de signature
  • +
  • Verifier les transactions au niveau du hardware, pas seulement via une interface web
  • +
  • Deployer du monitoring on-chain en temps reel pour detecter les mouvements anormaux
  • +
  • Pratiquer des exercices de red team reguliers
  • +
+
+
+

Pour les utilisateurs individuels

+
    +
  • Utiliser des hardware wallets (Ledger, Trezor) pour les fonds importants
  • +
  • Ne jamais laisser de grosses sommes sur un exchange
  • +
  • Activer l'authentification multi-facteurs (MFA) partout
  • +
  • Se mefier du phishing et de l'ingenierie sociale
  • +
  • Diversifier les lieux de stockage
  • +
+
+
+

La lecon principale de ce hack : la securite d'un systeme depend aussi de celle de ses prestataires.

+
+ + + + +
+

Enjeux geopolitiques

+
+
+

Financement etatique

+

Les fonds voles ne servent pas a enrichir des individus. Ils alimentent directement les programmes nucleaire et balistique de la Coree du Nord.

+

Estimations :

+
    +
  • ~50% des revenus en devises de la RPDC proviendraient du cybercrime
  • +
  • Environ 1 700 membres dans la seule unite BlueNorOff
  • +
  • Formation des hackers a l'universite Kim Chaek et au Mirim College, avec un passage a Shenyang (Chine)
  • +
+
+
+

Cyberguerre asymetrique

+

La Coree du Nord dispose de peu de ressources materielles mais presente une menace asymetrique considerable dans le cyberespace.

+
    +
  • Cout d'une operation cyber : faible
  • +
  • Rendement potentiel : milliards de dollars
  • +
  • Risque pour les operateurs : minimal (juridiction nord-coreenne)
  • +
  • Difficulte d'attribution et de riposte pour les victimes
  • +
+

Les sanctions internationales sont contournees par le cyberespace.

+
+
+

Sources : US Army report 2020, Nations Unies, Recorded Future

+
+ + + + +
+

Conclusion

+
    +
  • Le Groupe Lazarus est l'une des menaces cyber les plus actives et les plus financierement devastatrices au monde
  • +
  • Le hack de Bybit (fevrier 2025) est le plus gros vol de cryptomonnaies de l'histoire : 1,5 milliard de dollars
  • +
  • L'attaque a exploite une faiblesse dans un outil tiers (Safe{Wallet}), pas directement dans les systemes de Bybit
  • +
  • La securite de la supply chain logicielle est un enjeu critique pour toute organisation
  • +
  • Le cybercrime etatique nord-coreen represente un defi geopolitique majeur, a l'intersection de la cybersecurite, de la finance et des relations internationales
  • +
+

En tant que futurs professionnels de l'informatique, comprendre ces attaques et les mecanismes de defense associes est essentiel, quelle que soit votre specialisation.

+
+ + + + +
+

Questions ?

+

Merci de votre attention.

+
+

Sources principales

+
    +
  • Wikipedia : Lazarus Group
  • +
  • CoinTelegraph : "How the Bybit hack happened" (mars 2025)
  • +
  • Arkham Intelligence : attribution Lazarus
  • +
  • FBI : communique officiel (fevrier 2025)
  • +
  • Chainalysis : Crypto Crime Report 2024/2025
  • +
  • MITRE ATT&CK : G0032 Lazarus Group
  • +
  • US Army : "North Korean Tactics" (ATP 7-100.2, 2020)
  • +
+
+
+ +
+
+ + + + + + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8044d83 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1069 @@ +{ + "name": "presentation-cybersecurite-lazarus", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "presentation-cybersecurite-lazarus", + "version": "1.0.0", + "dependencies": { + "reveal.js": "^5.1.0" + }, + "devDependencies": { + "serve": "^14.2.0" + } + }, + "node_modules/@zeit/schemas": { + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", + "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", + "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-port-reachable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", + "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reveal.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-5.2.1.tgz", + "integrity": "sha512-r7//6mIM5p34hFiDMvYfXgyjXqGRta+/psd9YtytsgRlrpRzFv4RbH76TXd2qD+7ZPZEbpBDhdRhJaFgfQ7zNQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/serve": { + "version": "14.2.6", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.6.tgz", + "integrity": "sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@zeit/schemas": "2.36.0", + "ajv": "8.18.0", + "arg": "5.0.2", + "boxen": "7.0.0", + "chalk": "5.0.1", + "chalk-template": "0.4.0", + "clipboardy": "3.0.0", + "compression": "1.8.1", + "is-port-reachable": "4.0.0", + "serve-handler": "6.1.7", + "update-check": "1.5.4" + }, + "bin": { + "serve": "build/main.js" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/serve-handler": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.5", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7b2abc5 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "presentation-cybersecurite-lazarus", + "version": "1.0.0", + "description": "Presentation RevealJS sur l'attaque du Groupe Lazarus contre Bybit en 2025", + "scripts": { + "start": "npx serve -l 8000 ." + }, + "dependencies": { + "reveal.js": "^5.1.0" + }, + "devDependencies": { + "serve": "^14.2.0" + } +}